ฉันจะทำให้มากภูมิประเทศอย่างมากในความสามัคคี? ดูเหมือนว่าฉันสามารถตั้งค่าความกว้างและความยาวเป็นค่าขนาดใหญ่ได้ แต่ความละเอียด Heightmap จะสูงถึง 4097 และ Resolution ละเอียดจะสูงถึง 4048 เท่านั้น
ความคิดใด ๆ
ฉันจะทำให้มากภูมิประเทศอย่างมากในความสามัคคี? ดูเหมือนว่าฉันสามารถตั้งค่าความกว้างและความยาวเป็นค่าขนาดใหญ่ได้ แต่ความละเอียด Heightmap จะสูงถึง 4097 และ Resolution ละเอียดจะสูงถึง 4048 เท่านั้น
ความคิดใด ๆ
คำตอบ:
แบ่งภูมิประเทศออกเป็น "ชิ้นส่วน" สี่เหลี่ยมโหลดสิ่งที่คุณสนใจ (ส่วนใหญ่: พื้นที่ใกล้กับกล้องที่ใช้งานอยู่ในปัจจุบัน) ในอัปเดต () และ - ถ้าคุณถูกมัดไว้กับที่ว่าง .
ใช้โมเดลโพลีต่ำที่คำนวณล่วงหน้าสำหรับ LoD ภูมิประเทศที่อยู่ห่างไกลเว้นแต่คุณจะไม่รังเกียจที่จะมีมุมมองที่ต่ำ นอกจากนี้หากคุณต้องการแผนผังความสูงของภูมิประเทศของสิ่งที่อยู่ห่างไกล (เช่นการเคลื่อนไหว NPC หรือการจำลองอื่น ๆ ) ให้สร้างตัวแปรความละเอียดต่ำหรือตัวแปรความละเอียดของภูมิประเทศของคุณเพื่อเก็บไว้ในหน่วยความจำ อย่าใช้ข้อมูลภูมิประเทศแบบเต็มสำหรับมัน สิ่งนี้สามารถทำได้โดยอัตโนมัติเมื่อโหลดเกม แต่โดยทั่วไปแล้วมันเป็นความคิดที่ดีกว่าในการสร้างเครื่องมือที่สร้างข้อมูลที่สร้างไว้ล่วงหน้าระหว่างการสร้างหรือแพ็คเกจ
ในที่สุด: เพื่อหลีกเลี่ยงปัญหาความแม่นยำของจุดลอยตัวคุณจะต้องจัดตำแหน่งฉากใหม่ทุกครั้งที่กล้องหลักของคุณเคลื่อนที่ห่างจาก (0.0f, 0.0f, 0.0f)
คำถามที่เกี่ยวข้องอาจเป็นไปได้ในคำตอบ Unity http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html
คุณจะต้องแบ่งภูมิประเทศเป็นชิ้น ๆ เช่น ภูมิประเทศขนาดเล็กหลายแห่ง คุณจะต้อง 'ตะเข็บ' สิ่งเหล่านี้ทำให้แต่ละคนเจ็บปวด (ด้วยสคริปต์) ดังนั้นจะไม่มี 'รู' ระหว่างพวกเขา แต่อย่างอื่นคุณก็สามารถเริ่มทำมันได้ทันที
คุณอาจต้องการทราบด้วยว่าตั้งแต่ Unity3D ~ 3.0 คุณไม่สามารถย้ายรายการ (อ่านภูมิประเทศและรายการ) ไกลเกินไป (เช่น +/- 100000 ขั้นตอน IIRC) ดังนั้นสิ่งนี้จะมีผลต่อขนาดสูงสุดของโลกของคุณ
ฉันกำลังใช้สิ่งนี้ในเกม RPG ออนไลน์ของฉันอยู่แล้ว (ยกเว้นว่าฉันจะใช้ Unity3D สำหรับการออกแบบระดับเท่านั้นไม่ใช่สำหรับเกมจริง)
เพียงเพราะฉันอยากรู้อยากเห็นคุณต้องการแบ่งปันข้อมูลเกี่ยวกับเกมของคุณ (เช่นความก้าวหน้าประเภทกราฟิกรูปแบบ ฯลฯ ) หรือไม่
เราใช้ภูมิประเทศขนาดใหญ่ใน Unity5 โดยการประมวลผลข้อมูล SRTM สำหรับโลกทั้งใบเป็นแผนที่ความสูง TerrainData
วัตถุที่มีระดับรายละเอียดแตกต่างกัน [1] มีสองสิ่งที่ควรพิจารณา:
ขอบของแผนที่ความสูงต้องเหลื่อมซ้อนกันอย่างน้อยหนึ่งตัวอย่างและคุณต้องวางตำแหน่งภูมิประเทศของคุณตามลำดับ Terrain.SetNeighbors
จะไม่เชื่อมโยงเมชบัญชีเดียวสำหรับระดับรายละเอียดที่แตกต่างกันโดย Unity
คุณจำเป็นต้องมีตัวอย่างความสูง 2 ^ n + 1 ต่อTerrainData
วัตถุไม่เช่นนั้น Unity จะกำหนดความสูง 0 ให้กับส่วนที่ไม่ได้ตั้งค่า
หากคุณมีน้อยกว่า 2GB TerrainData
คุณสามารถหลีกเลี่ยงการใช้มันเป็นสินทรัพย์ในโฟลเดอร์ทรัพยากรและResource.Load
ใช้งานได้จริง หากคุณมีมากกว่า 2GB วิธีการนี้จะใช้งานไม่ได้อีกต่อไปเนื่องจากไม่มีทรัพยากรที่มี Unity builds มากกว่า 2GB ในกรณีนี้คุณจะต้องสร้าง AssetBundles และโหลดแบบอะซิงโครนัสกับWWW
วัตถุ สิ่งนี้มีผลข้างเคียงที่ไม่ได้รับจากการโทรShader.Parse
หาแต่ละคนด้วยค่าใช้จ่ายประมาณ 500ms ฉันรายงานสิ่งนี้ในฟอรัม [2] และยังคงรอคำตอบอยู่ ฉันจะส่งรายงานข้อผิดพลาดในที่สุด
อย่าคิดว่าจะใช้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 /
มีวิธีแก้ไขปัญหาของบุคคลที่สาม
รหัสนี้สามารถสร้างภูมิประเทศที่มีความกว้าง 99,999 เมตรภูเขาเป็นสูตรเสียงใด ๆ แต่คุณสามารถผสม 100 สูตรเสียงเป็นหนึ่งแผนที่ถ้าคุณต้องการ ตัวอย่างเช่นในภูมิประเทศนี้จำนวนสามเหลี่ยมทั้งหมดที่มีในแผนที่อยู่ระหว่าง 66 ล้านความละเอียดต่ำและความละเอียดปานกลาง 200 ล้าน นี่คือแผนที่สามเหลี่ยม 66 ล้านที่ซึ่งสามเหลี่ยม 0.7 ล้านได้รับการปรับปรุงรอบ ๆ กล้อง ภูมิประเทศยักษ์ Unityplayer, WASD และ Space
ฉันขอแนะนำให้โหลดภูมิประเทศของคุณเป็นชิ้น ๆ โดยใช้พื้นที่ขนาดเล็กและสคริปต์ของคุณอาจตรวจสอบว่าคุณอยู่ใกล้กับภูมิประเทศของคุณหรือไม่โดยใช้ transform.position - terrain.transform.position ฉันเขียนโพสต์บล็อกเกี่ยวกับวิธีเพิ่มประสิทธิภาพเกมโดยรวมของคุณและฉันได้พูดคุยเกี่ยวกับการโหลดแบบก้อน หวังว่านี่จะช่วยได้