Apa itu tekstur 3D?


31

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.


Saya tidak yakin apa yang Anda tanyakan adalah sesuatu. Maksud Anda pemetaan normal dan benjolan untuk mensimulasikan variasi permukaan pada area "rata"?
coderanger

2
Saya pikir maksudnya lebih seperti GL_TEXTURE_3D, dll.
Luker

1
Juga, lihat pertanyaan ini: Bagaimana cara kerja pemetaan tekstur UVW? (dan jawabannya).
George Duckett

Jawaban:


34

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 :

  • efek volumetrik dalam permainan (api, asap, sinar, kabut realistis)
  • caching light untuk penerangan global waktu nyata ( CryEngine misalnya)
  • ilmiah (MRI, CT scan disimpan ke dalam volume)

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:
masukkan deskripsi gambar di sini


14

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


7

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?

... daripada mencoba mencari cara memetakan gambar tekstur secara parametrik ke permukaan bentuk Anda, sifat volumetrik dari tekstur berbasis noise memungkinkan Anda untuk mengevaluasinya di lokasi (x, y, z) dalam piksel Anda shader. Dengan cara ini, Anda secara efektif mengukir tekstur Anda dari bahan padat, yang seringkali jauh lebih mudah daripada mencoba menyusun pemetaan parametrik yang tidak terdistorsi.

Jenis tekstur prosedural berbasis kebisingan volumetrik ini telah lama menjadi andalan film fitur, di mana shader tidak memerlukan kinerja waktu-nyata ... semua film efek khusus hari ini banyak menggunakan shading prosedural berbasis kebisingan ... sangat tergantung tentang penggunaan fungsi noise dalam pixel shader yang ditulis dalam bahasa seperti Pixar's RenderMan. Dengan implementasi yang baik dari fungsi noise yang tersedia untuk penggunaan waktu nyata dalam GPU, saya berharap dapat melihat beberapa ide visual yang menarik dari film fitur yang dimasukkan ke dalam generasi hiburan interaktif berikutnya pada desktop dan konsol. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html


Sangat menarik dibaca! Saya mengalami kesulitan memvisualisasikan apa yang Anda maksud di paragraf kedua Anda.
decaviatedcaviar

Mungkin saya bisa membuat diagram. Yang saya maksudkan adalah bahwa alih-alih mengambil sampel bitmap, warna (atau apa pun yang Anda cari) hanya ditentukan oleh algoritma noise. Dengan begitu tidak diperlukan interpolasi antara piksel bitmap (karena Anda akan mengambil sampel bukan pada posisi piksel 1x1 yang sempurna) dan resolusi menjadi teori tak terbatas. Ini agak seperti menghitung bunga untuk suku bunga tertentu daripada menggunakan tabel pencarian yang sudah dihitung sebelumnya di mana ada langkah / interval tertentu (= resolusi bitmap).
Oskar Duveborn

Setelah membaca keseluruhan artikel yang direferensikan. Saya memiliki pemahaman yang jauh lebih baik, tetapi saya pikir ref. gambar akan menguntungkan kedua belah pihak: yang tidak yakin dan tl; dr. :)
deceleratedcaviar

0

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

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.