ฉันจะทำให้ภูมิประเทศ 3 มิติ“ ตกไป” เหมือน Animal Crossing ได้อย่างไร


15

Animal Crossingมีวิธีที่ไม่เหมือนใครในการเลื่อนแผนที่โลก: เมื่อตัวละครเคลื่อนตัวลงโลกจะหมุนไปมาอยู่ด้านบนเรื่อย ๆ เหมือนติดอยู่กับหลอดกระดาษแข็ง:

Animal Crossing เป็นโลกแห่งกระบอกสูบ

วิดีโอนี้แสดงวิธีการเคลื่อนไหว

ฉันจะสร้างเอฟเฟกต์นี้ได้อย่างไร?


1
ดูเหมือนเอฟเฟกต์สำหรับฉันมันดูเหมือนโลก 3 มิติที่เรียบง่ายมากที่กล้องกำลังติดตาม
James

การแฮ็คเกมสามารถสร้างความผิดพลาดของการชนที่ช่วยให้คุณสามารถเดินไปในมหาสมุทรที่ซึ่งโลกก คุณสามารถเห็นส่วนต่าง ๆ ของโลกที่แสดง "โค้งกลับ" ในความว่างเปล่าที่ไกลออกไปจากขอบโลก วิดีโอที่นี่
Anko

คำตอบ:


6

ฉันทำการทดลองเล็กน้อยหลังจากเล่น Deathspank ซึ่งมีผลคล้ายกัน แม้ว่าฉันจะไม่เคยเจาะลึกเรื่องนี้มากพอที่จะดูว่ามันสามารถปรับให้ทำงานได้ดีหรือไม่ แต่ความเป็นไปได้อย่างหนึ่งก็คือการปรับเปลี่ยนรายการในจุดสุดยอดของคุณตามความลึก ฟังก์ชันการแม็พ cos (ความลึก) กับการดัดแปลงแกน Y คุณสามารถปรับได้เพื่อให้โลกไม่เพียงแค่หยดลงในระยะไกลเท่านั้น แต่ยังสามารถปรับให้เข้ากับความลึกได้ด้วย คุณสามารถทำเช่นเดียวกันกับค่าของแกน X เพื่อทำให้ดูเหมือนเป็นทรงกลมมากขึ้น ฉันไม่แน่ใจว่านี่เป็นวิธีการที่เกมดังกล่าวทำจริง ๆ หรือไม่ การทดลองของฉันให้ผลลัพธ์ที่น่าพอใจ แต่ฉันไม่ได้เล่นกับอัตราส่วนมากนักดังนั้นมันอาจจะง่ายเหมือนการเปลี่ยนอัตราการตกเพื่อให้ดีขึ้น


+1 เพราะนี่คือวิธีที่ฉันจะทำ อย่างไรก็ตามคุณอาจต้องการอธิบายความหมายของ 'ความลึก' อาจเป็นระยะห่างจากกล้องหรือระยะห่างจากตัวละคร ฉันคิดว่ามันเป็นการดีที่จะทดสอบกับทั้งคู่
DaleyPaley

ขออภัยฉันมางานปาร์ตี้ - ช้ากว่า 6 ปี - แต่ในกรณี AC 'ความลึก' ถูกคำนวณตามระยะทางจากกล้อง ... แต่เนื่องจากตำแหน่งกล้องนั้นขึ้นอยู่กับตำแหน่งตัวละครทุกอย่างเป็นแบบ เกี่ยวข้อง
lvictorino

5

ดูเหมือนว่ามันเป็นเพียงแค่การ "โลกแบน" และการทำแผนที่เพื่อพิกัดทรงกระบอก การห่อหุ้มโลกด้วยกระบอกสูบ ฉันทำสิ่งที่คล้ายกับโลกเรียบ แต่ฉันห่อมันไว้เป็นทรงกลม:

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

วิธีที่ฉันทำเพื่อทรงกลมนั้นคล้ายกับที่คุณทำเพื่อทรงกระบอก เลือกรัศมีที่เหมาะสม (ρหรือ "rho" ในพิกัดทรงกระบอก) สำหรับโลกของคุณ สำหรับแต่ละจุดยอดใช้พิกัด XZ ในโลกของคุณ (สมมติว่า Y คือความสูง) จากนั้นแปลงเป็นพิกัดทรงกระบอกโดยใช้ XZ และรัศมีบวก Y หากคุณไม่เพิ่ม Y คุณจะได้รูปทรงกระบอกแบน จากนั้นแปลงกลับเป็นพิกัดคาร์ทีเซียนเพื่อวาดในเกม


3
อีกสิ่งหนึ่งที่พูดถึงมิติ Y ของโลกใน Animal Crossing นั้นใหญ่กว่าเส้นรอบวงของกระบอกสูบมาก (เพียงแค่มองด้วยตาเพราะเส้นขอบฟ้าอยู่ใกล้มาก) ดังนั้นแผนที่โลกบางส่วนถูกครอบตัดเฉพาะพื้นที่ที่อยู่ใกล้กับตัวละครมากที่สุดเท่านั้นและพื้นที่ที่ถูกครอบตัดนั้นจะถูกพันรอบทั้งกระบอก มันคล้ายกับการครอบตัดแผนที่แบบสองมิติตามส่วนที่มองเห็นได้เท่านั้น
ChrisC

จุดที่ดีเยี่ยม ฉันคิดว่าสามารถใช้เพื่อทำให้รอยเท้าหน่วยความจำเล็กลงได้โดยการโหลด / ขนถ่ายโลกตามต้องการ
MichaelHouse

5

คุณต้องการที่จะออกจากโลกภาพถ่ายไปยังโลกทรงกระบอก

การหมุนรอบแกน x (ในพิกัดที่เป็นเนื้อเดียวกัน) มีลักษณะดังนี้:

     | 1   0   0   0 |
Rx = | 0  ca  -sa  0 |
     | 0  sa   ca  0 |
     | 0   0    0  1 |

ที่ไหน:

ca = cos(angle) and sa = sin(angle)

ในการคำนวณมุมมองภาพ pi / 2 ยกเลิกและคุณเหลือ:

angle = offset_from_character.z - radius

ดูที่ภาพด้วย มุมของจุดที่ฉายขึ้นอยู่กับระยะทางแนวนอนจากตัวละครระยะทางจากทรงกลมขึ้นอยู่กับแนวตั้ง

new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)

ให้แน่ใจว่าได้กำจัดสิ่งที่อยู่เหนือขอบฟ้าไม่เช่นนั้นโลกทั้งโลกจะถูกล้อมรอบ

ข้อจำกัดความรับผิดชอบ: ฉันไม่ได้ทดสอบสิ่งนี้และฉันไม่มีผู้เชี่ยวชาญทางคณิตศาสตร์ แต่คำตอบคืออะไรเช่นนี้ มีคนโปรดแก้ไขฉันหากฉันผิด

โลกทรงกลม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.