2012-03-12 10 views
7

Según tengo entendido, el mapeo de sombras se hace representando la escena desde la perspectiva de la luz para crear un mapa de profundidad. Luego vuelve a representar la escena desde el punto de vista de la cámara, y para cada punto (fragmento en GLSL) en la escena calcula la distancia desde allí a la fuente de luz; si coincide con lo que tienes en tu mapa de sombras, entonces está en la luz, de lo contrario está en la sombra.¿Cómo usar un solo mapa de sombras para fuentes de luz de múltiples puntos?

Estaba leyendo this tutorial para tener una idea de cómo hacer el mapeo de sombras con una luz puntual/omnidireccional.

En la sección 12.2.2 se dice:

Utilizamos un solo mapa de sombras para todas las fuentes de luz

y luego bajo 12.3.6 dice:

1) Calcula la distancia cuadrada desde el píxel actual a la fuente de luz.
...
4) Compare el valor de distancia calculado con el valor del mapa de sombras capturado para determinar si estamos o no en la sombra.

Que es más o menos lo que dije anteriormente.

Lo que no entiendo es que si hemos horneado todas nuestras luces en un mapa de sombras, ¿a qué luz debemos comparar la distancia? La distancia al horno en el mapa no debe corresponder a nada, porque es una mezcla de todas las luces, ¿no?

Estoy seguro de que me falta algo, pero espero que alguien pueda explicarme esto.


Además, si utilizamos un solo mapa de sombras, ¿cómo lo combinamos para todas las fuentes de luz?

Para una sola fuente de luz, el mapa de sombras solo almacena la distancia del objeto más cercano a la luz (es decir, un mapa de profundidad), pero para múltiples fuentes de luz, ¿qué contendría?

Respuesta

5

Se ha cortado la frase corta prematuramente:

Utilizamos un solo mapa de sombras para todas las fuentes de luz, creando una imagen pasadas múltiples con la representación y la realización de un pase para cada fuente de luz .

Por lo tanto, el mapa de sombras contiene los datos de una única fuente de luz a la vez, pero usan un solo mapa porque representan solo una luz a la vez.

Creo que esto entra en su segunda pregunta: la luz es aditiva, por lo que combina los resultados de múltiples luces simplemente agregándolas. En el caso de Gemas de GPU, se suman directamente en el búfer de cuadros, sin duda debido al número relativamente limitado de muestras de textura de almacenamiento disponibles en las GPU en ese momento. Hoy en día es probable que desee hacer una combinación de combinación en el búfer de cuadros y directamente en el sombreador de fragmentos.

También aplica generalmente la prueba de "el píxel se enciende si es menor o igual a la distancia en la memoria intermedia más un poco" en lugar de exactamente igual, debido a la acumulación de error de redondeo de coma flotante.

+0

Pensé que el resto de esa oración significaba simplemente que construyeron el mapa de sombras al representar en el mismo mapa (quizás de manera aditiva) para cada fuente de luz; no es que lo despejen y lo reutilicen. Eso tiene más sentido ahora ... es una lástima, sin embargo, realmente esperaba poder escapar con un mapa de sombras: p – mpen

+0

Puedes hacerlo si cambias las cosas y usas lo que a menudo se llama renderización diferida. Puede renderizar la escena desde la cámara a la profundidad de salida + normales + alguna información de superficie por píxel y luego, para cada luz, dibuja un cuadrante de pantalla completa que itera de manera efectiva a través de la representación de la cámara. Incluso si su GPU solo puede generar RGBA de 8 bits (aún común en el mundo móvil), puede hacer el primer bit de texturas múltiples en múltiples pasadas. – Tommy

+0

Genial. Acabas de abrir una nueva lata de gusanos para mí. Estoy haciendo un juego, y la mayoría de los objetos son estáticos (o rara vez cambian), así que estaba pensando en precomputar los mapas de sombras para todos los objetos estáticos, mantener una copia y actualizarla solo para los objetos en movimiento. Quiero admitir tantas luces como sea posible, por lo que no creo que volver a renderizar la escena 100 veces desde diferentes ángulos 60 veces por segundo sea una posibilidad para mí. Pero un mapa de sombras utiliza una textura activa, ¿no? Tengo que unirlos a todos al mismo tiempo para el pase de representación final, ¿no? – mpen

Cuestiones relacionadas