Gölge haritası yapıları


16

3D XNA oyununa gölge eklemeyi denemek istiyorum. Bir ışık ve bir kamera ile bazı test ortamları kurdum. Ancak, yaklaşımımla eserler ile karşılaşıyorum.

Ben gelen gölgelendirici kodu kullanıyorum http://pastebin.com/zXi0hmsU nihai sonucu işlemek için ve http://pastebin.com/rY4Gcj9N gölge haritalar oluşturmak için. Kod oldukça basittir ve ışık haritasından derinlik haritasının üretimini, daha sonra kamera alanına yansıtmasını ve oklüzyonları kontrol etmeyi içerir.

Ancak, çoğu açıdan oldukça çirkin sonuçlar alıyorumbu ekran görüntüsünde olduğu gibi

Sahne, bazı basit küplerden (elle inşa edilmiş, dışa dönük, arka yüz culled), bir ışıktan (sol üst köşede gösterilen gölge haritası - iyi görünüyor) ve bir kameradan oluşur.

Gölge haritaları için RenderTarget'ım

int shadowMapSize = 512;
RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize,
    shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat,
    DepthFormat.Depth24Stencil8);
GraphicsDevice.SetRenderTarget(shadowMap);
GraphicsDevice.Clear(Color.White);
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

Daha sonra CreateShadowMapefekt uygulanır, ardından LambertWithShadows etkisi gelir. Son olarak, gölge haritası a SpriteBatch.

Kodun geri kalanı gölgelendiricilere doğru değerleri sağlamaktan ibarettir. Gerekirse, ben de sağlayabilirim.

Yanıtlar:


19

Bu gölge harita akne denilen tipik bir sorundur . Gölge haritasının yansıtılan pikselinin (derinlik) ekrandaki pikselden daha büyük olması nedeniyle oluşur (denklem derinliği doğru gösteremez).

resim açıklamasını buraya girin

Bunun için birçok çözüm var. İlk en kolay önyargı (kodunuzda görüyorum, bu yüzden sorun değil). Ve ikinci kolay çözüm, daha yüksek çözünürlükte gölge haritasıdır, mevcut hw'de 2048x2048 çözünürlükte gölge haritalarına sahip olmak normalden daha fazladır. (EDIT: bu doğru değil, ben film render üzerinde çalışırken yazdım. Oyun geliştirmede, gölge harita mümkün olduğunca küçük tutmak istiyorum)

Daha ileri teknikleri incelemek için bazı kaynaklar.


Düzenle:


İşte bu konuda daha fazla malzeme var, eğer ilgileniyorsanız ben de paylaşacağım.
Notabene

Büyük çözünürlüklerle ilgili temel sorun, son oyunda yönlendirilmeyen yaklaşık 3-4 ışığa sahip olduğum => Orada kübik gölge haritaları kullanmak zorunda kalacağım, bu da 24 gölge haritasına neden oluyor. Ek materyalleriniz varsa, bunu benimle paylaşma çabanızı gerçekten takdir ediyorum :-)
Etan

En azından bu önemli olursa ilgileniyorum :)
James

1
@Etan. Evet, çok yönlü ışıklar gölgelerden bahsediyorsa gerçek acıdır. (bu konuda bir şeyler biliyorum :) gamedev.stackexchange.com/questions/6203/… ). Çift paraboloid haritalar kullanmaya çalışın. Ya da cubemaps'i seviyorsanız, her yüz / render için frustum-camera_frustum kesişme ayıklaması yaparak biraz yer açmaya çalışın. Her zaman için (özellikle dış mekanlarda) her zaman gölgeye ihtiyacınız olmayacak
Notabene

1
@Etan @James Senin için daha fazla şey ekledim. Bu konuyla ilgileniyorsanız her ikisi de okumaya değer.
Notabene
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.