Saya telah bekerja menggunakan Maya untuk animasi dan lebih banyak proyek berorientasi film namun saya juga fokus pada studi saya tentang pengembangan video game. Ngomong-ngomong, saya berbicara dengan salah satu profesor saya dan kami tidak tahu mengapa semua mesin game (yang saya tahu) dikonversi menjadi segitiga.
Adakah yang tahu mengapa mesin gim dikonversi menjadi segitiga dibandingkan membiarkan model sebagai empat sisi poligon? Juga apa pro dan kontra (jika ada) dari melakukan ini?
graphics-programming
Hibah
sumber
sumber
Jawaban:
Intinya adalah Rasterisasi Segitiga, yang merupakan cara komputer membuat objek ke layar. Meskipun orang lain mengatakannya lebih fasih daripada saya:
Tekankan milikku. Sumber: http://www.devmaster.net/articles/software-rendering/part3.php
sumber
Segitiga memiliki banyak properti yang membuatnya lebih mudah, dan karenanya lebih cepat, untuk menggambar.
Empat poin atau lebih mungkin tidak pada bidang yang sama, tetapi tiga poin selalu (mengabaikan kasus yang merosot). Ini memiliki sifat menarik bahwa nilai skalar bervariasi secara linear di atas permukaan segitiga. Bahkan ketika segitiga diproyeksikan di layar, nilai skalar masih bervariasi secara linear terhadap x '/ z dan y' / z.
Ini, pada gilirannya, berarti sebagian besar jika tidak semua yang diperlukan untuk naungan, peta tekstur, dan filter kedalaman, segitiga dapat dihitung menggunakan interpolasi linier yang dapat dilakukan dengan sangat cepat dalam perangkat keras khusus.
tl; dr: segitiga adalah primitif paling sederhana, jadi algoritma yang menangani segitiga dapat sangat dioptimalkan.
sumber
Tiga poin (segitiga) SELALU mendefinisikan bidang datar. Dengan kata lain, diberikan tiga poin, Anda selalu dapat membuat bidang datar yang dapat memotong ketiga poin. Namun hal yang sama tidak selalu benar dari empat poin. Anda dapat memiliki empat poin semua di pesawat, tetapi Anda juga dapat memiliki empat poin yang tidak ada di pesawat.
sumber
Bukan "mesin game" yang melakukan ini - semua perangkat lunak 3D yang Anda gunakan melakukan ini. Itu tidak memberitahu Anda tentang hal itu, dan profesor Anda tampaknya kurang memenuhi syarat jika dia tidak tahu ini. Mereka ada di memori komputer bahkan jika perangkat lunak menyembunyikannya dari Anda. Semua program 3D memiliki opsi yang akan membuat segitiga terlihat. Mereka juga akan memiliki opsi yang membaginya menjadi tepi yang dapat diedit, sehingga Anda dapat bermain dengannya. Tapi mereka selalu ada di sana untuk memulai dan itu naif dari profesor Anda untuk mengajar subjek ini dan masih bertanya-tanya "untuk apa segitiga".
Segitiga adalah satu-satunya cara untuk mengatur verts dan menjamin permukaan yang rata. Ketika Anda memiliki quad, Anda dapat mengatur verts dengan cara yang harus ditekuk. Tapi itu sudah terbuat dari segitiga dan segitiga itulah yang memungkinkan belokan.
sumber
Segitiga adalah primitif paling sederhana yang dapat dijelaskan secara terpisah karena memiliki tiga titik, lebih sedikit daripada yang tidak menggambarkan permukaan dalam 3D.
Karena segitiga dapat dianggap sebagai isolasi, dimungkinkan untuk membuat sepotong kode atau silikon yang hanya mampu menghasilkan satu segitiga tunggal, yang melalui kekuatan pengulangan dapat membuat permukaan sama sekali.
Oleh karena itu, sistem komputer pertama yang berhasil merender "semua permukaan sama sekali" secara alami melakukannya dengan merender banyak segitiga secara mandiri.
Jika seseorang menganggap segitiga dan paha depan sebagai "primitif" (yaitu sebagai potongan geometri yang benar-benar terisolasi tanpa konteks) segitiga adalah yang lebih primitif, sehingga cenderung untuk "menang."
Namun, begitu komputer tingkat hiburan melampaui tingkat kecanggihan tertentu pada 1980-an, kesederhanaan mempertimbangkan "primitif" dalam isolasi menjadi kurang penting. Jika grafis akan diproduksi secara massal, maka ekonomi skala mendukung kelompok pemrosesan simpul terkait, seperti halnya mereka suka merakit seratus mobil yang hampir identik sekaligus.
Inilah sebabnya mengapa di tahun 1980-an, film mengadopsi "quad," yang merupakan keliru karena mengacu pada grid 2D dari simpul dalam ruang 3D, dan bukan segi empat yang terisolasi.
Pergeseran yang sama dari segitiga ke "paha depan" belum terjadi di dunia hiburan interaktif, tetapi kemungkinan besar akan terjadi, segera, dan untuk alasan yang sama terjadi di bisnis film.
sumber
Hanya ada satu cara untuk melakukan triangulasi segitiga vs cara 'n - 2' untuk poligon sisi. Jadi, segitiga pada akhirnya adalah cara yang paling tidak ambigu untuk mendefinisikan bentuk polihedral. Juga, seperti yang ditunjukkan poster lainnya, ada banyak cara untuk mempercepat rasterisasi segitiga (bukan quad atau lebih tinggi) (z konstan adalah salah satu favorit saya). Juga, lebih mudah untuk mengoptimalkan tes persimpangan ray-triangle daripada untuk tes persimpangan poligon sewenang-wenang. Faktanya, banyak operasi pada poligon n-sided mendapat manfaat dari memiliki representasi triangulasi. Itu bukan untuk mengatakan bahwa representasi poligon sisi-n adalah 'buruk' - mereka sangat berguna tetapi pada akhirnya, Anda akan ingin bekerja dengan segitiga untuk banyak operasi mesh.
sumber
Selama segitiga didefinisikan oleh tiga simpul non-colinear (baca: tidak ada sudut yang persis Pi), maka simpul menentukan bidang yang unik.
Quad adalah, tentu saja didefinisikan oleh empat simpul. Sangat mungkin bagi simpul-simpul tersebut untuk menjadi non-coplanar. Dalam hal ini, quad Anda akan benar-benar menjadi dua segitiga dibagi dengan diagonal pada quad. Itu dua pesawat, dua set normals permukaan, dll.
Setiap alat pemodelan yang tersedia, setiap algoritma untuk texturing, pencahayaan, dll semuanya menganggap bahwa model dibuat dari segmen bidang, dan setiap formula yang kita miliki (produk silang untuk perhitungan normal adalah yang pertama yang kita miliki) menggunakan dataset input minimum absolut - tiga simpul mendefinisikan pesawat, dan pesawat adalah apa yang perlu kita lakukan semua hal mewah.
Anda tentu bisa menulis mesin untuk bekerja dengan quads, tetapi Anda akan menemukan diri Anda mengabaikan vertex keempat dalam hampir setiap kasus, kecuali ketika Anda (sering) perlu memastikan itu coplanar dengan tiga lainnya yang menentukan quad. Dan, solusi paling logis untuk kasus di mana tidak coplanar adalah dengan membagi quad menjadi dua segitiga. Jadi, mengapa tidak melakukan itu saja?
Apa gunanya bekerja dengan paha depan?
Jika Anda ingin quad, satukan dua segitiga.
sumber
Jika kita berasumsi bahwa mendapatkan 4 poin sebagai co-planar bukan masalah (itu, seperti yang telah ditunjukkan orang lain, tetapi tetaplah dengan saya) maka Anda menemukan bahwa membuat trapezium yang sewenang-wenang (yang biasanya berbentuk seperti segi empat biasanya terlihat seperti ketika diubah menjadi ruang layar) tidak terlalu berbeda dengan rendering sebuah segitiga - pada kenyataannya, itu cukup banyak bekerja sama setelah Anda melakukan kliping karena dapat menghasilkan simpul tambahan. (Setidaknya dalam model perangkat lunak - perangkat keras mungkin memiliki cara kasar yang sederhana dalam melakukan kliping.)
Masalah yang tersisa karena itu adalah salah satu efisiensi representasional. - Anda dapat dengan mudah mewakili quad dengan 2 segitiga, dan tanpa simpul tambahan jika Anda menggunakan strip segitiga (3 verts untuk segitiga 1, lalu vert ekstra untuk segitiga ke-2). Di sisi lain, jika Anda mencoba dan merepresentasikan segitiga dengan quad, Anda perlu menggunakan 4 simpul dan memiliki satu degenerasi yang identik dengan yang lain. Ini tidak ideal dalam hal efisiensi.
sumber