ปรับตาข่ายให้เหมาะสมสำหรับทิวทัศน์ลูกบาศก์ voxel


12

เล่นกับการสร้าง minecraftish / lego world landscapes ใน Unity 3D (สร้าง voxel landscapes with cubes) ฉันพบว่า mesh ที่สร้างขึ้นสำหรับทิวทัศน์เหล่านี้ใช้หน่วยความจำจำนวนมาก ในปัจจุบันตาข่ายประกอบด้วยเพียงจุดยอดสำหรับด้านที่มองเห็นของก้อน การใช้หน่วยความจำสำหรับภูมิประเทศที่ซับซ้อนอาจใช้เวลา 6 หรือ 7 ร้อย megs

ตาข่ายเหล่านี้อาจปรับให้เหมาะสม แต่ฉันพยายามหาอัลกอริธึมที่เหมาะสมในการทำเช่นนี้

อัลกอริทึมต้องคำนึงถึงว่าคุณไม่ต้องการบล็อก "ผสาน" ที่มีประเภทภูมิประเทศที่แตกต่างกัน ฉันเดาว่าการเริ่มต้นที่ง่ายจริงๆอาจจะแค่ประมวลผลบล็อคทั้งหมดตามแกนหนึ่งและทำเรตติ้งพิเศษสำหรับอีกสองแกน

ฉันต้องการรักษารูปร่างของตาข่ายนั่นคือไม่มีการรวมจุดยอดไปยังจุดที่มีการเปลี่ยนแปลงพื้นที่ว่างเปล่าหรือของแข็ง เหตุผลก็คืออาจมีสิ่งมีชีวิต / ฯลฯ ที่ยังคงต้องไปรอบ ๆ ตาข่าย ดังนั้นฉันไม่สามารถสร้างรายละเอียดที่ต่ำมากบิดเบือนตาข่าย

ความคิด / คำแนะนำ / เคล็ดลับเกี่ยวกับเรื่องนี้?


2
ทำไมคุณถึงเก็บจุดยอดสำหรับลูกบาศก์ขนาดที่รู้จักกัน? ทำอัลกอริทึม; หรือใช้บัฟเฟอร์จุดสุดยอดที่ใช้ร่วมกัน
decaviatedcaviar

ทำไมต้องใช้ตาข่ายเหลี่ยม voxel สามารถแสดงผลอย่างมีประสิทธิภาพมากเช่นเดียวกับที่พวกเขามี สำหรับหนึ่ง voxel cube คุณต้องมี 3 float (x, y, z) สำหรับ 1 box คุณต้องมีประมาณ 8 * 3 float (8 vertices) และในกรณีที่คุณมีขอบและรูปหลายเหลี่ยมโดยปริยาย บางที Unity ไม่ใช่เครื่องมือสำหรับปัญหา voxel นี้
user712092

คำตอบ:


5

คำถามของฉันคือ:

ทำไมคุณต้องการตาข่ายเพื่อเคลื่อนไหวสิ่งมีชีวิต?

คุณไม่สามารถคำนวณการคำนวณเส้นทางในเมทริกซ์ 3 มิติของรหัสได้หรือไม่

ฉันคิดว่า Minecraft ใช้เมทริกซ์ 3 มิติพร้อมบล็อก 4 บิต นอกจากนี้ยังจำลองสิ่งมีชีวิตในรัศมีรอบ ๆ เครื่องเล่น

คุณสามารถจัดเก็บชิ้นงานของคุณในโครงสร้างแบบ oc-tree ซึ่งแต่ละชิ้นถูกบีบอัด

หากคุณเก็บข้อมูลที่บีบอัดไว้ใน RAM คุณสามารถขยายขนาดข้อมูลได้อย่างรวดเร็วเมื่อต้องการ

ข้อความแสดงแทน


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

อีกจุดหนึ่ง ... ตามที่คุณเห็นจากภาพหน้าจอ ... ไม่มีภูมิประเทศทั้งหมดที่แบนราบนัก โดยทั่วไปแล้วตาข่ายเป็นพื้นผิวที่ขรุขระของลูกบาศก์ แต่ฉันคิดว่ามีบางห้องสำหรับปรับใบหน้าตาข่าย / จุดยอดให้เหมาะสม ดูเหมือนว่า octree จะดีที่สุดสำหรับข้อมูลที่มีกลุ่มของข้อมูลที่คล้ายกันจำนวนมากแทนที่จะเป็นข้อมูล "jaggy" หรือสิ่งนี้ไม่ถูกต้อง?
James Livingston

@Gatorfrog: โปรดจำไว้ว่าพื้นที่ว่างเป็นข้อมูลเช่นกัน ถ้ามันสั่นแล้วก็แน่ใจว่าจะมีบิตจำนวนมากส่งสัญญาณว่างเปล่า แปดจะมีเพียงสำหรับคุณที่จะคิดว่าชิ้นที่คุณควรขยายตัวก่อนที่จะทำให้พวกเขา พื้นที่ว่างเปล่าจะกลายเป็นศูนย์ dayjob ของฉันเกี่ยวข้องกับการทำงานกับไลบรารีการแสดงผล voxel ที่ซับซ้อนมาก โพสต์ถัดไปของฉันจะอธิบายสิ่งที่พวกเขาทำ
Nailer

ไลบรารีที่ฉันทำงานด้วยทำสิ่งต่อไปนี้: สร้างกลุ่มข้อมูลและเก็บไว้ในฐานข้อมูลไฟล์แฟลต แต่ละอันมี ID แต่ละลูกบาศก์ประกอบด้วยชิ้นส่วนจำนวนมาก สำหรับแต่ละอันจะมีการสร้างรายละเอียดในระดับที่แน่นอน เมื่อระดับรายละเอียดสูงสุดมี 100% ของ voxels สูงสุดที่สองมี 25% ของ voxels ทั้งหมดแล้วหารด้วย 4 ทั้งหมดสำหรับแต่ละระดับถัดไป ชิ้นส่วนที่อยู่ใกล้กับคุณสามารถมองเห็นได้โดยใช้รายละเอียดในระดับสูงสุด
Nailer

ข้อมูลทั้งหมดจะถูกจัดส่งในรูปแบบการบีบอัดจาก RAM ไปยัง VRAM ซึ่งมีการขยายตัวโดยอัลกอริทึมการบีบอัด GPGPU ที่ทำงานใน CUDA สิ่งนี้จะช่วยประหยัดหน่วยความจำจำนวนมากด้วย ดังนั้น: ตรวจสอบว่าผู้เล่นอยู่ที่ไหนและรับรายละเอียดที่สูงชิ้นสิ่งที่ไกลออกไปสามารถมองเห็นได้อย่างง่ายดายโดยใช้หนึ่งใน LOD ต่ำ
Nailer

1

วิธีการเกี่ยวกับการใช้แปดในการจัดเก็บภูมิประเทศ?

เช่น air = ไม่มีโหนดประเภทภูมิประเทศอื่น ๆ ทั้งหมดจะมีโหนดที่มีประเภทภูมิประเทศ

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


0

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


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