Voksel dünyasında ışık: Gerçek ışıklar mı, flood fill mi?
Bir oyuncu üssüne bir parıltı lambası koyuyor. Teknik olarak ne oluyor? Bu masum soru bizim için temel bir karar doğurdu; cevabı da “daha modern” çözümün her zaman daha iyi olmadığının güzel bir örneği.
Seçenek A: gerçek Unity ışıkları. Parlayan her blok bir nokta ışık kaynağı olur, motor her şeyi hesaplar. Harika görünür ama ölçeklenmez. Bir voksel dünyasında görüş alanında yüzlerce parlayan blok olabilir; bu kadar çok gerçek zamanlı nokta ışığı her GPU'yu terletir, tarayıcı sürümünde ise daha da çok.
Seçenek B: flood fill ışığı. Türün klasiği: ışık, her blok için kaynaktan yayılan ve her adımda azalan sayısal bir değerdir. Çok ucuz, istediğin kadar kaynak; ama sonuç düz görünür, çünkü ışığın yönü yoktur. Lambanın yanındaki duvar, altındaki yüzey kadar parlaktır.
Bizim seçimimiz: yönlü flood fill. Flood fill yaklaşımında kaldık ama ona yön bilgisi öğrettik: ışık hangi yönden geldiğini bilir ve yüzeyler buna göre farklı aydınlatılır. Sonuç mesh oluşturma sırasında parça meshine pişirilir; çalışma anında neredeyse hiçbir maliyeti yok, ama klasik blok ışığından belirgin biçimde daha üç boyutlu görünüyor.
Bundan çıkardığımız dersi o zamandan beri her yere taşıyoruz: önce türün asıl sorununun ne olduğunu sor (burada: çok sayıda kaynak, statik geometri), sonra teknolojiyi seç. Gerçek ışıklar bizde olmayan bir sorunu çözerdi; ve çözemeyeceğimiz bir sorun yaratırdı.
Yorumlar