Pertimbangkan pencahayaan yang ditangguhkan. Singkatnya, pencahayaan yang ditangguhkan adalah teknik yang menggunakan versi pengurangan bayangan yang ditangguhkan untuk menghitung peta cahaya ruang layar. Dalam lintasan kedua, geometri ditampilkan kembali menggunakan peta cahaya screenspace sebagai informasi pencahayaan.
Teknik ini digunakan untuk mengurangi ukuran G-Buffer, karena dibutuhkan lebih sedikit atribut. Ini juga memberi Anda keuntungan, bahwa G-Buffer dan lightmap screenspace dapat memiliki resolusi lebih rendah daripada layar.
Saya telah menerapkan renderer berbasis GLES 2.0 yang ketat (meskipun bersifat eksperimental), dan saya berhasil merebus G-Buffer menjadi satu tekstur RGBA (ya, saya menggunakan tekstur2D alih-alih renderbuffer). Itu berisi ruang layar peta normal + buffer kedalaman di saluran alpha (yang dikompresi menggunakan logaritma, sejauh yang saya ingat).
Atribut posisi (disebut dunia di sini) dapat dihitung selama lintasan penerangan menggunakan fakta, bahwa dalam proyeksi perspektif, .xy dibagi dengan .z , sehingga:
x yfr u s t u m= x yw o r l d/ zw o r l d
Saya memperkirakan atribut posisi xy dengan melakukan:
x yw o r l d= x yfr u s t u m∗ zw o r l d
Catatan: Saya harus melakukan penyesuaian lebih lanjut tergantung pada pengaturan matriks proyeksi.
Juga diperhatikan adalah, bahwa aku mampu menghilangkan .z komponen dari vektor normal, karena saya bisa merekonstruksi .z dari .xy sejak vektor normal dinormalisasi sehingga:
x2+ y2+ z2----------√= 1x2+ y2+ z2= 1z2= 1 - ( x2+ y2)z= 1 - ( x2+ y2)-----------√
Dengan menggunakan teknik ini, saya dapat membebaskan saluran lain di RGBA G-Buffer saya dan menggunakannya untuk menyimpan ruang layar peta-spekuler (atau kilau, jika Anda mau).