Bermain-main dengan menciptakan lanskap dunia minecraftish / lego di Unity 3D (lanskap voxel yang dihasilkan secara prosedural dengan kubus), saya menemukan bahwa jerat yang dibuat untuk lanskap ini membutuhkan banyak memori. Mesh saat ini hanya terdiri dari simpul untuk sisi kubus yang terlihat. Penggunaan memori untuk medan yang kompleks mungkin membutuhkan 6 atau 7 ratus mcg.
Jejaring ini dapat dioptimalkan, tetapi saya berjuang untuk menemukan algoritma yang layak untuk melakukan ini.
Algoritme harus mempertimbangkan bahwa Anda tidak ingin "menggabungkan" blok-blok yang berbeda jenis medan. Saya kira permulaan yang sangat sederhana mungkin untuk hanya memproses semua blok sepanjang satu sumbu, dan melakukan sapuan ekstra untuk dua sumbu lainnya.
Saya perlu menjaga bentuk mesh, yang tidak menggabungkan simpul ke titik bahwa ruang kosong atau padat diubah. Alasannya adalah, mungkin ada makhluk / dll yang masih perlu bernavigasi di sekitar jala. Jadi saya tidak bisa hanya membuat detail yang sangat rendah, jaring yang terdistorsi.
Adakah pemikiran / saran / kiat tentang ini?
sumber
Jawaban:
Pertanyaanku adalah:
Mengapa Anda membutuhkan jaring itu sendiri untuk melakukan gerakan makhluk?
Tidak bisakah Anda melakukan perhitungan lintasan pada matriks 3d id?
Saya pikir Minecraft menggunakan matriks 3d dengan 4 bit blok pr. Itu juga hanya mensimulasikan makhluk radius tertentu di sekitar pemain.
Anda dapat menyimpan potongan-potongan Anda dalam struktur pohon-oc, di mana setiap potongan dikompresi.
Jika Anda menyimpan data terkompresi dalam RAM, Anda dapat mendekompres data dengan cukup cepat saat dibutuhkan.
sumber
Bagaimana kalau menggunakan octree untuk menyimpan medan?
Misalnya udara = tidak ada simpul, semua jenis medan lainnya akan memiliki simpul dengan jenis medan.
Saat memasukkan / menghapus node, Anda dapat memeriksa apakah kedelapan anak dari setiap node pada path tree yang dimodifikasi memiliki tipe terain yang sama dan menggabungkannya jika diperlukan. Dengan begitu, balok besar dari bahan yang sama hanya akan memakan satu simpul.
sumber
Apakah Anda hanya membuat kubus untuk bagian geometri yang bisa dilihat pemain? Itu akan menjadi langkah pertama saya. Tergantung pada ukuran medan Anda, Anda tidak harus memiliki seluruh dunia dimuat / gambar / terlihat / apa pun.
sumber