Bir sahnede birçok ışığı kullanın (gölgelendiricilerle)


9

Bir sahnede birçok ışığın nasıl ele alınacağını merak ediyorum. Bir rol oynama oyununda çok büyük bir harita verildiğinde, zindanlarla (oradaki ışıklarla) vb. Ama benim sorum fazlasıdır: Nasıl değil birçok ışıkları işlemek. Sadece sahneyi etkileyen ışıkların oluşturulması arzu edilir, ancak bunu arşivlemek için bir teknik / algoritma bilmiyorum. Hiç kimse harita üzerinde bir yer olduğu için 500 nokta ışığı yapmak istemez ve hatta gerçekleştiremez. Ancak ışıktan oyuncuya düz bir çizgi çekilemez ve arada bir şey olup olmadığını test edemez. Mesafe de iyi bir gösterge gibi görünmüyor. (Güneş ışığı?)

tl; dr: Hangi ışıkların sahneyi sadece render etmek için etkilediğini nasıl anlayabilirim?


OpenGL mi yoksa DirectX mi?
kravemir

6
aslında, hepsi için gölge istemediğiniz sürece, ertelenmiş aydınlatma ile 500 ışık oldukça mümkün olacaktır;)

Örneğin nokta ve koni ligleri için oklüzyon ayıklama kullanabilirsiniz - nokta ışık sadece bir küredir. Yönlü ışık her
yerden

4
@Darkwings Temelde burada blubb'ın ne istediğini açıklıyorsunuz. Nasıl yürüyeceğim? Bence buradaki çözüm sadece yürümek! (Benim için çalıştı.) ;-) "bu kaynağın sizin görüşünüzdeki bir şeyi aydınlatıp yakmadığını bilmeniz gerekir." <- Tam olarak istediği bu, bunu nasıl yapabileceğini bilmek istiyor. ^^ Her ne kadar Kikaimaru'dan koni / küre şey muhtemelen yararlıdır.
cooky451

1
OP için o sadece mesafe bahsetti çünkü görünümü frustum kontrol etmek belli değildi. Her ışığın bunu belirlemek için bazı parametreleri olacaktır. Yön ışıkları kullanılırsa, her yere ulaşacaklar, spot ışıkların bir hedef bölgesi olacak (böylece vektör düzlemi kesişimi ile çözülebilir) vb. Sen giren ışığı dizileri üzerinde en düşünmek gerekir İstediğiniz gerçekten gerçekten birbirine yakın ışıkları bir sürü varsa (gölge döküm için) yaklaşan için daha iyi olur göz önüne alındığında, sahneyi etkileyecek. IE: Antika bir avize üzerinde 100 mum tek bir ışık olarak ele alınabilir.
Darkwings

Yanıtlar:


5

Sınırlayıcı hacimlerden bile daha basit;

Her ışığa bir yarıçap atayın. Sahnenizi oluşturmaya gelince, sahne nesnelerinizle her ışık arasındaki mesafenin ışığın yarıçapından daha az olup olmadığını kontrol edin. Eğer öyleyse, ışığı kullanın, yoksa atlayın.

Performansın ne kadar önemli olduğuna bağlı olarak sadece daha küçük bir bölüm:

Bununla bir tür geniş faz kontrolü de yapabilirsiniz. Sadece tutamaçlarınızı ışıklarınıza ızgara hücresi bazında depolayan bir boşluk ızgarası tanımlayın, ardından yalnızca sahne nesnelerinizin maksimum yarıçapı içindeki hücrelerdeki ışıklarda mesafe kontrolünü gerçekleştirin.


5
+1 - Şüpheli bir sınırlayıcı küre gibi geliyor;)
Gyan aka Gary Buyn

Biraz geç ... her neyse, bu tam olarak sınırlayıcı bir küre. Bu yöntemi kullanarak, hala duvarlar vb. Tarafından tamamen gizlenmiş olan ve dolayısıyla sahne ile ilgili olmayan ışıkları işleyeceksiniz. Ayrıca, her ışık her yöne gitmez.
Darkwings

5

Düşünebildiğim en basit yol (dürüst olalım, düşündüğüm tek yol) her ışığa sınırlayıcı bir hacim vermektir . Sınırlayıcı hacim görünüm frustumuyla (veya görünüm frustumunun sınırlayıcı hacmi) kesişiyorsa, ışığı uygulayın.

Görünür nesneleri etkilemese bile uygulanan ışıklar olabilir, ancak basit ve hızlıdır. Sahne grafiğinizin akıllıca düzenlenmesi, birkaç kavşak kontrolünün ışıklarınızın çoğunu atlattığı anlamına gelebilir (tıpkı nesne ayıklaması için yapılanlar gibi).

Güneş gibi bir şeyin sınırlayıcı hacmi olmayabilir (onu her zaman uygulamak gerekir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.