Kami mencoba mengoptimalkan Pencahayaan dalam pengisian. Chip grafis terintegrasi sangat lambat dalam mengakses memori.
Ada dua Light Buffer: satu untuk Diffuse dan satu untuk Specular. Keduanya menggunakan format R11G11B10F. Apakah ada cara untuk mengemas dua buffer menjadi satu? Misalnya, menggunakan model warna Y'CbCr:
shader
color
optimisation
skif_engineer
sumber
sumber
Jawaban:
Anda mungkin ingin melihat The Compact YCoCg Framebuffer . Ini menggunakan buffer 2-channel untuk menyimpan luminance untuk setiap piksel dan dua komponen kroma masing-masing dalam setengah piksel, membentuk kotak-kotak. Ini juga menggunakan filter upampling tepi-sadar di ujung bingkai untuk merekonstruksi komponen kroma yang hilang dan mengkonversi kembali ke RGB.
Anda dapat memperluas ini ke buffer 3-saluran tunggal untuk menyimpan luminansi difus, luminer specular, dan chroma kotak-kotak (dengan asumsi berdasarkan diagram pada pertanyaan Anda bahwa cukup untuk menyimpan hanya sepasang nilai kroma).
Anda mungkin juga mempertimbangkan untuk menggunakan format R10G10B10A2 sebagai gantinya, kecuali Anda benar - benar membutuhkan rentang format floating-point. Ini jumlah bandwidth yang sama tetapi akan memberi Anda jauh lebih presisi (R11G11B10F hanya memberi Anda 5-6 bit mantissa per komponen). Plus, Anda dapat menggunakan 2 bit alpha untuk menyimpan beberapa flag, seperti flag diffuse / specular Anda.
sumber
Jika Anda setuju dengan specular yang hanya berwarna putih, Anda dapat memasukkan difus dan specular ke dalam RGBA.
Sepertinya itulah yang dilakukan unity untuk rendering yang ditangguhkannya.
Seseorang menemukan masalah ini: http://forum.unity3d.com/threads/specular-color-based-on-light-color.134412/
Dokumen menyebutkannya: https://docs.unity3d.com/Manual/RenderTech-DeferredLighting.html
sumber