Pengurangan segitiga

Keluarga lain algoritma geometris kami akan meninjau adalah metode pengurangan segitiga, yang digunakan untukmembuat jerat variabel-resolusi dari mesh basis. Meskipun beberapa game tidak pernah menggunakan pengurangan segitiga ataumenggunakannya pada tahap pemodelan, banyak orang lain merasa berguna untuk melakukan beberapa jenis pengurangan segitiga software.

Beberapa alasan populer untuk hal ini adalahl Memilih tingkat detail untuk suatu benda yang bisa sampai dekat atau jauhl Menggunakan jerat resolusi yang lebih rendah untuk menghitung bayanganl Tuning permainan untuk kemampuan perangkat keras pemain saat beban


Apapun kasus Anda, kebijakan pengurangan segitiga dapat diimplementasikan baik sebagai preprocess pada waktu buka,dengan asumsi biaya komputasi relatif tidak penting, atau sebagai proses real-time, menghitung penurunanbertautan secara real time. Jelas, algoritma akan berbeda tergantung pada pilihan Anda. Pengurangan Segitigabukanlah proses yang sederhana, dan dengan demikian mencoba untuk menghitung multiresolusi jala baik secara real time pasti akanmembutuhkan perencanaan yang matang.


Vertex Ambruk


Vertex runtuh melibatkan menghilangkan simpul dari mesh basis menggunakan kriteria coplanarity dengantetangga simpul. Hal ini membutuhkan merekonstruksi jala setelah titik telah dihapus.Pada dasarnya, kita perlu untuk mengatur data yang geometris dalam memori sehingga kita dapat melintasi struktur menggunakanbaik geometri dan topologi hubungan. Kita perlu untuk segera menentukan ujungnya terhubungke titik atau menghitung tertentu normals oleh muka untuk wajah tertentu. Inti dari algoritma untuk setiap titikadalah untuk membandingkan normals per muka bagi mereka menghadapi dhuwur asli kami milik. Jika perbedaan dalamnormals di bawah ambang batas tertentu, kami akan menghapus simpul dari struktur data, dan dengan melintasiorang-orang pinggiran yang telah benar-benar selamat, merekonstruksi mesh basis (lihat Gambar 22.9). Dengan berulangaplikasi, kita akan mencapai tingkat yang lebih rendah segitiga, dan kinerja sehingga lebih tinggi.




Gambar 22.9. Runtuhnya vertex. Kiri, mesh asli. Tepat, mesh setelah pusatvertex telah dihapus.
Sebuah pendekatan yang menarik tetapi mirip bekerja tidak pada simpul, tetapi pada ujungnya. Sebuah tepi dibagi oleh paling banyak duasegitiga. Kemudian, itu semua masalah mendeteksi orang-orang pinggiran yang segitiga tetangga memiliki indeks besarcoplanarity. Jika batas tertentu terpenuhi, kita dapat menghapus tepi dan las simpul di kedua sisitepi bersama-sama. Untuk melakukannya kita menghapus simpul di kedua ujung tepi dan membuat yang baru yang terletak dititik tengah antara dua dan pada sumbu yang dibentuk oleh mereka. Sebuah contoh dari tepi runtuhnya ditunjukkan pada 


 
Gambar 22.10. Tepi keruntuhan. Kiri, mesh asli. Tepat, mesh setelahtepi disorot telah dihapus.Jerat ProgresifSalah satu yang paling populer algoritma pengurangan segitiga real-time adalah jerat progresif, diperkenalkan olehHugues Hoppe pada tahun 1996. Algoritma yang telah kita lihat sejauh ini dirancang untuk membangun mesh resolusi rendahdari dasar, model berkualitas tinggi. Jerat Progresif pergi satu langkah lebih dan memungkinkan real-time kontinutingkat-of-detail (LOD), sehingga kita dapat meningkatkan dan menurunkan jumlah segitiga yang diperlukan dan selalu memiliki modelkompleksitas yang tepat untuk setiap saat. Semua manfaat ini datang dari preprocessing mesh sehinggabaik topologi awal dan deskripsi konstruktif disimpan. Kemudian, algoritma run-time sangat sederhana, sehinggadapat digunakan untuk game.Jerat progresif mulai dengan mesh basis, yang berkurang, satu sisi pada satu waktu, menggunakan variasi dariStrategi runtuhnya tepi diuraikan sebelumnya. Seperti telah kita lihat, mengingat mesh Mn, kita dapat menghitung jalaMn-1 dengan melakukan runtuhnya satu sisi. Ini menghilangkan satu titik dan dua wajah persis. Sekarang, perhatikan bahwakita dapat mengembalikan proses dan merekonstruksi Mn dari Mn-1 jika kita menyimpan informasi keruntuhan itu:posisi dua simpul dan konektivitas dari masing-masing. Ini berarti operasi runtuhnya adalahdibalik. Kami akan memanggil operasi invers split vertex, karena dibutuhkan satu (runtuh) vertex danmembagi menjadi dua.Kemudian, dengan urutan titik perpecahan, kita dapat mewakili jala apapun dengan caral jala berkualitas rendah sebagai M0 awall memerintahkan urutan vertex perpecahan kita perlu melakukan pindah dari M0 ke berkualitas tinggi MnIni adalah inti dari konsep progresif mesh. Kami menyimpan mesh berkualitas rendah dan metode konstruktifuntuk menghasilkan versi yang lebih berkualitas. Kemudian, pada saat runtime, kita menggunakan dua struktur untuk membangun sebuah jala yanghanya cocok untuk kebutuhan kita. Jerat biasanya bergerak lebih dekat atau lebih jauh progresif, jadi kami hanya akan perlumelakukan vertex terbelah atau menggabungkan setiap beberapa frame karena perubahan mendadak dalam resolusi tidak sering. A


Top