Dalam proyek saya, saya membuat sistem untuk mendeformasi mesh yang sangat detail (pakaian) sehingga 'cocok' dengan mesh cembung. Untuk melakukan ini saya menggunakan peta kedalaman item dan 'lambung' untuk menentukan pada titik apa di ruang dunia deviasi terjadi dan sejauh mana.
Cukup mengubah semua simpul tersumbat ke kedalaman seperti yang didefinisikan oleh 'lambung' cukup efektif, dan memiliki kinerja yang baik, tetapi menderita masalah tidak melestarikan fitur mesh dan membutuhkan culling yang luas untuk menghindari positif palsu.
Sebagai gantinya saya ingin menghasilkan dari peta deviasi kedalaman satu set 'deformer' sederhana yang akan 'mendorong' * semua simpul dari mesh cacat ke luar (dalam ruang dunia). Dengan cara ini, semua fitur mesh dipertahankan dan tidak perlu memiliki heuristik yang kompleks untuk memilah simpul yang tidak pantas.
Saya tidak yakin bagaimana cara menghasilkan set deformer ini. Saya membayangkan sesuatu seperti algoritma yang mencoba untuk mencocokkan permukaan bola untuk setiap bidang penyimpangan yang berdekatan dalam rentang tertentu, tetapi tidak tahu harus mulai dari mana.
Adakah yang bisa menyarankan filter atau algoritma yang cocok untuk menghasilkan deformer? Atau dengan kata lain 'mengompresi' peta kedalaman?
(* Dorong karena pas dengan humanoid cembung 'bulgy' sehingga transformasi cenderung 'bulat' dari POV permukaan.)
Sunting: Berikut ini adalah gambar / diagram yang disarankan yang menggambarkan apa yang saya coba capai.
Juga, saya harus mengatakan karena pertanyaan ini diposting saya bekerja lebih banyak pada masalah ini, dan meskipun saya tidak pernah memecahkan cara mendapatkan deformer saya akhirnya memutuskan bahwa peta kedalaman untuk ini tidak cocok karena:
- Jika mesh yang cacat tidak lengkap, dimungkinkan untuk mendapatkan texels di peta yang dimaksudkan berada di sisi lain dari mesh yang cembung (karena mereka tidak dikaburkan oleh mereka yang lebih dekat dengan kamera di sisi yang benar).
- Efisiensi tidak setinggi yang saya harapkan karena dibutuhkan 6 peta per deformasi.
Bukannya ini tidak dapat dipecahkan, tetapi solusi lain, yang melibatkan pengujian tabrakan pada kernel yang berjalan pada GPU, menghasilkan hasil kualitas yang lebih tinggi dan jauh lebih sederhana, meskipun mungkin tidak secepat itu.
Saya masih berpikir masalah pertanyaan ini menarik meskipun dan akan tertarik pada jawaban karena saya yakin ada situasi di mana itu akan lebih disukai.
Jawaban:
Anda memiliki peta kedalaman, yang saya asumsikan hanya jarak antara mesh cembung A dan mesh deformasi netral B, dan Anda memiliki permukaan normal mesh A.
Apa yang Anda lewatkan adalah bobot (atau pengelompokan) dari bagaimana setiap vert pada mesh B mempengaruhi tetangganya. Misalnya, ketika simpul tengah dipindahkan, ia juga harus menyeret sepanjang tetangganya dengan sejumlah (persentase) jika mereka berada di grup yang sama.
Jika Anda memiliki sekelompok verifikasi yang saling mempengaruhi 100%, mereka semua akan terdorong keluar dengan jumlah terjauh dari peta kedalaman Anda seolah-olah mereka semua adalah bagian dari struktur baja yang tidak dapat ditekuk yang bergerak sebagai satu unit, atur 50% dari struktur ini. dapat bertindak lebih seperti lembaran karet tebal dan 10% seperti bungkus plastik pas karena setiap vert nyaris tidak mempengaruhi tetangganya (yang sekarang Anda miliki.
Jelas ada beberapa perpaduan dan penggabungan nilai yang terjadi. Seperti yang dikatakan @Gajoo, "apa yang salah dengan memindahkan seluruh bentuk?"
sumber