Tangani banyak lampu dalam sebuah adegan (dengan shader)

9

Saya ingin tahu tentang cara menangani banyak lampu dalam sebuah adegan. Diberi peta yang sangat besar dalam permainan peran, dengan ruang bawah tanah (dengan lampu di sana) dll. Saya tahu tentang pencahayaan yang ditangguhkan, tetapi itu hanya menjawab bagaimana membuat banyak cahaya. Tetapi pertanyaan saya lebih: Bagaimana tidak membuat banyak lampu. Jelas diinginkan untuk hanya membuat lampu yang mempengaruhi pemandangan, tapi saya tidak tahu teknik / algoritma untuk mengarsipkan ini. Tidak ada yang mau atau bahkan mampu membuat 500 titik lampu, hanya karena ada di suatu tempat di peta. Tapi seseorang tidak bisa hanya mengambil garis lurus dari cahaya ke pemain dan menguji apakah ada sesuatu di antaranya. Jaraknya juga sepertinya bukan indikator yang bagus. (Sinar matahari?)

tl; dr: Bagaimana saya bisa mengetahui lampu mana yang memengaruhi pemandangan untuk hanya membuatnya?

blubb
sumber
OpenGL atau DirectX?
kravemir
6
sebenarnya, 500 lampu akan sangat mungkin dengan pencahayaan yang ditangguhkan, selama Anda tidak ingin bayangan untuk semuanya;)
Sebagai contoh untuk titik dan kerucut ligts Anda dapat menggunakan pemusnahan titik - cahaya hanya bola. Cahaya
terarah
4
@Darkwings Anda pada dasarnya menggambarkan di sini apa yang diminta blubb. Bagaimana saya berjalan? Baiklah, saya pikir solusinya di sini adalah berjalan saja! (Bekerja untuk saya.) ;-) "Anda perlu tahu apakah sumber itu menerangi sesuatu dalam pandangan Anda frustrasi." <- Itulah persis apa yang ia meminta, ia ingin tahu bagaimana dia bisa melakukan itu. ^^ Meskipun hal kerucut / bola dari Kikaimaru mungkin membantu.
cooky451
1
Untuk OP, tidak jelas untuk memeriksa tampilan frustum karena dia hanya menyebutkan jarak. Setiap lampu akan memiliki beberapa parameter untuk menentukan itu. Jika lampu arah digunakan, mereka akan mencapai di mana-mana, lampu sorot akan memiliki zona target (sehingga bisa diselesaikan dengan persimpangan bidang vektor) dan seterusnya. Anda harus lebih memikirkan garis-garis yang ingin Anda pengaruhi oleh adegan, mengingat jika Anda benar-benar memiliki banyak lampu yang benar-benar dekat satu sama lain, Anda akan lebih baik mendekati (untuk pengecoran bayangan). IE: 100 lilin pada lampu gantung antik dapat ditangani sebagai cahaya tunggal.
Darkwings

Jawaban:

5

Bahkan lebih sederhana dari volume yang diikat;

Tetapkan radius untuk setiap cahaya. Ketika merender adegan Anda, cukup periksa untuk melihat apakah jarak antara objek adegan Anda dan setiap cahaya kurang dari jari-jari cahaya. Jika demikian, gunakan lampu, lewati saja.

Hanya sebagian kecil yang lebih rumit, tergantung pada seberapa pentingkah kinerja:

Anda dapat melakukan semacam pemeriksaan fase luas dengan ini juga. Cukup tentukan kisi spasial yang menyimpan gagang pada lampu Anda berdasarkan sel kisi, maka hanya lakukan pemeriksaan jarak pada lampu yang ada dalam sel dalam radius maksimal objek pemandangan Anda.

Busa
sumber
5
+1 - Terdengar curiga seperti bola pembatas;)
Gyan aka Gary Buyn
Agak terlambat ... pokoknya, itu bola yang membatasi. Dengan menggunakan metode itu Anda masih akan membuat lampu yang sepenuhnya dikaburkan oleh dinding dll. Dan karenanya tidak relevan untuk adegan itu. Juga, tidak setiap cahaya masuk ke segala arah.
Darkwings
5

Cara paling sederhana yang dapat saya pikirkan (mari kita jujur, satu-satunya cara saya memikirkan) adalah untuk memberikan masing-masing cahaya volume yang mengikat . Jika volume pembatas berpotongan dengan view frustum (atau volume pembatas dari frustum tampilan), terapkan lampu.

Mungkin masih ada lampu yang diterapkan meskipun tidak mempengaruhi benda yang terlihat tetapi sederhana dan cepat. Pengaturan cerdas grafik adegan Anda dapat berarti bahwa hanya beberapa persimpangan memeriksa pengambilan sebagian besar lampu Anda (seperti apa yang dilakukan untuk pemusnahan objek).

Sesuatu seperti matahari tidak dapat memiliki volume pembatas (untuk menunjukkan itu harus selalu diterapkan).

Gyan alias Gary Buyn
sumber