Google telah mengecewakan saya, saya tidak dapat menemukan sesuatu yang informatif. Jadi mungkin GameDev bisa :).
- Apa itu tekstur 3D?
- Kapan mereka digunakan?
- Biaya kinerja?
- Bagaimana mereka disimpan?
Saya punya banyak ide yang kabur, tetapi tidak ada definisi 'pasti'.
Setiap referensi ke contoh atau tutorial sangat dihargai, terutama dalam rendering sistem partikel melalui tekstur 3D.
Jawaban:
Tekstur 3D bekerja seperti tekstur biasa. Tapi ini benar-benar 3D. Tekstur 2D memiliki UV coords, 3D memiliki UVW (Anda harus menggunakannya dengan baik). Koordinat tekstur adalah satuan kubus (0 - 1, 0 - 1, 0 - 1).
Kemungkinan penggunaan :
Performa :
Sama seperti tekstur biasa - super cepat (akses memori tercepat di GPU). Di-cache untuk utas dan dioptimalkan untuk situasi ketika utas dekat (pixel shaders) mencari nilai dekat.
Dapat dibaca sebagai titik atau digunakan pengambilan sampel linier (interpolasi tri-linear asli. Persamaan bi-linear dalam tekstur 2D).
Mereka disimpan dalam memori seperti array tekstur 2D.
Memetakan tekstur 3D:
sumber
Tekstur 3D atau 'Tekstur volume' adalah serangkaian tekstur normal yang disusun sebagai irisan, seperti setumpuk kartu. Ini digunakan dalam rendering volumetrik yang sering mengambil data dunia nyata seperti CT scan dan kemudian memanipulasinya. Dalam gim dan grafik, terkadang untuk efek volumetrik seperti asap tempat Anda menukar fleksibilitas sistem partikel dengan biaya tetap dan penghitungan tekstur volume yang mudah (dan mudah paralel). Ini sangat mudah dalam tekstur volume untuk menemukan tetangga terdekat tetapi ini bisa menjadi masalah adalah sistem partikel yang lebih tradisional yang terdiri dari titik longgar.
Juga, beberapa objek kompleks mendapat manfaat dari penggunaan tekstur volume, seperti rumput:
Asap Nvidia dalam sebuah kotak adalah contoh yang bagus:
http://www.youtube.com/watch?v=9AS4xV-CK14
Selain itu, merender hamburan cahaya lebih mudah bila Anda memiliki volume untuk diurai
sumber
Terlepas dari jawaban yang ada, saya suka bagaimana tekstur 3D dapat dibuat secara prosedural juga (sebenarnya lebih masuk akal daripada tekstur prosedural 2D), seperti noise dan fraktal yang akan memberikan detail tekstur yang baik dan tidak cacat ke setiap permukaan sudut tanpa harus untuk memilih model proyeksi (UV, planar, silinder, bola dan sebagainya).
Alih-alih mengambil sampel lapisan bitmap dalam ruang 3D, Anda mendapatkan nilai yang berbeda untuk setiap titik dalam ruang 3D dengan algoritma dasar - yang pada dasarnya memberi Anda resolusi tekstur yang tak terbatas dan tidak ada masalah dengan tekstur membentang pada poligon miring. Ini adalah "tekstur" 3D atau lebih tepatnya bayangan permukaan untuk saya ^^
Saya sebenarnya cukup lelah dengan semua tembakau tekstur bitmap dalam pengembangan game, ketika saya ingin mengotori kapal ruang angkasa, saya ingin menerapkan beberapa lapisan formula kebisingan dan tidak harus melukis bitmap resolusi terbatas. Penggemar 3D tua bisa bermimpi, bukan?;)
Saat ini, memanggang solusi permukaan film 3D oldschool yang manis menjadi warna, bitmap UV normal dan specular adalah satu-satunya kesenangan yang saya dapatkan dan rasanya terbatas terbatas. Adegan demo (seperti biasa) cenderung (pra) menghasilkan tekstur secara prosedural untuk 3D real-time tetapi rasanya sulit untuk menemukan alat yang bagus untuk mendukung alur kerja ini dari desain ke run-time. Kebanyakan pendekatan prosedural game dev tampaknya tentang generasi mesh. Bertanya-tanya berapa banyak pipa shader dengan bantuan peta kedalaman / rendering yang ditangguhkan dapat menangani algo kebisingan 3D oldschool?
sumber
Pola tekstur 3D diterapkan pada voxels dari badan volumetrik dengan cara yang sama seperti pola tekstur 2D diterapkan pada piksel poligon 2D. Berikut adalah contoh tekstur volumetrik 3D dalam JavaScript (memerlukan WebGL):
http://kirox.de/test/Surface.html
tekan [v], putar badan dan ubah gradien dari tekstur yang dihasilkan dengan roda mouse
sumber