Quiero intentar agregar sombras a un juego 3D XNA. He configurado un entorno de prueba con una luz y una cámara. Sin embargo, me encuentro con artefactos con mi enfoque.
Estoy usando el código de sombreador de http://pastebin.com/zXi0hmsU para representar el resultado final y http://pastebin.com/rY4Gcj9N para crear los mapas de sombras. El código es bastante sencillo e implica la producción del mapa de profundidad desde el punto de vista de la luz, luego proyectándolo en el espacio de la cámara y buscando oclusiones.
Sin embargo, desde la mayoría de los ángulos estoy obteniendo resultados bastante feos
La escena consta de algunos cubos simples (construidos a mano, mirando hacia afuera, la cara posterior está seleccionada), una luz (el mapa de sombras se muestra en la esquina superior izquierda, se ve bien) y una cámara.
Mi RenderTarget para los mapas de sombras se inicializa por
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;
Posteriormente, CreateShadowMap
se aplica el efecto, seguido del efecto LambertWithShadows. Finalmente, el mapa de sombras se dibuja usando a SpriteBatch
.
El resto del código consiste simplemente en proporcionar los valores correctos a los sombreadores. Si es necesario, puedo proporcionarlo bien.