ขึ้นอยู่กับวิธีการแบ่งพื้นที่ที่คุณใช้แม้ว่าวิธีการแบ่งย่อยทั้งหมด (เช่นวิธีการบีบอัดใด ๆ ) ในที่สุดก็จะเลื่อนออกไปโดยที่ไม่มีการบีบอัดเพิ่มเติมที่เกิดขึ้นเนื่องจากโครงสร้างข้อมูลโอเวอร์เฮดและปัจจัยเชิงตรรกะ / คณิตศาสตร์อื่น ๆ ตัวอย่างสามารถพบได้ในแปด สำหรับแต่ละโหนดใน octree จะต้องเก็บตัวชี้ไว้เป็นพาเรนต์และ / หรือลูก (ขึ้นอยู่กับว่าคุณไปเกี่ยวกับโครงสร้างการปรับโครงสร้างข้อมูลของคุณอย่างไร) เพื่อเปิดใช้การสำรวจเส้นทางที่มีความหมาย โครงสร้างต้นไม้ใด ๆ อาจมี n ลูก อัตราส่วนที่ต่ำกว่า 1: n การใช้พื้นที่ที่คุณได้รับมีประสิทธิภาพมากขึ้นและมีค่าใช้จ่ายมากขึ้นในต้นไม้ใหญ่เนื่องจากคุณต้องมีโหนดบรรพบุรุษมากขึ้นเพื่อให้มี voxels จำนวนเท่ากัน (ในกรณีของคุณประมาณ 510 ล้านล้าน ของสิ่งเหล่านี้แสดงพื้นที่ผิว)
พิจารณาว่าในกรณีของคุณปัญหาหลักคือค่าใช้จ่ายในการจัดเก็บและการแสดงผลดาวเคราะห์ทั้งหมด (หรือบางส่วนของมัน) จากระยะทางที่ยุติธรรมไม่มีโครงสร้างข้อมูลที่ฉันอยากจะแนะนำในช่วงแปดเดือน การทำแผนที่เป็นสิ่งจำเป็น: เส้นผ่านศูนย์กลาง 12.8 ล้านเมตรที่กำลังสูงสุดที่ใกล้ที่สุดคือ 2 คือ 2 ^ 24 = 16.8 ล้าน 24 octree ระดับในการเคลื่อนที่จะมีจำนวนถึงการแตกแขนงที่มาก - ค่าใช้จ่ายสูงสำหรับ GPU และ CPU เหมือนกัน แต่หากคุณทำสิ่งที่ถูกต้องคุณจะต้องผ่านระดับไม่กี่ครั้ง เมื่อพิจารณาถึงปริมาณของพื้นที่ที่ต้องใช้มีทางเลือกน้อยมาก (ดูด้านล่าง)
ความสามารถในการทำแผนที่ของ octrees คือสิ่งที่ทำให้มันเป็นเครื่องมือที่ทรงพลังอย่างเหลือเชื่อสำหรับไดรฟ์ข้อมูลขนาดใหญ่เช่นที่คุณอธิบาย ซึ่งแตกต่างจากวิธีการแบ่งย่อยอื่น ๆ ทั้งหมดที่รู้จัก (ยกเว้น KD- ต้นไม้), octree เก็บส่วนย่อยต่อระดับที่น้อยที่สุดซึ่งหมายความว่าความแตกต่างที่มองเห็นและทางกายภาพระหว่างระดับ mipmap จะยังคงน้อยที่สุดหมายถึง deltas ปลีกย่อยในขณะที่คุณเดินขึ้นและ ลงต้นไม้
หากในอีกทางหนึ่งคุณต้องการสร้างโลกที่มีการสำรวจเส้นทางกริดแบบลำดับชั้นให้น้อยที่สุดจากนั้นคุณจะต้องแลกเปลี่ยนพื้นที่เพื่อเพิ่มความเร็ว
เมื่อพูดถึงอัตราส่วนในอุดมคติ 1: n จะไม่มีโครงสร้างที่ดีกว่าต้นไม้ kd ในแง่นี้ โดยที่ octree หารด้วย 2 สำหรับแต่ละแกนทำให้เซลล์เด็ก 2 ^ 3 = 8 แต่ละเซลล์ต้นไม้ kd แยกหนึ่งครั้งต่อระดับแผนก ปัญหาเกี่ยวกับสิ่งนี้คือคุณต้องเลือกไฮเปอร์เพลนที่จะแยกและไฮเปอร์เพลนนี้สามารถเลือกได้รอบ 3 แกน ในขณะที่มันเหมาะสมที่สุดในแง่ของพื้นที่มันทำให้ 3D traversals (เช่นระหว่าง raymarches, op พื้นฐานเมื่อใช้ octrees สำหรับฟิสิกส์หรือการเรนเดอร์) ยากกว่าใน octree เนื่องจากโครงสร้างพอร์ทัลชนิดไดนามิกต้องถูกบันทึกไว้อินเตอร์เฟสระหว่างโหนด kd-tree แต่ละโหนด
RLE เป็นอีกวิธีหนึ่งในการบีบอัด แต่ในหลาย ๆ วิธียากที่จะนำไปใช้กับปัญหาเช่นนี้ (ซึ่งฐานปฏิบัติการเป็นทรงกลม) เนื่องจากการบีบอัด RLE เป็นมิติเดียวและคุณต้องเลือกแกนที่ทำงาน ดาวเคราะห์หนึ่งอาจเลือกแกนขั้วโลก แต่ตัวเลือกแกนเดี่ยวใด ๆ จะแนะนำปัญหาบางอย่างกับการสำรวจเส้นทางสำหรับการเรนเดอร์และฟิสิกส์เมื่อทำจากมุมที่ไม่เหมาะสม แน่นอนว่าคุณสามารถรัน RLE ใน 3 แกนพร้อมกันเพิ่มค่าใช้จ่ายในการจัดเก็บเป็นสามเท่าหรือใน 6 แกน (-x, + x, -y, + y, -z, + z) เป็นการเพิ่มประสิทธิภาพเพิ่มเติม
ดังนั้นเพื่อตอบคำถามของคุณ (หรือไม่!)
ฉันจะไม่ตอบคำถามประเภทฮาร์ดแวร์โดยตรง แต่ฉันคิดว่าการมองจากมุมมองแปดเดือนเริ่มจะทำให้คุณเข้าใจว่าอะไรเป็นความจริงที่เป็นไปได้กับฮาร์ดแวร์ชนิดใด ฉันอยากแนะนำให้คุณไปตามเส้นทางนี้ถ้าคุณอยากรู้จริง ๆ มันอาจจะง่ายที่สุดในการติดตั้งoct sparseง่ายๆ(ดูกระดาษของ Laine ใน refs) และวางเปลือกทรงกลมของพื้นผิว voxels ลงไปและดูว่าการใช้พื้นที่ผลลัพธ์เป็นอย่างไร ก้าวขึ้นจากตรงนั้น ดูว่าคุณจะไปได้ไกลแค่ไหนก่อนที่หน่วยความจำระบบของคุณจะเริ่มแจก สิ่งนี้ไม่ต้องการให้คุณเขียน renderer เว้นแต่ว่าคุณต้องการสร้างภาพข้อมูล โปรดจำไว้ว่านี่เป็นการกระทำที่ดีที่สุดบน CPU - GPUs และขนาดใหญ่ไม่มีความจุหน่วยความจำในการจัดการกับปัญหาในระดับนี้ นี่คือหนึ่งในเหตุผลที่ Intel กำลังมองหาโปรเซสเซอร์แบบขนานขนาดใหญ่: ประโยชน์ของ GPGPU ซึ่งดีกว่าในประเภทนี้สามารถนำไปใช้กับพื้นที่หน่วยความจำที่กว้างใหญ่กว่านี้ได้โดยไม่ต้องมีปัญหาคอขวดของระบบ อาจมีคนอื่นที่นี่หรือบน math.stackexchange.com
ในแง่ของข้อกำหนดเกี่ยวกับระยะทางในการดูที่ไม่มีที่สิ้นสุดของคุณแน่นอน แต่คำถามมักจะลงไปที่ "รายละเอียดว่าระยะทางเท่าใด" การแสดงรายละเอียดที่ไม่สิ้นสุดจะต้องใช้ทรัพยากรที่ไม่มีที่สิ้นสุด นั่นคือสิ่งที่การทำแผนที่ตัวแปรต่อฉากเข้ามาในการเล่น โปรดจำไว้ว่าโครงสร้างข้อมูลทั้งหมดรวบรวมการแลกเปลี่ยนความเร็วสำหรับพื้นที่หรือในทางกลับกัน นั่นหมายถึงการเรนเดอร์น้อยลง / ช้าลงหากคุณต้องการโลกที่กว้างกว่าสำหรับความพยายามด้านวิศวกรรมในปริมาณที่เท่ากัน