Paket GLSL mengapung menjadi tekstur RGBA

8

Saya ingin membuat model dan partikel konvensional berbasis segitiga dengan adegan yang dilacak dengan kecepatan bingkai yang masuk akal.

webGL tidak membiarkan Anda menulis gl_FragDepthdi shader fragmen. Anda tidak dapat memiliki beberapa target render, tetapi Anda dapat merender ke tekstur RGBA dan kemudian menggunakan tekstur itu sebagai input ke draw-op lain. Jadi saya bisa membuat adegan ray-traced saya dan menyimpan kedalaman sebagai input ke tahap berikutnya. Ini jelas jauh dari ideal, tetapi bisa diterapkan.

Saya ingin salah tentang ini, dan ini dikumpulkan dari coba-coba daripada sumber definitif; tolong perbaiki asumsi yang salah

Bagaimana Anda bisa mengemas / membongkar pelampung dan, idealnya, beberapa bit bendera dan semacamnya, menjadi tekstur RGBA secara efisien dalam shader fragmen GLSL?

Akan
sumber
2
Ada sebuah artikel lama dalam buku Permata GPU pertama tentang pemetaan bayangan (Anda dapat membacanya di sini: http.developer.nvidia.com/GPUGems/gpugems_ch12.html ). Ini menjelaskan cara mengemas mengapung dalam tekstur RGBA dengan dua cara berbeda. Lihatlah bagian 12.3.3 untuk menulis, lalu 12.3.6 untuk membaca.
Benlitz
1
Sumber lain yang mungkin bermanfaat adalah artikel "Penyimpanan Normal Kompak untuk G-Buffer Kecil" oleh Aras P dari Unity ( aras-p.info/texts/CompactNormalStorage.html ). Artikel ini hanya terbatas pada norma.
Mortennobel
1
Anda dapat membuat tekstur R32F dan hanya menulis nilai kedalaman Anda di sana. tanpa pengepakan membongkar. lalu selama pass "konvensional berbasis segitiga" kedua Anda gunakan tekstur ini sebagai penyangga kedalaman (dilampirkan sebagai kedalaman ke FBO). Jangan ragu untuk bertanya lebih banyak jika ini tidak jelas.
alariq
@ alariq ya ekstensi float didukung secara luas sekarang.
Will
@Apakah Jika ekstensi float memecahkan masalah Anda, maka posting sebagai jawaban dan terima.
Polar

Jawaban:

5

Berikut adalah fungsi mengemas dan membongkar yang akan bekerja pada WebGL dan OpenGL ES 2.0, ini hanya untuk nilai dalam rentang 0 ... 1 sehingga Anda harus berhati-hati karena perhitungan kedalaman Anda berada di ruang yang benar.

Encoding Mengapung ke RGBA

gbpaul
sumber
Bisakah Anda menambahkan potongan kode ke jawaban Anda? Jika situs yang Anda sebutkan turun, tautannya tidak akan berguna.
Felipe Gutierrez