Saya mencoba mencari solusi untuk masalah ini. Saya mencoba membangun mesh navigasi dalam format kisi-kisi simpul yang dikunci menjadi x, koordinat lantai dalam bentuk kotak untuk ruang 3D. Tetapi saya mengalami masalah dalam mencari cara untuk mengatasinya.
Saya mencoba melihat ke perpustakaan Recast. Ini adalah metode yang cukup kuat, tetapi tampaknya melambat dengan peta yang lebih besar dan ruang terbuka. Saya juga tidak tahu bagaimana mereka menghasilkan simpul dan tepi untuk ruang dunia dengan peta ketinggian.
Pikiran saya berikutnya adalah melakukan apa yang dulu dilakukan Unreal Engine 3.
https://udn.epicgames.com/Three/NavigationMeshReference.html
Yang menggunakan raycast untuk menghasilkan mesh. Saya tidak tahu bagaimana cara menghentikan raycast.
Jadi ... pilihan saya berikutnya adalah kotak, mungkin kotak. Buat volume terbagi dengan ukuran yang kekuatan 2. Sejajarkan kotak ke grid, dan menembak prisma persegi panjang ke bawah sebagai sinar. Jika itu mendarat di sepotong geometri yang merupakan bagian dari tanah dan persegi panjang tidak berpotongan, tinggalkan kotak di sana. Dan terus turun sampai batas volume tercapai. Untuk memeriksa apakah ujung-ujungnya perlu dikaitkan, saya kira saya bisa memeriksa untuk melihat apakah kemiringan antara dua pasang simpul berada dalam kemiringan walkable, gabungkan mereka jika ini benar.
Masalah utama saya adalah ... ini sepertinya tidak terlalu optimal. Tanpa memikirkannya, pada perkiraan prosesnya adalah O (N ^ 3) untuk tingkat berlapis-lapis. Yang bisa jadi sangat jahat.
Dan bit terakhir adalah untuk secara otomatis membuat kelompok persegi panjang dari kotak-kotak ini. Saya tidak sepenuhnya yakin bagaimana melakukan ini. Implementasi Unreal memisahkan mereka dengan lereng. Namun, saya mencoba mempertahankan format kisi. Jadi itu tidak sepenuhnya perlu. Masalahnya masih tetap pada pembuatan ubin persegi panjang besar untuk membagi proses pencarian jalan menjadi basis per ubin. Ubin tidak boleh terlalu besar, juga tidak terlalu kecil.
Jadi pertanyaannya adalah ...
Apa yang akan menjadi cara yang efisien untuk menghasilkan navmesh yang diikat ini? Dan apa cara yang baik untuk membuat ubin?