Birçok ışık kaynağı ile verimli renderleme


10

Phong gölgelendirme kullanarak tek bir ışık kaynağı ile bir sahne oluşturmak için, parça malzemesinin ve ışık kaynağının ortam / dağınık / aynasal bileşenlerine dayanarak parça gölgelendiriciye geçirilen her parçanın nihai rengi hesaplanabilir.

Bu, her bir ışık kaynağını parçaya aşağıdaki gibi uygulama sonuçlarını bir araya getirerek birden fazla ışık kaynağına uyum sağlamak için kolayca genişletilebilir:

final_color = (0, 0, 0, 1)
for each light:
    final_color += apply_light(material, light)
final_color = clamp(final_color, (0,0,0,1), (1,1,1,1))

Bununla birlikte, çok sayıda ışık kaynağı ile bu süreç oldukça yavaştır; ile Nışıklar, bu yaklaşım bitti olmak gölgeleme Phòng için hesaplamalar gerektiren Nparçası başına defa.

Çok sayıda ışık kaynağı (yüzlerce, binlerce, vb.) İçeren sahneler oluşturmak için daha iyi bir yaklaşım var mı?

Yanıtlar:


15

Evet, ama bir paradigma değişimine ihtiyacınız var.

Alışkın olduğunuz şey ileri işleme olarak adlandırılır. Geometrinizi gönderiyorsunuz ve hemen gölgeleme geçişine geçiyorsunuz. Temel ileri oluşturma işleminde, her ışık için gölgelendiricinin içinde döngü yapabilir veya ışık başına bir geçiş gerçekleştirebilir ve sonucu birlikte karıştırabilirsiniz (ek karıştırma ile).

Ancak işler oldukça gelişti. Girer: Ertelenmiş İşleme

Şimdi, hepsini ayrıntılı olarak açıklayan birçok varyant, burada bir cevap için kabul edilenden daha fazla zaman alacaktır. Bu yüzden burada sadece Ertelenmiş gölgelemenin özünü tanımlayacağım, google'ı kullanarak kolayca bulabileceğiniz diğer birçok kaynak var, umarım bunu okuduktan sonra ihtiyacınız olanı bulmak için doğru anahtar kelimelere sahip olacaksınız.

Temel fikir, gölgeyi boru hattından sonra ertelemektir. İki ana adımınız var:

  1. Geometrinizi ve gölgeleme için gerekli tüm bilgileri birden çok oluşturma hedefine dönüştürün. Bu, tipik olarak temel bir uygulamada bir derinlik tamponuna, geometrinizin normallerini içeren bir tampona ve albedo rengine sahip olacağınız anlamına gelir. Yakında malzemelerin diğer bilgilerine ihtiyacınız olduğunu göreceksiniz (örneğin pürüzlülük, "metalik" faktör vb.).

Vikipedi'den gelen bu görüntü üç tampon gösterir (renk, derinlik ve normaller)

resim açıklamasını buraya girin

Yine, kullanılan tamponların miktarı, türü ve içeriği farklı projeler arasında oldukça değişkendir. GBuffers adında arabellek kümesini bulacaksınız.

  1. Bundan sonra gerçek aydınlatmayı uygulama zamanı. Her ışık için aydınlatma geçişi sırasında, ışığın türüne bağlı olarak bir ışık hacmi çizmek istiyorsunuz:
    • Yönlü ışık için tam ekran dörtlü oluşturursunuz.
    • Bir nokta ışığı için, yarıçapın nokta ışığınızın zayıflamasına bağlı olduğu bir küre oluşturursunuz.
    • Bir spot ışığı için, yine boyutlarınızın ışığınızın özelliklerine bağlı olduğu bir koni oluşturursunuz.

Bu geçişin piksel gölgelendiricisinde GBuffers'ınızı geçirir ve ışık ve gölgelendirmenizi içindeki bilgileri kullanarak gerçekleştirirsiniz. Bu şekilde, klasik ileri işleme ile karşılaştırıldığında, yalnızca ışıkların her birinden etkilenen pikselleri mantıklı bir hızlanmaya tabi tutarsınız.

Aynı zamanda çeşitli dezavantajları vardır, en önemlisi şeffaf nesnelerin işlenmesi ve daha yüksek bant genişliği ve video belleği tüketimi. Ama aynı zamanda malzemeler için çeşitli modelleri kullanmak daha zordur.

Diğer yan avantajlarınız var (işlem sonrası için çok fazla bilgi hazır olarak) ve ayrıca uygulanması oldukça kolaydır. Ama bu artık birçok ışık için en havalı şey değil.

Daha yeni teknikler, örneğin döşemeli oluşturma teknikleridir . Bunların ana fikri, sahneyi ekran döşemeleri "fayans" olarak alt bölümlere ayırmak ve her karoya onu etkileyen ışıkları atamaktır. Bu, hem ertelenmiş hem de ileri bir şekilde mevcuttur. Bu teknikler bir karoda çeşitli derinlik süreksizlikleriniz olduğunda bazı sorunlara yol açar, ancak genellikle klasik ertelenenlerden daha hızlıdır ve çeşitli sorunlarını çözer. Örneğin, avantajlar arasında, döşenmiş erteleme ile GBuffer'ları yanan parça başına bir kez ve aynı döşemedeki pikseller aynı ışıkları tutarlı bir şekilde işler.

Bu taraftaki diğer evrim ise, ekran alanı döşemeleri yerine, 3B boyutlu kümelere sahip olan karo esaslı yaklaşımlara kavramsal olarak benzeyen Kümelenmiş gölgelendirmedir . Bu yöntem derinlik süreksizlik problemini daha iyi ele alır ve genellikle döşenmiş yöntemlerden daha iyi performans gösterir.

ÖNEMLİ NOT: Ertelenmiş gölgelemenin temellerini açıkladım. Etrafta birden fazla varyasyon, optimizasyon ve iyileştirme var, bu yüzden basit bir sürümle denemenizi ve daha sonra yukarıda bahsettiğim gibi diğer teknikler üzerinde bazı araştırmalar yapmanızı tavsiye ediyorum.


1
İşte iki kaynak kodu kaynaklardır karo ve Kümelenmiş
RichieSams
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.