Artefactos de mapeo de sombras

8

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:

Esfera proyectando una sombra, con artefactos en la parte trasera

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).

Misma esfera, menos color

Blarglenarf
fuente
1
¿Puede confirmar si el código que se muestra (con el azul eliminado) también causa los artefactos? Si ha reducido el código, mostrar la imagen del código restringido ayudará a excluir cualquier detalle irrelevante y a resaltar el problema.
trichoplax
Sí, pensé que tomaría una captura de pantalla con color allí, de lo contrario se
verá
Puedo entender eso, pero dado que es la fealdad con la que está pidiendo ayuda, podría tener una mejor oportunidad de que alguien vea el problema si incluye la captura de pantalla que también coincide con el código.
trichoplax
1
Lo suficientemente justo. He agregado una captura de pantalla adicional.
Blarglenarf
¿Has intentado jugar un poco más con el sesgo?
cifz

Respuestas:

11

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é:

  • La primera fuente de acné es la precisión del mapa de sombras. Asegúrese de que los planos cercanos y lejanos de la sombra que proyectan la luz estén lo más ajustados posible. Todos los objetos antes del plano cercano se pueden pancarcar, ya que su profundidad exacta no es importante.
  • La segunda fuente de acné es la resolución del mapa de sombras. Para una luz direccional, debe hacer mapas de sombras en cascada con al menos 3 1024x1012 cascadas para ~ 100-200m de distancia de sombra. Es difícil cubrir una distancia de sombra similar con un mapa de sombra con proyección uniforme.
  • La tercera fuente de acné es un filtro de mapa de sombra amplio como PCF, ya que el uso de un solo valor de comparación de profundidad de profundidad en un núcleo ancho es insuficiente. Hay muchos métodos para solucionarlo, pero ninguno de ellos es robusto.

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" .

  • Voltear el sacrificio durante la representación del mapa de sombras (cambia el acné por el desplazamiento de Peter).
  • El mapeo de sombras de desplazamiento normal hace maravillas por problemas de sesgo, pero requiere tener vértices normales durante el sombreado.
  • Los métodos basados ​​en la variación (ESM, VSM, EVSM) eliminan completamente los problemas de sesgo, pero tienen otros inconvenientes (fugas leves y / o problemas de rendimiento).
Krzysztof Narkowicz
fuente