Voglio provare ad aggiungere ombre a un gioco XNA 3D. Ho creato un ambiente di test con una luce e una videocamera. Tuttavia, sto incontrando artefatti con il mio approccio.
Sto usando il codice shader da http://pastebin.com/zXi0hmsU per rendere il risultato finale e http://pastebin.com/rY4Gcj9N per creare le mappe d'ombra. Il codice è piuttosto semplice e prevede la produzione della mappa di profondità dal punto di vista della luce, quindi la proietta nello spazio della telecamera e verifica la presenza di occlusioni.
Tuttavia, dalla maggior parte delle angolazioni sto ottenendo risultati piuttosto brutti
La scena è composta da alcuni cubi semplici (costruiti a mano, rivolti verso l'esterno, la faccia posteriore è abbattuta), una luce (la mappa delle ombre mostrata nell'angolo in alto a sinistra - sembra a posto) e una telecamera.
My RenderTarget per le mappe shadow è inizializzato da
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;
Successivamente, CreateShadowMap
viene applicato l' effetto, seguito dall'effetto LambertWithShadows. Infine, la mappa ombra viene disegnata usando a SpriteBatch
.
Il resto del codice consiste semplicemente nel fornire i valori corretti agli shader. Se necessario, posso fornirlo bene.