16bit setengah mengapung gambar HDR linear sebagai tekstur (difus / albedo)?

10

Jadi saya telah memikirkan hal ini untuk sementara waktu dan mencoba mencari jawaban di google tetapi tidak berhasil.

Jika semua tekstur Anda adalah gambar LDR 8bit, seperti JPEG, tidak dapat yang berpotensi menyebabkan konflik dengan kontrol eksposur / pemetaan nada saat rendering. Itu adalah jika Anda menyesuaikan eksposur rendering gambar Anda yang harus mengekspos detail dalam tekstur yang tidak benar-benar ada, karena mereka dijepit oleh rentang dinamis rendah. Jadi bukankah masuk akal untuk juga memiliki tekstur sebagai gambar HDR, disimpan sebagai .exr, dalam ruang warna linier dengan 16bit setengah float untuk mendapatkan representasi warna yang baik (float 32 bit "penuh" mungkin berlebihan?). Untuk memiliki nilai warna yang lebih rinci dan benar mungkin, saya pikir, memiliki efek pada GI dan bagaimana pendarahan warna dihitung?

Atau apakah itu tidak perlu karena hasil akhir dari rendering yang kita inginkan mungkin akan mirip dengan tingkat paparan tekstur ketika difoto dengan cara apa pun? Dan karena sebagian besar kamera memotret dalam 12-14bit Anda harus mengambil banyak eksposur tekstur dan melakukan semua pekerjaan ekstra untuk menyatukan semuanya menjadi satu HDRI.

Sunting: Untuk memperjelas, saya sebagian besar tertarik pada ini dari sudut pandang rendering foto yang realistis, dengan penyaji jejak sinar (seperti sinar mental, V-Ray, Arnold, dll.) Dengan simulasi cahaya penuh dan penerangan global, daripada untuk mesin game real-time.

Kristoffer Helander
sumber

Jawaban:

8

Dalam produksi film, kami hampir tidak pernah menggunakan tekstur 8-bit untuk warna / Albedo, karena garis, dll. (JPEG terutama bermasalah karena oleh spec, itu sRGB daripada nilai linear.) Kami baik menggunakan 'setengah' (float 16 bit ) atau nilai integer 16-bit unsigned untuk tekstur warna / Albedo.

Larry Gritz
sumber
1
Wow, terima kasih @LarryGritz! Mengingat Anda bekerja untuk Sony Pictures Imageworks, saya akan menganggap Anda sebagai sumber yang sangat andal! :) Tapi bagaimana Anda menangkap tekstur ini? Sebagian besar kamera hanya memotret dalam file RAW 14bit, apakah Anda memiliki kamera khusus dengan sensor linear 16bit? Atau apakah Anda mengambil beberapa eksposur untuk tekstur, seperti yang dilakukan pada pencahayaan berbasis gambar HDRI? Atau apakah Anda cukup menangkap dengan kamera 14bit RAW dan menyimpannya sebagai "16bit"? Ow, dan format file apa yang Anda gunakan, .tiff (.tx, .tex) atau .exr? Sekali lagi terima kasih atas masukan Anda !! :)
Kristoffer Helander
1
@KristofferHelander: Mengonversi dari tangkapan 14 bit ke representasi 16 bit dari rentang 0-1 mudah dicapai dengan perkalian. Tetapi sebagian besar tekstur kami dicat, tidak difoto - kadang-kadang mereka dilukis langsung dalam format 16 bit, kadang-kadang mereka dilukis dalam sRGB dan kemudian dikonversi menjadi 16 bit ketika "linierisasi" untuk digunakan sebagai tekstur. Tidak perlu HDR untuk tekstur albedo.
Larry Gritz
1
@KristofferHelander: Untuk tekstur albedo, kita cenderung menggunakan TIFF dengan data integer 16 bit (apa yang kita sebut .tx hanya format TIFF tetapi ubin dan dengan MIP-map multiresolusi disimpan sebagai beberapa subimage dalam file TIFF). Untuk data HDR yang sebenarnya, seperti tangkapan lingkungan, kami menggunakan OpenEXR. Output renderer juga cenderung OpenEXR.
Larry Gritz
8

Ya, dalam beberapa kasus ekstrem dimungkinkan untuk pencahayaan HDR dan tonemapping untuk mengekspos masalah pita pada tekstur warna. Dalam kasus tersebut, memiliki kedalaman bit yang lebih tinggi untuk tekstur dapat bermanfaat. Namun, dalam pengalaman saya, sebagian besar bahan dan situasi pencahayaan biasa tidak menunjukkan masalah ini, dan sebagian besar tekstur dalam gim biasa baik-baik saja dalam 8-bit (atau bahkan lebih sedikit — gim sering menggunakan kompresi BC1, yang menguranginya menjadi 5- 6-5-bit).

Orang-orang menggunakan target render HDR karena satu adegan dapat mengandung besaran kecerahan yang sangat berbeda, seperti ruangan gelap tempat Anda dapat melihat melalui jendela ke bagian luar yang diterangi matahari 10-100 kali lebih terang daripada ruangan. Namun, tekstur warna tidak memiliki rentang magnitudo yang begitu luas. Mereka mewakili pantulan, yang secara inheren dalam kisaran [0, 1], dan dalam praktik beberapa bahan sehari-hari lebih rendah dari sekitar 2-5% pantulan. Jadi gambar 8-bit (dengan encoding gamma) biasanya dapat mewakili warna difus dan specular dengan presisi yang cukup.

Memang benar bahwa kombinasi tekstur yang cukup gelap dengan pencahayaan yang sangat terang atau pengaturan kamera yang terlalu terang dapat menunjukkan garis melintang di bingkai akhir, tetapi itu akan menjadi kasus yang lebih tidak biasa.

Sebuah kasus di mana Anda mungkin akan ingin tekstur HDR adalah bahan memancarkan, terutama untuk lampu-lampu neon dan sumber cahaya yang sama. Tekstur akan muncul dengan nilainya diamputasi untuk muncul sebagai sumber cahaya terang dalam game, jadi dalam hal itu gambar 8-bit dapat dengan mudah menunjukkan garis banding.

Akhirnya, masih dapat berguna untuk bekerja pada presisi yang lebih tinggi (mis. Presisi 16-bit) jika memungkinkan saat mengambil dan membuat tekstur, hanya karena memberi Anda lebih banyak ruang kepala untuk memproses gambar tanpa menyebabkan masalah presisi. Misalnya, jika Anda perlu menyesuaikan level atau keseimbangan warna, Anda kehilangan sedikit presisi; yang dapat memperkenalkan banding (terutama jika Anda melakukannya beberapa kali) ketika mulai dari gambar sumber 8-bit. Sumber 16-bit akan lebih tahan terhadap masalah seperti itu. Namun, tekstur akhir yang digunakan dalam game mungkin masih akan dikompresi menjadi 8-bit.

Nathan Reed
sumber
combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final framewawasan yang sangat bagus. Tetapi kita dapat mencatat bahwa pengkodean gamma ada di sini tepatnya untuk mengurangi hal ini. Jika ia memiliki masalah mengapa tidak mencoba eksponen gamma yang unggul? yang akan menghambat penggunaan sampler perangkat keras sRGB sekalipun.
v.oddou
Terima kasih atas masukannya. Tetapi untuk memperjelas, saya sebagian besar tertarik dengan ini dari sudut pandang rendering foto yang realistis, dengan penyaji jejak sinar (seperti sinar mental, V-Ray, Arnold, dll.) Dengan simulasi cahaya penuh dan iluminasi global, ketimbang nyata mesin game-waktu.
Kristoffer Helander
@ KristofferHelander Bagus untuk tahu, tapi saya pikir apa yang saya tulis mungkin juga berlaku untuk perenderan offline. Tetapi saya akui bahwa saya tidak memiliki banyak pengalaman langsung di bidang itu.
Nathan Reed
@NathanReed Ya, Anda tentu saja membuat beberapa poin yang sangat bagus di sana :)
Kristoffer Helander
5

Saya ingin mengundang pembaca untuk membaca artikel ini tentang teknologi rasterisasi mesin Quake 2 yang dijelaskan secara terperinci , jika mereka punya waktu.

Jika TLDR, harap perhatikan gambar ini: masukkan deskripsi gambar di sini

Apa yang kami lihat adalah saluran Albedo , itu yang ingin Anda enkode dalam 16 bit jika saya memahami pertanyaan Anda dengan benar.
Saya tidak akan mengatakan " jika itu bisa dikodekan dalam 256 warna untuk permainan di masa lalu, mengapa kita membutuhkan 281474976710656 (itu 281 triliun) dalam permainan baru? " Bahkan jika saya ingin tetapi itu terdengar seperti orang pemarah pixar dari Naik. Lebih konstruktif, jika Anda perhatikan dalam gambar ini, semuanya berada pada level pencahayaan yang sama . Lebih khusus lagi, intensitas maksimum yang dimungkinkan menjaga saturasi yang diinginkan. (artinya dalam ruang HSV, V di maksimalkan)

Penekanannya adalah kuncinya, kita hampir tidak membutuhkan bit karena Albedo tidak memiliki kedalaman untuk menyandikan. Dinamis berasal dari naungan, masuk akal untuk bekerja di f32per komponen dalam shader, dan output untuk f16membuat target. Tapi menyimpan tekstur albedo di f16itu tidak hanya berlebihan, itu babi kinerja yang tidak dapat dibenarkan untuk bandwidth berharga kita.

v.oddou
sumber
Terima kasih atas masukannya. Tetapi untuk memperjelas, saya sebagian besar tertarik dengan ini dari sudut pandang rendering foto yang realistis, dengan penyaji jejak sinar (seperti sinar mental, V-Ray, Arnold, dll.) Dengan simulasi cahaya penuh dan iluminasi global, ketimbang nyata mesin game-waktu. Saya telah memperbarui posting asli saya.
Kristoffer Helander