Saya mulai dengan GLSL dan saya telah menerapkan shading yang ditangguhkan sederhana yang menghasilkan G-buffer dengan posisi, normal dan Albedo.
Saya juga menulis shader titik cahaya sederhana.
Sekarang saya menggambar bola untuk titik cahaya dan output masuk ke buffer pencahayaan.
Masalahnya adalah, bagaimana cara menggabungkan hasil buffer pencahayaan saat menggambar beberapa lampu?
Misalnya ketika saya menggambar lampu kedua ke lightbuffer menggunakan point light shader, bagaimana cara menambahkan lampu pertama ke lampu kedua di penyangga pencahayaan. Maksud saya, Anda tidak dapat membaca dan menulis ke buffer output yang sama?
opengl
shaders
glsl
deferred-rendering
JBeurer
sumber
sumber
Untuk penyaji tangguhan saya, saya menggabungkan semua lampu menjadi satu target render cahaya menggunakan informasi dari buffer-g dan kemudian mencicipi target render untuk intensitas cahaya sambil membuat gambar backbuffer akhir saya.
Jadi pada dasarnya, saya menjalankan semua geometri permainan saya melalui kartu geometri untuk membangun g-buffer. Dari sana saya memberi makan buffer-g ke shader pass cahaya saya. Setiap lampu dijalankan melalui celah menggunakan quad layar penuh. Dengan cara ini pixel shader saya dapat menghitung intensitas cahaya untuk semua permukaan yang terlihat dari buffer-g dan kemudian menambahkannya ke target render cahaya. Anda cukup menambahkan intensitas cahaya untuk setiap cahaya ke buffer cahaya tetapi pastikan Anda menjepit intensitas dari 0 hingga 1.
Yang perlu Anda lakukan untuk menangani berbagai jenis lampu (titik, sorotan, paralel) adalah membuat cahaya melintas lebih kuat dengan menggunakan penyangga konstan untuk menentukan prosedur pencahayaan mana yang harus dijalankan.
sumber
Kemungkinan ada jawaban yang lebih baik dari ini, tetapi saya tahu, jika dalam shader Anda mengulangi kode yang diperlukan untuk melakukan cahaya kedua, Anda kemudian dapat memproses dua lampu pada satu objek, bukan satu. Itu memang membutuhkan droubling banyak kode untuk lampu kedua dan jahitannya sedikit berlebihan, tapi saya tahu itu berfungsi. Namun, saya percaya, karena seseorang mudah-mudahan akan menunjukkan untuk Anda, mungkin ada solusi yang lebih elegan.
sumber