เข้าใจอย่างลึกซึ้ง“ ระดับรายละเอียดที่หนาเป็นชิ้น”


17

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

1 : ฉันไม่สามารถเข้าใจได้ว่าจุดใดที่ท่อส่งของChunked LODที่ตาข่ายแบ่งออกเป็นชิ้น ๆ เป็นสิ่งนี้ในระหว่างการสร้างตาข่ายครั้งแรกหรือมีอัลกอริทึมแยกซึ่งทำสิ่งนี้

2 : ฉันเข้าใจว่ามีการใช้โครงสร้างข้อมูล Quadtree เพื่อเก็บข้อมูลChunked LODฉันคิดว่าฉันพลาดจุดนี้ไปเล็กน้อย แต่ Quadtree เก็บข้อมูลจุดสุดยอดและสามเหลี่ยมสำหรับแต่ละแผนกย่อยหรือไม่?

3a : ระยะห่างของกล้องคำนวณโดยทั่วไปอย่างไร เมื่ออ่านเกี่ยวกับควอดทรีของกล่องจัดชิดขอบแกนเป็นที่กล่าวถึงมาก ในกรณีนี้แต่ละอันจะมีช่องสำหรับชนกันเพื่อตรวจจับกล้องหรือเครื่องเล่นอยู่ใกล้ ๆ หรือไม่? หรือมีวิธีที่ดีกว่าในการทำเช่นนี้? (raycast อาจจะ?)

3b : กลุ่มก้อนคำนวณระยะทางของกล้องด้วยตนเองหรือไม่?

4 : แต่ละก้อนมี "การแก้ไข" ที่เหมือนกันหรือไม่ ตัวอย่างเช่นที่ระดับบนสุดตาข่ายจะเป็น 32x32 แต่ละโหนดย่อยจะเป็น 32x32 ตัวอย่างด้านล่าง:

ตัวอย่างของก้อน LOD


ถ้าใครรู้วิธีการ LOD ที่ดีกว่าสำหรับดาวเคราะห์ในกระบวนการที่น่าสนใจ
Caius Eugene

ฉันคิดว่าคุณได้ดู SIGGRAPH ต้นฉบับของแทตเชอร์อูลริชและโปรแกรมที่เกี่ยวข้องแล้วหรือยัง? tulrich.com/geekstuff/chunklod.html
drxzcl

ฉันมีมันมีข้อมูลมากจนถึงจุดหนึ่ง แต่มันไม่ได้ลงในรายละเอียดประเภทหรือวิธีการนำไปใช้ ขอบคุณ
Caius Eugene

1
มีตัวเลือกมากมายสำหรับ LOD ดาวเคราะห์ที่นี่; vterrain.org/LOD/spherical.html
OriginalDaemon

คำตอบ:


12

1: ฉันไม่สามารถเข้าใจได้ว่าจุดใดที่ท่อส่งของ Chunked LOD ที่ตาข่ายแบ่งออกเป็นชิ้น ๆ เป็นสิ่งนี้ในระหว่างการสร้างตาข่ายครั้งแรกหรือมีอัลกอริทึมแยกซึ่งทำสิ่งนี้

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

2: ฉันเข้าใจว่ามีการใช้โครงสร้างข้อมูล Quadtree เพื่อเก็บข้อมูล Chunked LOD ฉันคิดว่าฉันพลาดจุดนี้ไปเล็กน้อย แต่ Quadtree เก็บข้อมูลจุดสุดยอดและสามเหลี่ยมสำหรับแต่ละแผนกย่อยหรือไม่?

ไม่จำเป็น. ต้นไม้เพียงเก็บข้อมูลเกี่ยวกับรูปทรงเรขาคณิตและวิธีการแสดงผล นี่อาจหมายถึงการมีรายการจุดสุดยอด / ใบหน้าที่โหนดต้นไม้ทุกโหนด ในวันนี้และอายุที่สมจริงยิ่งขึ้นคุณจะเก็บที่จับของตาข่าย / อินสแตนซ์ในหน่วยความจำ GPU

3a: ระยะห่างของกล้องคำนวณโดยทั่วไปอย่างไร เมื่ออ่านเกี่ยวกับควอดทรีของกล่องจัดชิดขอบแกนเป็นที่กล่าวถึงมาก ในกรณีนี้แต่ละอันจะมีช่องสำหรับชนกันเพื่อตรวจจับกล้องหรือเครื่องเล่นอยู่ใกล้ ๆ หรือไม่? หรือมีวิธีที่ดีกว่าในการทำเช่นนี้? (raycast อาจจะ?)

ตัวเลือกที่ถูกและง่ายมากคือการใช้ระยะทางไปยังจุดกึ่งกลางของก้อนแล้วแก้ไขให้ถูกต้อง คุณรู้ว่าระยะทางนี้เป็นการประเมินค่าต่ำไปเสมอ: ถ้าจุดศูนย์กลางอยู่ที่ระยะทางZนั่นหมายความว่าครึ่งอันนั้นอยู่ใกล้กว่านั้น สิ่งที่เราไม่รู้ก็คือการวางแนว ถ้าเรากำลังดูก้อนของความกว้างขอบบนบิตที่ใกล้เคียงที่สุดของก้อนจะอยู่ที่ระยะทางw แต่ถ้าเรากำลังดูก้อนมุมแรกบิตที่ใกล้เคียงที่สุดจะอยู่ที่ระยะทางZ-w Z-sqrt(2)*wหากคุณสามารถอยู่กับความไม่แน่นอนนี้ได้ (เกือบจะทำได้) คุณก็ทำเสร็จแล้ว โปรดทราบว่าคุณสามารถแก้ไขมุมการมองได้โดยใช้ตรีโกณมิติพื้นฐาน

ฉันชอบที่จะคำนวณระยะทางต่ำสุดที่แน่นอนจากกล้องไปยังก้อนเพื่อลดสิ่งประดิษฐ์ ในทางปฏิบัตินี่หมายถึงการทำแบบทดสอบระยะห่างจุด มันเป็นงานอีกเล็กน้อยจากนั้นคำนวณระยะทางไปยังจุดศูนย์กลาง แต่มันไม่เหมือนกับว่าคุณจะทำ zillion ของกรอบเหล่านี้ทุกเฟรม

หากคุณสามารถใช้ประโยชน์จากเอนจิ้นฟิสิกส์ของคุณให้ทำเช่นนั้นได้ แต่คุณต้องการคิดเกี่ยวกับมันในแง่ของ "การสืบค้นระยะทาง" มากกว่า "การชน"

3b: กลุ่มก้อนคำนวณระยะทางของกล้องด้วยตนเองหรือไม่?

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

4: ก้อนแต่ละอันมี "ความละเอียด" ที่เหมือนกันหรือไม่ ตัวอย่างเช่นที่ระดับบนสุดตาข่ายจะเป็น 32x32 แต่ละโหนดย่อยจะเป็น 32x32

พวกเขาไม่จำเป็นต้องทำ แต่จะสะดวกถ้าชิ้นส่วนทั้งหมดใช้พื้นที่เท่ากัน จากนั้นคุณสามารถจัดการหน่วยความจำ (GPU) ในหน่วยของ "chunks" นอกจากนี้ยังง่ายต่อการลบ / ซ่อนตะเข็บระหว่างสองชิ้นที่มีขนาดแตกต่างกันหากความละเอียดหนึ่งเป็นผลคูณของอีกอันหนึ่งเพราะพวกเขาแบ่งปันจุดยอดมากขึ้น (เช่น: 32x32 และ 64x64 นั้นง่ายต่อการจัดการกว่า 32x32 และ 57x57) (ขอบคุณ Guiber!) หากคุณมีเหตุผลที่ดีในการปรับขนาดเรขาคณิตของชิ้นส่วนให้ดี


2
นอกจากนี้ยังง่ายต่อการลบ / ซ่อนตะเข็บระหว่างสองชิ้นที่มีขนาดแตกต่างกันหากความละเอียดหนึ่งเป็นผลคูณของอีกอันหนึ่งเพราะพวกเขาแบ่งปันจุดยอดมากขึ้น (เช่น: 32x32 และ 64x64 นั้นง่ายต่อการจัดการกว่า 32x32 และ 57x57)
Alayric

คำตอบที่ยอดเยี่ยมมันล้างสิ่งต่างๆมากมาย โดยเฉพาะอย่างยิ่งการใช้งานจำนวนมากนั้นลดลงเมื่อพิจารณาถึงความสามารถของเครื่องยนต์ ด้วย3aฉันยังคงไม่แน่ใจว่าเมื่อไรที่จะเริ่มการสืบค้นระยะทางการใช้งานสองอย่างที่ฉันคิดว่าเป็น CPU เสียงหนักฉันจะทำการวิจัยเพิ่มเติมเกี่ยวกับเรื่องนี้ ขอบคุณ
Caius Eugene

1
@CaiusEugene: ฉันคิดว่าคุณคิดถึงการกำหนดระยะทางมากเกินไป ฉันได้เพิ่มอัลกอริธึมพื้นฐานที่ราคาถูกมาก ๆ ให้กับการตอบกลับ ณ จุด 3a ที่ควรเริ่มต้น
drxzcl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.