He estado jugando con el mapeo de sombras en OpenGL usando texturas de profundidad. La textura de profundidad es fina y puedo mapearla en la escena, pero tengo algunos artefactos extraños en la parte posterior del objeto:
Mi pregunta es qué está causando esto y cómo puedo solucionarlo.
El sombreador de fragmentos que estoy usando es bastante sencillo (eliminé el color por simplicidad en caso de que se pregunte por qué no hay azul aquí):
in vec4 vShadowCoord;
uniform sampler2DShadow shadowMap;
out vec4 fragColor;
void main()
{
float bias = 0.005;
float visibility = 1.0;
if (texture(shadowMap, vec3(vShadowCoord.xy, vShadowCoord.z / vShadowCoord.w)) < (vShadowCoord.z - bias) / vShadowCoord.w)
visibility = 0.25;
fragColor = vec4(visibility);
}
Editar: según lo solicitado, captura de pantalla de ejemplo de trabajo mínimo que usa solo el código anterior (sin color).
opengl
glsl
shadow-mapping
shadow
Blarglenarf
fuente
fuente
Respuestas:
Este problema se parece a los artefactos estándar del acné del mapa de sombras. Además, la ecuación de iluminación de tu está incompleta o incorrecta. La luz no debe influir en los rostros con normales mirando hacia otro lado. Esto también significa que con una ecuación adecuada, el lado "oscuro" de la esfera no debería tener artefactos de acné.
Hay tres fuentes de artefactos para el acné:
Para resumir, un frustum ajustado con algunas cascadas y algunos ajustes de sesgo es suficiente para que el caso general funcione (luz direccional). Comience a ajustar deshabilitando el filtro de sombra y ajuste para filtrar solo cuando los mapas de sombra básicos sean lo suficientemente robustos.
Además del sesgo de profundidad constante (que usa actualmente) también debe agregar el sesgo de profundidad de pendiente y el sesgo de profundidad de pendiente máxima. Ambos se pueden implementar como estado de representación o como código de sombreador durante la representación de mapas de sombras. El sesgo de profundidad de pendiente es simplemente un valor de sesgo mágico escalado por punto (normal, lightDir).
Hay algunos métodos interesantes adicionales y la mayoría de ellos se implementan en la excelente demostración: Matt Pettineo - "Una muestra de técnicas de sombra" .
fuente