Mencoba memahami beberapa konsep 3D dasar, saat ini saya sedang mencoba mencari tahu bagaimana sebenarnya tekstur bekerja. Saya tahu bahwa pemetaan UV dan UVW adalah teknik yang memetakan Tekstur 2D ke Objek 3D - Wikipedia juga memberi tahu saya. Saya mencari penjelasan di Google tetapi hanya menemukan tutorial yang berasumsi bahwa saya sudah tahu apa itu.
Dari pemahaman saya, setiap Model 3D terbuat dari Poin, dan beberapa poin membuat wajah? Apakah setiap titik atau wajah memiliki koordinat sekunder yang memetakan ke posisi kapak / y dalam Tekstur 2D? Atau bagaimana membuka bungkus memanipulasi model?
Juga, apa yang W dalam UVW benar-benar lakukan, apa yang ditawarkan di atas UV? Seperti yang saya pahami, W memetakan koordinat Z, tetapi dalam situasi apa saya memiliki tekstur yang berbeda untuk X / Y dan Z yang berbeda, bukankah bagian Z tidak akan terlihat? Atau apakah saya benar-benar salah paham tentang ini?
sumber
Jawaban:
Pemahaman Anda dekat. Setiap model 3D terbuat dari simpul. Setiap dhuwur biasanya menentukan lokasi suatu titik dalam ruang, normal (digunakan dalam perhitungan pencahayaan) dan 1 atau lebih koordinat tekstur. Ini umumnya ditetapkan sebagai u untuk bagian horizontal tekstur dan v untuk vertikal.
Ketika sebuah objek bertekstur, koordinat ini digunakan untuk mencari texel atau pixel mana yang akan di plot dari tekstur. Saya merasa paling mudah untuk menganggapnya sebagai persentase atau rasio antara tepi kiri tekstur ( u = 0) dan tepi kanan tekstur ( u = 1.0) dan dari atas tekstur ( v = 0) dan bagian bawah itu ( v= 1.0). Mereka diinterpolasi di antara simpul dan mencari setiap piksel pada layar yang diberikan. Mereka bisa lebih besar atau lebih kecil dari rentang ini dan negara render yang ditetapkan saat objek diberikan menentukan apa yang terjadi. Opsi untuk ini adalah CLAMP dan REPEAT. Clamping membatasi koordinat untuk 0 atau 1, menyebabkan tekstur dioleskan di luar jangkauan. Ulangi menyebabkan tekstur berulang ketika berada di luar rentang; ini secara efektif sama dengan hanya mengambil bagian desimal dari koordinat dan menggunakannya sebagai gantinya.
Sebelum koordinat tekstur diterapkan pada suatu objek, mereka dikalikan dengan matriks tekstur untuk menerapkan beberapa transformasi padanya (seperti penskalaan, terjemahan atau rotasi). Efek ini kadang-kadang dianimasikan dalam permainan untuk membuatnya tampak seolah-olah ada sesuatu yang bergerak di suatu objek tanpa harus memindahkan objek itu sendiri ... teksturnya hanya menggulir di atasnya. Ketika matriks tekstur dikalikan dengan koordinat tekstur, itu menghasilkan 2 nilai yang digunakan untuk mencari texel untuk plot (sebut saja mereka s dan t ). Ini dihasilkan secara otomatis dari u dan v bahkan ketika matriks tekstur tidak disetel; ini setara dengan mengalikan u dan v dengan matriks identitas.
Di sinilah koordinat w masuk, meskipun tidak sering digunakan. Ini adalah parameter tambahan untuk melipatgandakan matriks tekstur dan biasanya digunakan saat Anda ingin mempertimbangkan perspektif (seperti dalam Shadow Mapping ). Ini berfungsi sama seperti ketika Anda mengubah lokasi di objek-ruang ke layar-ruang melalui matriks proyeksi pandangan dunia. Dengan mengalikan UVW dengan transformasi proyeksi, Anda berakhir dengan 2 koordinat, s dan t yang kemudian dipetakan ke tekstur 2D.
sumber
Pertimbangkan segitiga.
Setiap sudut memiliki koordinat UV. Anda menyisipkan di antara ini untuk mendapatkan satu set koordinat UV untuk setiap piksel. (Ada juga perspektif dalam permainan di sini tapi mari kita abaikan itu untuk saat ini).
Kemudian, Anda mengambil sebuah texel dari tekstur dari koordinat U dan V. Artinya, sebuah piksel dari koordinat koordinat x, y - hal yang sama, terminologi yang sedikit berbeda karena kita berbicara tentang tekstur.
Jika tekstur Anda benar-benar 3 dimensi, Anda juga memerlukan koordinat ketiga, W.
Salah satu cara untuk memvisualisasikan ini adalah dengan memikirkan balok kayu. Jika Anda memotongnya entah bagaimana, Anda akan melihat bahwa setiap bidang di dalam blok berisi tekstur jenis 2d.
Tekstur 3d sangat langka sehingga Anda bisa melupakannya untuk saat ini.
sumber
Pikirkan origami.
Peta UV seperti kulit 2D yang rata (tidak terbuka) dari jala 3D Anda (shell).
Jika Anda memotong peta dan melipatnya di sepanjang garis jala, hasilnya adalah model 3d Anda.
Nilai titik apung (U, V) berkisar dari (0,0) hingga (1,1) Pojok kiri atas peta UV adalah (0,0) Pojok kanan bawah adalah (1,1)
Setiap dhuwur dalam jala poligon (tris / quads) memiliki nilai (U, V) yang memberi tahu renderer bagian mana dari peta yang akan digunakan.
Dalam pipa GPU, vertex shader menghitung proyeksi 2D dari setiap piksel dalam poligon 3D ini, dan kemudian shader fragmen mewarnai warnanya dalam menggunakan peta UV.
Ini tidak dapat sepenuhnya dihargai tanpa gambar seperti ini yang membuat semuanya menjadi jelas:
Seperti yang disebutkan oleh komentator lain, komponen W digunakan oleh renderer untuk efek yang lebih bagus seperti pemetaan bayangan, tetapi peta UV adalah basis untuk memahami.
Perhatikan bahwa vertex shader harus memanggil fragmen shader setidaknya sekali untuk setiap piksel yang perlu diwarnai. Itulah sebabnya GPU adalah prosesor paralel dengan puluhan inti - pipa shader sangat menuntut.
Harap perhatikan juga bahwa GPU yang terintegrasi dengan CPU dirancang untuk perangkat seluler dan terbatas pada kurang dari sepersepuluh jumlah inti dari GPU eksternal generasi yang sama. Ini karena daya seluler dan kendala pendinginan. Hukum Moore tampaknya telah melambat, tetapi kinerjanya masih membaik (dengan pencairan aneh di sana-sini ..)
Pemetaan UV miliaran piksel pada 240+ bingkai per detik dapat menyebabkan kekacauan yang nyata!
sumber
Peta uv memetakan suatu titik (x, y, z) di mesh ke titik (u, v) pada gambar tekstur. Karena gambar memetakan (u, v) ke warna, kedua peta dapat dirantai, menghasilkan peta dari ruang mesh ke ruang warna.
sumber