วิธีทำให้ voxel ดูเป็นธรรมชาติ


11

ฉันกำลังพัฒนาเกม voxel แต่ฉันคิดว่าฉันใช้เทคนิคที่ผิด ปัจจุบันฉันใช้กระเบื้องแบนเพื่อสร้างบล็อกและฉันคิดว่ามีวิธีที่ดีกว่าและมีประสิทธิภาพมากขึ้น

ฉันเคยเห็นเกม voxel ซึ่งมีภูมิประเทศเป็นธรรมชาติ โดยที่ฉันหมายถึงไม่บล็อก เกมนี้มีบล็อก 4 * 4 * 4 ต่อลูกบาศก์เมตรและบล็อกเช่นดินทรายและหินมีขอบกลมและชนิดของการหลอมรวมกัน (เช่นในเกมทั่วไป) นี่เป็นภาพหน้าจอ ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้สำเร็จได้อย่างไร



คุณรู้หรือไม่ว่าเกมนี้คืออะไร? คุณจะมั่นใจได้อย่างไรว่าเป็น voxels ตกลงพบว่าตัวเองเป็นเกมที่เรียกว่า Blockscape: indiedb.com/games/blockscape
Babis

มีบล็อกที่ procworld.blogspot.com ซึ่งมีโพสต์บล็อกรายละเอียดเกี่ยวกับการสร้างเอ็นจิ้น voxel ทุกประเภท การโพสต์ย้อนกลับไปอีกหลายปีจากตอนที่เครื่องยนต์ยังอยู่ในช่วงเริ่มต้นจนถึงตอนนี้เมื่อตอนนี้กำลังได้รับใบอนุญาตสำหรับ Everquest Next
Stokastic

คำตอบ:


14

สิ่งนี้ทำได้โดยการสอดแทรกทางลาดระหว่างลูกบาศก์ที่มีความสูงต่างกัน

เมื่อคุณมีทิวทัศน์เช่นนี้ (มองจากด้านข้าง)

  #
 ####   ##
############

คุณจะเพิ่มรูปหลายเหลี่ยมเพื่อทำให้หน้าตาเป็นแบบนี้:

 /#\
/####\ /##\
############

อัลกอริทึมในการคำนวณทางลาดเหล่านี้เป็นขั้นตอนวิธีการเดินขบวนก้อน

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


ขอขอบคุณ! คุณรู้จักสถานที่ที่อธิบายวิธีการทำเช่นนี้ใน OpenGL, Light Game Java Library หรือไม่? แก้ไข: และถ้าคุณรู้เทคนิคที่ดีในการเพิ่มการตรวจจับการชนสำหรับภูมิประเทศที่เดินทัพนั่นก็จะได้รับการชื่นชมเช่นกัน
KaareZ

@KaareZ ขออภัยฉันไม่เคยทำงานกับ LWJGL
Philipp

@Philipp คุณอาจสนใจคำตอบนี้

1
หรือคุณสามารถข้ามการเดินขบวนไปด้วยกันและไปที่frankpetterson.com/publications/dualcontour/dualcontour.pdf frankpetterson.pdf ที่ ซับซ้อนน้อยกว่านั้นคุณยังสามารถเพิ่มฟอนต์เสียงเพื่อชดเชยกับจุดสุดยอดของชิ้นสุดท้าย คุณยังคงมีบล็อก แต่ตอนนี้พวกเขามีคุณสมบัติของเนินเขาโดยไม่ถูกจัดแนวอย่างเคร่งครัดในแนวตรงอย่างเคร่งครัด ... การรวมเส้นขอบสองชั้นและสิ่งนี้เพื่อผลลัพธ์ที่น่าสนใจยิ่งขึ้น (ด้วยตัวดัดแปลงบนจุดสุดยอดเพื่อควบคุมการสร้างอินทรีย์มากขึ้นหรือน้อยลง) .
user29244

forum.unity3d.com/attachments/captura-jpg.23795นี่คือภาพของ "rolling block" (ออฟเซ็ตที่ใช้เป็นการกระจัดตามแนวตั้ง) นี่คือภาพเพิ่มเติม แต่มีการกระจัดที่ใช้กับทุกทิศทางforum.unity3d.com/attachments/t1- jpg.23871 forum.unity3d.com/attachments/t2-jpg.23872 vimeo.com/27976287
29244

6

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

ปัญหาทางเทคนิคที่สำคัญคือเมื่อ voxelizing โมเดลที่คุณสร้างขึ้นในรายละเอียดระดับสูงคุณจะจบลงด้วย voxels ขนาดเล็กจำนวนมาก การประมวลผลและการแสดงผลจำนวนมากของ voxels นั้นไม่สำคัญ คำตอบนี้เรียกว่า Sparse Voxel Octrees

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

รายละเอียดเพิ่มเติมเกี่ยวกับSVO ในบทความนี้

นี่คือโอเพนซอร์ซที่มีการใช้ใบอนุญาต BSD ของ SVO https://code.google.com/p/efficient-sparse-voxel-octrees/

นี่คือวิดีโอที่อธิบายการสร้างภาพหลายเหลี่ยมกับ SVO (ข้อดีและข้อเสีย)


นี่มันเจ๋งมาก! นอกจากนี้ลองดูที่sauerbraten.orgใช้เทคนิคที่คล้ายกัน (แต่ไม่นำก้อนเดินขบวนมาใช้ส่วนนั้นจะเหลือนักออกแบบระดับ)
Kroltan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.