มีวิธีการเก็บข้อมูลสำหรับเกมที่มีบล็อกอย่าง Minecraft หลายวิธี
วิธีที่ฉันเชื่อว่า Minecraft เป็นสิ่งที่ทำให้โลกแตกใน 16x16x256 ชิ้น ชิ้นรอบผู้เล่นจะถูกโหลดเข้าสู่หน่วยความจำเมื่อผู้เล่นเริ่มเกมแล้วด้ายพื้นหลังจะโหลดมากขึ้นเมื่อคุณเดินไปรอบ ๆ นี่คือวิดีโอที่แสดงให้เห็นว่ามัน: http://www.youtube.com/watch?v=oR_ZdJH9eho
อีกวิธีที่จะทำคือการแบ่งโลกออกเป็นออคทรี ไมเคิล Goodfellow เขียนบล็อกเกี่ยวกับการใช้ลูกบาศก์โลกที่มีโครงสร้างข้อมูลนี้: http://www.sea-of-memes.com/LetsCode1/LetsCode1.html Octree เป็นสิ่งที่ดีเพราะมันช่วยให้คุณได้รับแรงอัด แต่มันอาจจะยากกว่าถ้าใช้กับ Array
เกี่ยวกับการรักษา "สิ่งที่ต้องการในหน่วยความจำเท่านั้น" นี่เป็นเรื่องยากขึ้นเล็กน้อยเนื่องจากคุณต้องถามสิ่งที่ "จำเป็น" หากคุณมี NPC ที่อาศัยอยู่ในอีกส่วนหนึ่งของโลกด้วย AI ที่มีปฏิสัมพันธ์กับสภาพแวดล้อมคุณต้อง "โลก" จำนวนมากต้องอยู่ในความทรงจำ ข้อมูลโลก Voxel สามารถมีขนาดใหญ่มากได้อย่างรวดเร็วดังนั้นจึงเป็นการดีที่สุดที่จะพยายามรักษาจำนวนหน่วยความจำให้น้อยที่สุดเท่าที่จะทำได้ (IE มี NPC เพียงใกล้กับเครื่องเล่น)
เอ็นจิ้นกราฟิกจะ "ต้องการ" ทุกบล็อคที่ไม่ล้อมรอบอย่างสมบูรณ์ด้วยบล็อคที่ไม่โปร่งใสอื่น ๆ วิธีปกติในการเรนเดอร์โลกคือการสร้างตาข่ายเดียวที่มีจุดยอดสำหรับทุกบล็อกที่มองเห็นได้ วิธีนี้เร็วกว่ามากในการวาดเนื่องจากคุณใช้วิธีเรียก 1 ครั้งสำหรับบล็อก 65,536 บล็อก (ใน Minecraft ขนาดชิ้น) เนื่องจากเอ็นจิ้นกราฟิกจะต้องสร้างตาข่ายนี้โดยทั่วไปจำเป็นต้องรู้ว่าลูกบาศก์ทั้งหมดเป็นก้อน โปรดทราบว่านี่คือเหตุผลว่าทำไมเมื่อคุณมองทะลุพื้นใน Minecraft โลกจำนวนมากมองไม่เห็น นี่เป็นเพราะทุกบล็อคที่ล้อมรอบทั้งหกด้านถูกข้ามไป ฉันเชื่อว่า Minecraft ยังลดจำนวนจุดยอดโดยการรวมด้านแนวนอนของพื้นผิวชนิดเดียวกันลงในกล่องเดียวโดยมีพื้นผิวซ้ำกัน
คำแนะนำของฉันจะไปกับชิ้น 16x16x256 เก็บไว้ใน Array เพราะคุณจะต้องใช้การวนซ้ำและแก้ไขอย่างรวดเร็วเนื่องจากการสร้าง mesh และตรรกะของเกม (การตรวจจับการชน, การเพิ่ม / ลบบล็อก, ฯลฯ ) จากนั้นโหลดชิ้นส่วนจำนวนมากในวงกลมรอบผู้เล่นเท่าที่จะทำได้ ปรับจำนวนชิ้นขึ้นหรือลงสำหรับคอมพิวเตอร์ที่ดีขึ้นหรือแย่ลง
การโหลดของ Chunks จะเป็นที่นิยมอย่างมากในการแสดงดังนั้นใส่ไว้ในเธรดที่ทำงานอยู่ตลอดเวลา สร้างมันขึ้นมาเพื่อให้คุณสามารถโหลดชิ้นส่วนใหม่ 3 ชิ้นในเวลาที่ผู้เล่นเดินจากปลายด้านหนึ่งไปอีกด้านหนึ่ง