LOD (ระดับรายละเอียด) หมายถึงการจัดการวัตถุในระดับการแสดงผลที่แตกต่างกันซึ่งอาจแบ่งออกเป็นสองส่วน อย่างไรก็ตามคุณอาจใช้หนึ่งในนั้นและจะเพียงพอสำหรับกรณีส่วนใหญ่
แสดง / ซ่อนเลเยอร์ (กลุ่มวัตถุประเภทเดียวกัน) ขึ้นอยู่กับขนาด (ระดับการแสดงผล)
วิธีการเชิงพีชคณิตของ Geomery เรียกว่า Generalization (ซึ่งเป็นอัลกอริทึมในการลดความซับซ้อนของรูปหลายเหลี่ยม) ดูภาพต่อไปนี้
วิธีที่มีชื่อเสียงและมีประสิทธิภาพที่สุดในการสรุป (ลดความซับซ้อน) ตาข่ายรูปหลายเหลี่ยมเป็นที่รู้จักกันในชื่อทฤษฎีรูปทรงหลายเหลี่ยม Descartes-Euler (สมการ 4.5 ขออภัยถ้าฉันหมายถึงหนังสือที่ดีที่สุดที่ฉันสามารถทำได้) ตัวอย่างเช่นโมดูล PostGIS ใน PostgreSQL มันเพียงแค่ลบด้านที่เล็กกว่าของรูปหลายเหลี่ยมและสร้างส่วนที่โค้งมนมาก (ภาพด้านบน)
ในการติดตั้ง LOD ในเกมคุณต้องบันทึกและจัดการขนาดของแผนที่ (ฉาก) ระหว่างการซูมเข้า / ออก สเกลเปลี่ยนจากศูนย์เป็นอินฟินิตี้และคุณต้องแบ่งส่วนนี้ออกเป็นช่วงจำนวนหนึ่งเช่นบางสิ่งเช่นนี้:
- 1 / ศูนย์ = อนันต์ถึง 1/50
- 1/50 ถึง 1/100
- 1/100 ถึง 1/1000
- 1/1000 ถึง 1 / infinity = 0
จากนั้นคุณต้องกำหนดประเภทของวัตถุ (เลเยอร์) ที่สามารถมองเห็นหรือมองไม่เห็นในแต่ละช่วงดังกล่าว ตัวอย่างเช่นวัตถุขนาดเล็กเช่นวาล์วจ่ายน้ำมันไม่ควรมองเห็นเมื่อผู้ใช้อยู่ในช่วงที่สี่เพราะจะมีขนาดเล็กมากในระดับนั้นและไม่สามารถจำแนกได้ดังนั้นจึงไม่สำคัญว่าคุณจะข้ามไปที่ จอภาพ
ดังนั้นเมื่อผู้ใช้ใช้การซูมเข้าและซูมออกเพื่อเปลี่ยนการขยายเขาจะเลื่อนผ่านขีด จำกัด ด้านบนจากช่วงหนึ่งไปยังช่วงอื่น ๆ และเกมของคุณใช้ระดับการแสดงผลเหล่านี้เพื่อจัดการระดับรายละเอียดโดยการแสดงหรือซ่อนวัตถุในฉาก สิ่งนี้ทำให้เกิดการแก้ปัญหาแบบแยกส่วนที่วัตถุจะค่อยๆเลือนหายไปในระหว่างการซูมออกของคุณอย่างไรก็ตามเมื่อกำหนดระดับการแสดงผลและช่วงการขยายอย่างระมัดระวังผู้ใช้จะไม่รู้สึกอะไรเลย
กลุ่มช่วง 4 ช่วงข้างต้นเป็นเพียงตัวอย่างและคุณจำเป็นต้องค้นหาสิ่งที่ดีที่สุดสำหรับกรณีของคุณด้วยการลองผิดลองถูก ไม่มีกฎสำหรับสิ่งนั้น
บางครั้งเกมใช้วิธี LOD ของตัวเอง Subway Surfer เป็นเกมโชว์เล็ก ๆ ที่ไม่มีสี่เหลี่ยมพื้นผิวเพื่อแสดงสิ่งปลูกสร้างที่อยู่ไกลออกไป คุณไม่ได้พูดถึงระบบฉายภาพของคุณซึ่งสำคัญมากและไม่ได้พูดถึงเกมที่คุณกำลังสร้าง
อย่างไรก็ตามสมมติว่าคุณกำลังใช้งานเกมสามมิติเต็มรูปแบบด้วย openGl และคุณต้องการกรองตาข่ายบางส่วนก่อนที่จะถ่ายโอนไปยังฮาร์ดแวร์กราฟิกฉันแน่ใจว่าสิ่งนี้จะช่วยให้คุณลดการดำเนินงานที่มีผลผูกพัน / ไม่ผูกพันกับวัตถุบัฟเฟอร์ จัดการกับ OpenGl
ใช้การจัดการเลเยอร์เท่านั้นหรือใช้การวางนัยทั่วไปของออยเลอร์
ในกรณีส่วนใหญ่ไม่จำเป็นต้องใช้อัลกอริทึมการวางนัยทั่วไปและการกรองวัตถุก็ใช้งานได้และทำให้คุณได้รับประสิทธิภาพ (อัตราการรีเฟรช) ที่คุณต้องการอย่างไรก็ตามมันขึ้นอยู่กับแต่ละกรณี แม้ว่ามันจะเป็นอัลกอริธึมง่าย ๆ ที่เพียงแค่ลบส่วนเล็ก ๆ ของรูปหลายเหลี่ยมออก แต่คุณต้องกำหนดขีด จำกัด ซึ่งเป็นผลคูณของขนาดและจำนวนคงที่เพื่อให้ด้านที่ใหญ่กว่าถูกกรองในมุมมองที่ไกลออกไป
ลืมการจัดการเลเยอร์และใช้อัลกอริทึมการวางนัยทั่วไปของ Eulers เท่านั้นให้วิธีการที่เป็นระเบียบและต่อเนื่องซึ่งคุณเพียงตรวจสอบแต่ละด้านและเส้นเทียบกับขีด จำกัด ที่กำหนดไว้ล่วงหน้าและแสดงเฉพาะในกรณีที่มีขนาดใหญ่พอที่จะแบ่งแยกบนหน้าจอ
PS: กำลังขยายเป็นจำนวนลอยตัว> 0 ซึ่งเท่ากับ 1 / มาตราส่วนและมาตราส่วนมักจะ <1 เนื่องจากมาตราส่วน 1: 1 หมายความว่าคุณมีความยาวตามจริงในเกมของคุณ