Kebisingan 3D menjadi hal wajib jika medan membutuhkan jaringan gua dan overhang.
Untuk mengekstrak permukaan isosurface dari informasi kepadatan, 2 teknik yang paling populer adalah Marching Cubes (MC), dan Dual Contouring (DC) yang lebih baru. Struktur data yang dibutuhkan sangat berbeda tergantung pada metode yang dipilih.
Seperti yang disebutkan sebelumnya, artikel Geiss's GPU Permata 3 adalah titik awal yang sangat instruktif untuk memahami dan mengimplementasikan medan MC pada GPU (Perhatikan bahwa pendekatan MC-nya berjalan sepenuhnya pada GPU dan membutuhkan setidaknya SM4 - GS yang mampu).
Karena data kepadatan pada voxel MC hanya dapat tetap di tepi voxel, MC klasik dapat membentuk volume tanpa mempertahankan fitur tepi yang tajam. DC tidak mengalami kelemahan ini karena info densitas dinyatakan sebagai titik 3D (QEF minimizer) yang diletakkan di mana saja di dalam voxel plus tanda di setiap sudut.
Di sisi lain, MC tidak menderita dari wajah berpotongan sendiri karena semua segitiga yang dihasilkan tertutup dalam voxels yang sesuai, sedangkan DC membutuhkan perhitungan tambahan untuk mencegah persimpangan antara wajah yang dihasilkan. Penulis DC membahas masalah ini dalam versi yang ditingkatkan dari algoritme mereka.
http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf
http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
Orang ini juga mengusulkan pendekatan yang lebih bersih berdasarkan analisis cembung / cekung untuk menghindari persimpangan-sendiri. Ia menggunakan aturan pemisahan quad yang lebih baik untuk membantu menjaga orientasi edge:
http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf
MC klasik juga tidak out-of-box "bebas retak" dan mungkin memerlukan penambalan retak jika dijalankan pada oktan yang tidak dibatasi. DC tidak menderita dari masalah terakhir ini.
Berikut ini adalah survei yang cukup bagus dan lengkap dari sebagian besar teknik ekstraksi mesh:
http://www.cs.berkeley.edu/~jrs/mesh/
Pendekatan octree / voxel secara intrinsik adalah "CSG-friendly", yang membuatnya lebih mudah untuk merencanakan strategi level game yang sepenuhnya "dapat dirusak", tetapi jika seseorang perlu menerapkan semua ini dalam sebuah game, kedalaman octree juga perlu frustasi. -tergantung.
Jika seluruh barang cocok dalam memori atau streaming dengan benar, data juga dapat digunakan untuk rendering AO dan komputasi fisika / tabrakan.
Dugaan saya, dalam contoh khusus itu, adalah bahwa ia menggunakan nilai z untuk menentukan jenis bahan apa: batuan dasar, batu, tanah, atau udara.
sumber
Minecraft menggunakan algoritma marching cubes untuk menghasilkan medan 3D. Saya tidak punya referensi untuk ini, maaf. Saya tidak yakin persis apa yang Notch bicarakan ketika ia menyebutkan fungsi Perlin Noise - mungkin benih untuk algoritma marching cubes. Info lebih lanjut di sini:
Dan artikel Permata GPU yang bagus jika Anda tertarik untuk berbaris:
sumber
sumber