Ertelenmiş oluşturma işlemindeki gölgeler


12

Ertelenmiş oluşturma hakkında bazı materyaller okudum ve sanırım bunun özünü alıyorum. Ama anlamadığım şey gölgeleri nasıl başardığı. G-tamponu, bildiğim kadarıyla, her ışık için bir gölge haritası oluşturmayı içermez, bu yüzden aydınlatma geçişinin her pikselin tıkalı olup olmadığının nasıl farkında olduğuyla ilgili kafam karıştı. Sonuçta, kameranın perspektifinden görülebilen belirli bir piksel, herhangi bir ışığın perspektifinden gerçekte görünmeyebilir ve oklüzyon geometrisi kameranın perspektifinden görünmeyebilir ve bu nedenle G tamponuna yazılan hiçbir şey olmayabilir .

Gölge haritalarını oluşturmaya başlarsanız, ileri işleme ile hemen hemen aynı görünür - gölge ışıklarını oluşturmak için her ışığın sahnedeki tüm geometrisini oluşturursunuz.

Peki, ertelenmiş oluşturma, ileri oluşturmaya eşdeğer gölgeleri nasıl başarır?

Yanıtlar:


14

Ertelenmiş gölgelendirme, gölgeler için özel bir şey yapmaz. Gölge haritalarını normal şekilde oluşturmanız ve ardından her ışığı doku olarak bağlı uygun gölge haritasıyla oluşturmanız gerekir.

Ileri işlemeden daha iyidir, çünkü aydınlatmayı uygulamak için sahneyi ana görünümde yeniden çizmeniz gerekmez. Gölge haritasını çizmek, ana görünümde daha fazla geçiş yapmaktan çok daha ucuzdur, çünkü herhangi bir piksel gölgelemesi yapmanıza gerek yoktur ve gölge haritaları genellikle daha az sahne içerir (çok daha fazla şey çıkarabilirsiniz).

İnsanlar bazen tipik olarak ana yön ışığı olan bir ışık için "ertelenmiş gölgeler" yaparlar. Bunu yapmanın başlıca nedeni basamaklı gölge haritaları veya aynı ışık için birden fazla gölge haritası kullanan başka bir yaklaşım kullanmaktır. G tamponundaki bir kanalı bir gölge maskesi (yanan beyaz, gölgeli yerde karanlık) için ayırabilir ve tüm basamaklı gölge haritalarını bu G tamponu kanalına uygulayabilirsiniz; o zaman ışığın gölgelendiricisi sadece gölge maskesini okur ve açık renge çarpar. Gölgeleri gölgelemeden ayırdığı için bu güzel, ama yine de aynı gölge haritalarını çiziyorsunuz.


1
Eğer varsa , son derece zeki sen inline gölge haritası oluşturulmasına GBuffer oluşturulması sırasında bir geometri shader kullanarak deneyebilirsiniz (küp gibi DX10 örnek vermez map). Yapılıp yapılmadığından, mümkün olup olmadığından veya sonunda daha yavaş olacağından emin değilim - ancak gölge haritaların oluşturulmasını ertelenmiş gölgelemeye daha yakın veya dininize bağlı olarak tanıma getirecektir.
Jonathan Dickinson

6

Gölge haritası nedir? Gölge haritası, dokuları basit bir soruya cevap veren bir dokudır: ışıktan, texelin temsil ettiği doğrultuda, hangi mesafede ışık tıkanır? Doku koordinatları, belirli gölge haritalama algoritmasına bağlı olarak çeşitli projektif doku araçları kullanılarak üretilir.

Projektif tekstüre basitçe bir nesneyi doku alanına dönüştürmenin bir yoludur (ve evet, bunun geriye doğru geldiğini biliyorum. Ama işte böyle çalışır). Gölge eşleme algoritmaları birkaç farklı türde dönüşüm kullanır. Ama sonuçta, bunlar sadece bir uzaydan diğerine dönüşümlerdir.

Gölge haritasını oluştururken, geometrinizin köşelerini alırsınız ve bunları standart bir oluşturma hattı üzerinden dönüştürürsünüz. Ancak kamera ve projeksiyon matrisleri, görünüm konumu ve yönü için değil, ışık konumunuz ve yönünüz için tasarlanmıştır.

Bir gölge eşlemeyle ileriye doğru görüntü oluştururken, nesneleri normal olarak oluşturur, köşeleri görüntü kamera alanına ve görüntüleme projeksiyon matrisine dönüştürürsünüz. Bununla birlikte, köşeleri ışık kameranızdan ve projeksiyon matrislerinizden dönüştürerek, köşe verisi olarak parça gölgelendiricisine geçirirsiniz. Bunları, gölge dokusuna erişmek için projektif doku ile kullanır.

İşte önemli olan nokta. Projektif doku erişimi, doku üzerinde eriştiği konumun yüzeydeki nokta (parça gölgelendiricide oluşturduğunuz nokta) ve ışık arasındaki yönü temsil edeceği şekilde tasarlanmıştır. Bu nedenle, yaratılan parça için oklüzyonun meydana geldiği derinliği temsil eden texeli getirir.

Ancak bu boru hattı hakkında özel bir şey yok . Tepe konumlarını gölge dokusuna dönüştürmeniz ve bunları parça gölgelendiricisine geçirmeniz gerekmez. Dünya-uzay tepe konumlarını parça gölgelendiriciye geçirebilir ve daha sonra parça gölgelendiricinin onları gölge dokusunun projektif alanına dönüştürmesini sağlayabilirsiniz. Kesinlikle aynı doku koordinatlarını bulacağınız için çok fazla performans atıyorsunuz. Ancak matematiksel olarak uygulanabilir.

Gerçekten de, kamera boşluğu tepe konumlarını parça gölgelendiriciye geçirebilirsiniz. Daha sonra onları dünyaya, sonra ışık kamera alanına, sonra da projektif gölge doku alanına dönüştürebilir. Tüm bu dönüşümü tek bir matrise koyabilirsiniz (gölge projeksiyon algoritmanıza bağlı olarak). Yine, bu size daha önce sahip olduklarınızı tam olarak verir, bu nedenle ileri işleme sırasında bunu yapmak için bir neden yoktur.

Fakat ertelendi oluşturma işleminde, zaten kamera alanı tepe konumlarına sahip olursunuz . Yapmanız gerekiyor, aksi takdirde aydınlatma yapamazsınız. Bir ara belleğe yazarak çok fazla bellek ve bant genişliği harcadınız ya da akıllısınız ve derinlik arabelleğini ve çeşitli matematiği kullanarak yeniden hesapladınız (ki buraya girmeyeceğim, ancak çevrimiçi olarak ele alınacak).

Her iki durumda da kamera alanı konumlarını görüntüleyebilirsiniz. Ve yukarıda belirtildiği gibi, onları kamera kamera alanından gölge projektif doku uzayına dönüştürmek için bir matris uygulayabiliriz. Yani ... bunu yap. Ardından gölge haritanıza erişin.

Sorun çözüldü.


Ertelenmiş oluşturmada ışık başına geometriyi dışlamak mümkün müdür (optimizasyon uğruna)?
Samaursa

@Samaursa: "Işık başına geometri hariç tut" ne? Gölge haritasına girmekten mi? Aydınlanmaktan mı?
Nicol Bolas

Bununla ilgili soruyu cevapladığını görüyorum, teşekkürler. Diğerleri için, soruyu / cevabı takip etmek istiyorlarsa: gamedev.stackexchange.com/q/178755/2287
Samaursa
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.