Encode dua buffer R11G11B10F menjadi satu menggunakan Y'CbCr?

8

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

skif_engineer
sumber
Ini untuk pipa penerangan yang ditangguhkan, kan? Apakah Anda menggunakan implementasi ubin untuk mengurangi bandwidth? Juga, sudahkah Anda mempertimbangkan ubin naungan yang ditangguhkan atau ubin ke depan sebagai gantinya?
JarkkoL

Jawaban:

5

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.

Nathan Reed
sumber
2

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

Alan Wolfe
sumber
terima kasih, masih keduanya Diffuse dan Specular harus diwarnai
skif_engineer