Pencahayaan cepat dengan banyak lampu

10

Bagaimana saya bisa menerapkan pencahayaan cepat dengan banyak lampu?

Saya tidak ingin menahan pemain, ia dapat menempatkan jumlah yang tidak terbatas dan mungkin tumpang tindih (titik) lampu ke level.

Masalahnya adalah bahwa shader yang mengandung loop dinamis yang akan diperlukan untuk menghitung pencahayaan cenderung sangat lambat.

Saya punya ide bahwa jika mungkin pada saat kompilasi untuk mengkompilasi shader n kali di mana n adalah jumlah lampu. Jika angka n diketahui pada saat bersamaan, loop dapat dibuka secara otomatis. Apakah ini mungkin untuk menghasilkan versi n dari shader yang sama hanya dengan jumlah lampu yang berbeda?

Saat runtime saya kemudian dapat memutuskan shader mana yang akan digunakan untuk bagian mana dari level.

codymanix
sumber
Jika lampu ditambahkan secara dinamis oleh pemain, bagaimana mungkin shader "compiletime" menjadi jawaban yang benar?
Seth Battin
Seperti yang saya tulis, kompiler dapat menghasilkan shader untuk 1,2,3, .. lampu dan saat runtime saya bisa memutuskan mana yang akan digunakan untuk bagian mana dari level
codymanix
kompilasi shader waktu perlu tahu di mana lampu akan ditempatkan, setiap dinamika lampu akan merusaknya
ratchet freak
hanya jumlah lampu yang harus dinamis. posisi akan diberikan sebagai parameter.
codymanix
1
Sepertinya Anda punya jawaban. Anda tahu jumlah lampu maksimum dan kisaran posisi yang memungkinkan.
ashes999

Jawaban:

8

Saya percaya apa yang Anda cari disebut Deferred Rendering. Ini adalah teknik rendering yang berskala sangat baik dengan banyak lampu, sehingga dapat digunakan untuk pencahayaan tidak langsung yang dinamis. Itu berarti ribuan lampu di layar.

Ini pada dasarnya adalah teknik di mana Anda pertama-tama merender semua data geometri Anda (posisi, normal, kedalaman) menjadi penyangga piksel menengah (disebut G-Buffer). Kemudian dalam pass kedua Anda membuat bentuk cahaya beserta parameternya. Shader pass kedua ini mengambil informasi dari G-Buffer, menerapkan perhitungan ringan, lalu memadukannya ke dalam gambar akhir.

Anda dapat menemukan detail implementasi di sini

akaltar
sumber