opengl-es 3d opengl-es-2.0 shadow-mapping

opengl es - Mapeo de sombras: artefactos en paredes delgadas ortogonales a la luz



opengl-es 3d (1)

El problema parece ser que eres

  1. Escogiendo las caras frontales
  2. Mirando a la cara posterior
  3. No quitar la luz de la cara posterior porque en realidad no está iluminada por lo normal, o hay algo de inexactitud en el cálculo
  4. Probablemente no agregue un poco de épsilon

(1) y (2) significa que habrá una lucha Z entre el mapa de sombras y las caras posteriores.

Además, la resolución del mapa de sombras no te ayudará, solo mira la pared en el mapa de sombras, tiene un píxel de grosor.

Recomendaciones:

  1. Epsilons. Asegúrate de que Z> lightZ + epsilon
  2. Epsilons. Asegúrese de que la pared esté orientada hacia la luz (punto de lo normal> épsilon) para asegurarse de que la pared esté a la sombra si es casi ortogonal

Tengo un problema con las caras posteriores (a la luz) y los mapas de sombra que parece que no puedo superar. Todavía estoy en las etapas relativamente tempranas de optimizar mi motor, sin embargo, parece que no puedo llegar allí, ya que, incluso con todo lo que se ha ajustado a la mano para esta pieza de geometría, aún parece basura.

Lo que es es una pared delgada que está "curvada" a través de aproximadamente 5 trozos diferentes de pared. Cuando creo mi mapa de profundidad, estoy seleccionando caras frontales (a la luz). Esto definitivamente ayuda, pero las caras frontales en el otro lado de la pared son lo que parece estar causando la lucha z / el sombreado proyectivo.

Algunas notas en la captura de pantalla:

  • Las caras frontales se eliminan cuando se dibuja la textura de profundidad (de la luz)
  • Tengo los planos cercanos y lejanos sintonizados solo para este trozo de geometría (establecido en 20 y 25 respectivamente)
  • Una fuente de luz direccional, que desciende ligeramente en ángulo hacia el lado derecho de la escena, lo suficiente para indicar que la pared debe estar sombreada, pero en su mayoría hacia abajo
  • Usando una textura de mapa de sombra 4096x4096 ridículamente grande
  • Toda la iluminación está desactivada, pero sepa que estoy haciendo una iluminación suave (y por lo tanto, vértices normales para los vértices) incluso en esta pared

Como se mencionó here , concluye que no debe sombrear polígonos que están enfrentados por la luz. Estoy luchando con este problema en particular porque no quiero pasar las normales de la cara hasta el sombreador de fragmentos para descartar las verdaderas caras traseras a la luz allí. Sin embargo, si alguien siente que esta es la mejor / única solución para esta geometría eso es lo que tendré que hacer. Teniendo en cuenta que la tubería no hace que sea fácil / obvio pasar las normales de la cara a través de ella, me hace sentir que este no es el camino de menor resistencia. Y tenga en cuenta que las normales que estoy pasando son las normales de vértice, para permitir efectos de iluminación más suaves alrededor de los bordes (probablemente incluirán superficies sin sombra y con sombra).

Tenga en cuenta que estoy teniendo algunos Aliasing de perspectiva desagradables, pero espero que mis próximos pasos sean trabajar en mapas de sombras en cascada , pero sin arreglar esto siento que solo estoy retrasando lo inevitable ya que he ajustado la vista a mano como Lo mejor que puedo (o eso creo).

De todos modos, siento que me estoy perdiendo algo, por lo que si tiene alguna idea o ayuda sería muy apreciado.

EDITAR

Para ser claros, técnicamente, la pared NO debe estar en la sombra, según el origen de la luz.

A continuación se muestra una imagen con sombreado desactivado. Esto es solo usar los vértices normales para calcular la iluminación difusa, no es bonita (se ve demasiada geometría) pero muestra que algunos de los bordes son algo visibles.

Así que sí, la pared DEBE estar en la sombra, pero espero poder hacer que el alisado funcione mejor para que los bordes puedan tener una iluminación difusa. Si necesito tenerlo completamente en la sombra, entonces si es el mapa de la sombra lo que lo pone en la sombra, o si mi código lo pone en la sombra porque la cara normal está lejos, estoy de acuerdo con eso, pero pasar la cara normal a través de Para mi vértice / fragmento el shader no parece ser el camino de menor resistencia.

Tal vez esto ayude a ilustrar mejor mi problema, o quizás a la luz algún entendimiento fundamental que me falta.

EDITAR # 2

He incluido la textura de profundidad a continuación. Puede ver el muro en cuestión en la parte inferior izquierda y, desde la captura de pantalla, puede ver cómo recorté los valores de profundidad a ~ 0.4-> 1. Esto significa que los valores de profundidad de ese muro comienzan en el rango de 0.4. Así que no está PERFECTAMENTE recortado, pero está cerrado. ¿Eso parece razonable? Estoy bastante seguro de que es un búfer de profundidad de 24 o 32 bits, una extensión de DEPTH_COMPONENT en iOS. Para @starmole, ¿esto ayuda a determinar si es un error de escala en mi proyección? ¿Crees que el tamaño / área cubierta de mi mapa es demasiado grande, por lo tanto, si se enfoca más cerca, podría ayudar?