ฉันจะสร้างภูมิประเทศขนาดใหญ่ในความสามัคคีได้อย่างไร


19

ฉันจะทำให้มากภูมิประเทศอย่างมากในความสามัคคี? ดูเหมือนว่าฉันสามารถตั้งค่าความกว้างและความยาวเป็นค่าขนาดใหญ่ได้ แต่ความละเอียด Heightmap จะสูงถึง 4097 และ Resolution ละเอียดจะสูงถึง 4048 เท่านั้น

ความคิดใด ๆ


ฉันขอโทษที่เป็น buzzkill: sol.gfxile.net/mmorpg.html
Nailer

คำตอบ:


21

แบ่งภูมิประเทศออกเป็น "ชิ้นส่วน" สี่เหลี่ยมโหลดสิ่งที่คุณสนใจ (ส่วนใหญ่: พื้นที่ใกล้กับกล้องที่ใช้งานอยู่ในปัจจุบัน) ในอัปเดต () และ - ถ้าคุณถูกมัดไว้กับที่ว่าง .

ใช้โมเดลโพลีต่ำที่คำนวณล่วงหน้าสำหรับ LoD ภูมิประเทศที่อยู่ห่างไกลเว้นแต่คุณจะไม่รังเกียจที่จะมีมุมมองที่ต่ำ นอกจากนี้หากคุณต้องการแผนผังความสูงของภูมิประเทศของสิ่งที่อยู่ห่างไกล (เช่นการเคลื่อนไหว NPC หรือการจำลองอื่น ๆ ) ให้สร้างตัวแปรความละเอียดต่ำหรือตัวแปรความละเอียดของภูมิประเทศของคุณเพื่อเก็บไว้ในหน่วยความจำ อย่าใช้ข้อมูลภูมิประเทศแบบเต็มสำหรับมัน สิ่งนี้สามารถทำได้โดยอัตโนมัติเมื่อโหลดเกม แต่โดยทั่วไปแล้วมันเป็นความคิดที่ดีกว่าในการสร้างเครื่องมือที่สร้างข้อมูลที่สร้างไว้ล่วงหน้าระหว่างการสร้างหรือแพ็คเกจ

ในที่สุด: เพื่อหลีกเลี่ยงปัญหาความแม่นยำของจุดลอยตัวคุณจะต้องจัดตำแหน่งฉากใหม่ทุกครั้งที่กล้องหลักของคุณเคลื่อนที่ห่างจาก (0.0f, 0.0f, 0.0f)

คำถามที่เกี่ยวข้องอาจเป็นไปได้ในคำตอบ Unity http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html


ขอขอบคุณ! คำตอบที่ดี แค่คำถามเดียวเมื่อฉันตั้งเพื่อนบ้านของภูมิประเทศจะเกิดอะไรขึ้นถ้าภูมิประเทศนั้นไม่สูงเท่ากับขอบ?
Daniel Pendergast

1
@ ด่าน: คุณจะได้รับรูในแนวนอน มีวิธีการจัดการที่แตกต่างกันไปตามแนวของ "ให้แน่ใจว่าภูมิทัศน์มีความสูงเท่ากันที่ขอบ", "เพิ่มกระโปรงที่วิ่งในแนวตั้งจากขอบลงไปจนถึงความสูงที่จะปกปิดรู" และ "เพิ่มแถบสามเหลี่ยมที่สร้างขึ้น เพื่อเย็บรูเข้าด้วยกัน " รูปแบบใดที่คุณใช้จะขึ้นอยู่กับคุณ (และส่วนหนึ่ง) อันที่สองกับกระโปรงเป็นสิ่งที่ฉันเห็นบ่อยที่สุด
Martin Sojka

1
หรืออย่างที่ฉันบอกว่าคุณต้องการใช้สคริปต์เพื่อตรวจสอบภูมิประเทศ :-)
Valmond

ใครบ้างมีสคริปต์บ้าง?
Daniel Pendergast

@Dan: มีสคริปต์บางส่วนที่ลิงก์ Unity Answers ในคำตอบ นอกจากนั้นฉันไม่สามารถช่วยคุณใช้รหัสสำหรับ Unity ได้ในขณะนี้การเขียนโปรแกรมเกม (ระดับงานอดิเรก) ทั้งหมดของฉันทำด้วย Ogre3D ในฐานะเครื่องมือแสดงผล
Martin Sojka

3

คุณจะต้องแบ่งภูมิประเทศเป็นชิ้น ๆ เช่น ภูมิประเทศขนาดเล็กหลายแห่ง คุณจะต้อง 'ตะเข็บ' สิ่งเหล่านี้ทำให้แต่ละคนเจ็บปวด (ด้วยสคริปต์) ดังนั้นจะไม่มี 'รู' ระหว่างพวกเขา แต่อย่างอื่นคุณก็สามารถเริ่มทำมันได้ทันที

คุณอาจต้องการทราบด้วยว่าตั้งแต่ Unity3D ~ 3.0 คุณไม่สามารถย้ายรายการ (อ่านภูมิประเทศและรายการ) ไกลเกินไป (เช่น +/- 100000 ขั้นตอน IIRC) ดังนั้นสิ่งนี้จะมีผลต่อขนาดสูงสุดของโลกของคุณ

ฉันกำลังใช้สิ่งนี้ในเกม RPG ออนไลน์ของฉันอยู่แล้ว (ยกเว้นว่าฉันจะใช้ Unity3D สำหรับการออกแบบระดับเท่านั้นไม่ใช่สำหรับเกมจริง)

เพียงเพราะฉันอยากรู้อยากเห็นคุณต้องการแบ่งปันข้อมูลเกี่ยวกับเกมของคุณ (เช่นความก้าวหน้าประเภทกราฟิกรูปแบบ ฯลฯ ) หรือไม่


2

เราใช้ภูมิประเทศขนาดใหญ่ใน Unity5 โดยการประมวลผลข้อมูล SRTM สำหรับโลกทั้งใบเป็นแผนที่ความสูง TerrainDataวัตถุที่มีระดับรายละเอียดแตกต่างกัน [1] มีสองสิ่งที่ควรพิจารณา:

  1. ขอบของแผนที่ความสูงต้องเหลื่อมซ้อนกันอย่างน้อยหนึ่งตัวอย่างและคุณต้องวางตำแหน่งภูมิประเทศของคุณตามลำดับ Terrain.SetNeighborsจะไม่เชื่อมโยงเมชบัญชีเดียวสำหรับระดับรายละเอียดที่แตกต่างกันโดย Unity

  2. คุณจำเป็นต้องมีตัวอย่างความสูง 2 ^ n + 1 ต่อTerrainDataวัตถุไม่เช่นนั้น Unity จะกำหนดความสูง 0 ให้กับส่วนที่ไม่ได้ตั้งค่า

  3. หากคุณมีน้อยกว่า 2GB TerrainDataคุณสามารถหลีกเลี่ยงการใช้มันเป็นสินทรัพย์ในโฟลเดอร์ทรัพยากรและResource.Loadใช้งานได้จริง หากคุณมีมากกว่า 2GB วิธีการนี้จะใช้งานไม่ได้อีกต่อไปเนื่องจากไม่มีทรัพยากรที่มี Unity builds มากกว่า 2GB ในกรณีนี้คุณจะต้องสร้าง AssetBundles และโหลดแบบอะซิงโครนัสกับWWWวัตถุ สิ่งนี้มีผลข้างเคียงที่ไม่ได้รับจากการโทรShader.Parseหาแต่ละคนด้วยค่าใช้จ่ายประมาณ 500ms ฉันรายงานสิ่งนี้ในฟอรัม [2] และยังคงรอคำตอบอยู่ ฉันจะส่งรายงานข้อผิดพลาดในที่สุด

  4. อย่าคิดว่าจะใช้AssetDatabase.LoadAssetAtPathมันมีเฉพาะในเครื่องมือแก้ไขเท่านั้นและไม่ได้อยู่ใน Unity builds

[1] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-containing-no-shader 0.358235 /


0

มีวิธีแก้ไขปัญหาของบุคคลที่สาม

รหัสนี้สามารถสร้างภูมิประเทศที่มีความกว้าง 99,999 เมตรภูเขาเป็นสูตรเสียงใด ๆ แต่คุณสามารถผสม 100 สูตรเสียงเป็นหนึ่งแผนที่ถ้าคุณต้องการ ตัวอย่างเช่นในภูมิประเทศนี้จำนวนสามเหลี่ยมทั้งหมดที่มีในแผนที่อยู่ระหว่าง 66 ล้านความละเอียดต่ำและความละเอียดปานกลาง 200 ล้าน นี่คือแผนที่สามเหลี่ยม 66 ล้านที่ซึ่งสามเหลี่ยม 0.7 ล้านได้รับการปรับปรุงรอบ ๆ กล้อง ภูมิประเทศยักษ์ Unityplayer, WASD และ Space


มีซอร์สโค้ดสำหรับสิ่งนั้นหรือไม่? สิ่งที่ฉันเห็นคือเกมเสริมความเป็นเอกภาพ
AttackingHobo

ฉันมีซอร์สโค้ดฉันใช้เวลาสักครู่ในการเขียน ฉันเป็นมด d0t สจ๊วตที่ yahoo d0t com
com.prehensible

0

ฉันขอแนะนำให้โหลดภูมิประเทศของคุณเป็นชิ้น ๆ โดยใช้พื้นที่ขนาดเล็กและสคริปต์ของคุณอาจตรวจสอบว่าคุณอยู่ใกล้กับภูมิประเทศของคุณหรือไม่โดยใช้ transform.position - terrain.transform.position ฉันเขียนโพสต์บล็อกเกี่ยวกับวิธีเพิ่มประสิทธิภาพเกมโดยรวมของคุณและฉันได้พูดคุยเกี่ยวกับการโหลดแบบก้อน หวังว่านี่จะช่วยได้


โปรดทราบว่าคำแนะนำนี้มีอยู่แล้วในคำตอบที่ยอมรับจาก Martin Sojka เมื่อ 6 ปีที่แล้ว หากคุณต้องการแชร์ลิงก์ที่เกี่ยวข้องความคิดเห็นเกี่ยวกับคำตอบนั้นอาจเหมาะสมกว่า
DMGregory

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