Apa sebenarnya Pemetaan UV dan UVW?


26

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?


1
ajukan dua pertanyaan secara terpisah
Pengembang Game Noob

1
Saya sangat membenci orang-orang seperti @NoobGameDeveloper, semua orang menjawab pertanyaan dan semua yang mereka lakukan adalah mencoba mencari tahu hal-hal yang salah dengan pertanyaan itu. Ayo biarkan mereka mengajukan pertanyaan, saya tidak mengatakan bahwa tidak ada yang harus mengikuti aturan tapi pertanyaan seperti ini benar-benar boleh diposting di sini.
Daniyal Azram

Jawaban:


23

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.


Layak disebutkan bahwa OpenGL memperlakukan v0 sebagai bagian bawah dan v1.0 sebagai bagian atas. Itu menghabiskan banyak waktu di masa lalu ketika saya tidak dapat menemukan bug ketika tekstur saya terlihat aneh.
tkausl

8

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.


Langka? Untuk apa mereka digunakan? Bisakah Anda menunjukkan beberapa contoh dalam konteks judul AAA.
Quazi Irfan

Tidak, karena mereka pada umumnya tidak pernah digunakan. Selalu ada cara yang lebih murah untuk melakukan hal yang sama. Pikirkan item yang dipotong di wii sports plus; Anda dapat memecahkan item dengan cara apa pun yang Anda inginkan, dan melihat "internal". Mereka bisa membuang banyak memori dengan membuat mereka tekstur 3d (dengan asumsi perangkat keras bahkan mendukung itu), tetapi jauh lebih murah untuk mensimulasikan itu dengan beberapa tekstur 2d sebagai gantinya.
Jari Komppa

Jadi, mereka tidak eksklusif? atau ini tidak ada fitur yang sangat dibutuhkan untuk melakukan hal-hal mesin game terkenal?
Quazi Irfan

Saya tidak mengerti maksud Anda. Tekstur 3d mungkin berguna dalam penggunaan lain selain sebagai tekstur sederhana; jika beberapa data yang dibutuhkan shader memetakan dengan mudah ke dalam array 3d, itu akan menjadi satu penggunaan. Tetapi sebagai tekstur "normal", mereka umumnya hanya membuang-buang memori.
Jari Komppa

Salah satu aplikasi tekstur 3D adalah Pemetaan Jarak, meskipun seperti yang dikatakan Jari, mereka sangat tidak biasa dalam permainan karena kompleksitasnya. [tautan] http.developer.nvidia.com/GPUGems2/gpugems2_chapter08.html
Jackalope

7

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:

UV Mesh

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!


0

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.

         uv map       color map
 (x,y,z)   ->   (u,v)    ->     color
 mesh           Texture
 space          space
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.