Red de conocimiento informático - Problemas con los teléfonos móviles - Estudio de iluminación de Bungie de Siggraph 2009

Estudio de iluminación de Bungie de Siggraph 2009

Bungie es un estudio conocido por su serie Halo. Este artículo se centra en parte de la presentación de Bungie Studio en Siggraph 2009.

En la actualidad, existen las siguientes tendencias en el desarrollo de juegos:

En el proceso de desarrollo de juegos, los siguientes puntos son el foco de trabajo:

En orden Para jugar en el juego Para presentar efectos del mundo real a los jugadores, es imposible pasar por alto el cálculo de la luz. El más importante y difícil es la realización de efectos de luz globales. En términos generales, hay dos ideas para la realización de efectos reales. efectos de luz:

Primero, echemos un vistazo al proceso de iluminación en tiempo real.

En escenas al aire libre, la luz solar y el tragaluz son las principales fuentes de luz, y los efectos atmosféricos de alta calidad pueden proporcionar mucha información clave al ojo humano (por ejemplo, la perspectiva atmosférica y la atenuación causada por la dispersión atmosférica pueden crear un sentido de distancias muy realista), lo cual es crucial para que los jugadores experimenten el realismo del juego.

Para las simulaciones de atmósfera y tragaluces, el modelo anterior era el modelo de dispersión atmosférica propuesto por Preetham & Hoffman en 2002, que elaboraba el mapa del cielo fuera de línea y calculaba el efecto de dispersión en tiempo real. El modelo solo admite un único cálculo de dispersión (el crepúsculo, la autosombra de la Tierra y los ejes de luz a menudo requieren múltiples cálculos de dispersión) y solo admite que el efecto se vea correctamente en el suelo.

Bruneton & Neyret presentó un mejor modelo de dispersión atmosférica en 2008, que admite múltiples cálculos de dispersión, efectos de dispersión de la luz solar en cualquier dirección, efectos de dispersión en cualquier posición y dirección de observación, y todos los datos se pueden hornear sin conexión.

A continuación presentaremos brevemente algunas teorías relacionadas con la dispersión atmosférica.

Dispersión de Rayleigh La teoría de la dispersión recibe su nombre del modelo de dispersión del físico británico Lord Rayleigh. La conclusión general de este modelo es que durante la propagación de las ondas luminosas, si éstas encuentran partículas que son mucho más pequeñas que las mismas. longitud de onda (al menos una diferencia de orden de magnitud), se producirá dispersión elástica. En este momento, la intensidad de la luz dispersada en cada dirección no es la misma. Su intensidad es inversamente proporcional a la cuarta potencia de la longitud de onda de la luz incidente. proporcional a la cuarta potencia de la longitud de onda de la luz incidente. Esta dispersión se produce cuando las ondas de luz se propagan a través de sólidos líquidos o gases transparentes.

En una atmósfera limpia (como después de una lluvia, cuando hay menos partículas gruesas en la atmósfera), la dispersión Rayleigh de la luz solar es la razón principal por la que el cielo aparece azul: como se mencionó anteriormente, la intensidad de la luz dispersada es inversamente proporcional a la cuarta potencia de la longitud de onda, por lo que la luz azul-violeta con longitudes de onda más cortas domina la dispersión de Rayleigh.

Además, la densidad de las partículas en la atmósfera disminuye al aumentar la altitud, lo que resulta en un cambio correspondiente en el color del cielo (azul cielo -> cian -> azul oscuro -> violeta oscuro -> negro púrpura ).

Al atardecer o al amanecer, el sol está directamente frente a la línea de visión del observador, por lo que la luz con longitudes de onda más cortas de la luz solar será disipada por la dispersión de Rayleigh durante la propagación, dejando solo las longitudes de onda más largas en Naranja. -luz roja, razón por la cual el sol se ve rojo al atardecer y al amanecer, mientras que el cielo permanece azul.

Si el radio de las partículas en la atmósfera es r, la circunferencia es 2 pi r, la longitud de onda de la luz es lamda y el número de escala x = 2 pi r/lamda, entonces solo sucede cuando x<<1 dispersión de Rayleigh (la dispersión de Mie se usa cuando x!<<1 y x<50, la dispersión de Mie se usa cuando x>50).

Aquí se dan dos funciones: función beta y función de fase. La función de fase representa la intensidad de la luz dispersada en diferentes ángulos.

La fórmula de la función Beta es h=r-Ra, donde Ra es la altitud, n es el índice de refracción de las ondas de luz en el aire y N es la densidad molecular al nivel del mar.

El valor de la función P depende de (1 + cos(theta)^ 2), donde el ángulo θ se refiere al ángulo entre la dirección de la luz reflejada y la dirección de la luz incidente (que indica que el grado de dispersión perpendicular a la dirección de la luz incidente es cercano a 0, siempre que los ángulos sean complementarios,

Cuando el tamaño de las partículas en la atmósfera es consistente con la longitud de onda de la luz, la dispersión que ocurre en este momento se llama dispersión de Mie.

Las partículas como el humo, el polen y las gotas de agua son la principal causa de la dispersión de Mie. La dispersión de Mie es inversamente proporcional al cuadrado de la longitud de onda y es mayor en la dirección de avance de la luz que en la dirección inversa. .

Es más probable que la dispersión de Mie ocurra en el espacio inferior de la atmósfera, y es más evidente en tiempo lluvioso, porque las partículas de gran escala son más abundantes en escalas de tiempo o espacio.

La dispersión de Mie fue descubierta en 1908 por el físico alemán Gustav Mie.

La función de fase de dispersión de partículas (como aerosoles) (función de fase de aerosol) es la fórmula dada por la teoría de Mie de que la intensidad de dispersión cambia con el ángulo entre la dirección de la luz dispersada y la dirección de la luz incidente.

La función de fase de dispersión de Mie se puede ajustar mediante la función de fase de Cornett-Shanks, donde la variable g es un factor de simetría que controla la forma de la distribución de la luz dispersa.

A diferencia de las moléculas del aire, las partículas de aerosol absorben parte de la luz incidente, fenómeno que se puede caracterizar por el coeficiente de absorción: βeM = βsM + βam.

En el renderizado real, la intensidad de la luz en un determinado punto se compone de los siguientes tres elementos:

1. Intensidad de la luz del sol, L0

2 Intensidad de la luz reflejada en el punto x0, R[L].

3. Intensidad de la luz S[L] dispersada hacia el observador

Los siguientes tres elementos se dividen en tres elementos en el cálculo real:

La intensidad La cantidad de luz que incide directamente en el ojo humano antes de llegar al ojo humano se puede expresar mediante la función de propagación de la luz (a medida que aumenta la distancia, la intensidad de la luz se atenúa gradualmente). Además, durante el proceso de propagación, se puede determinar la presencia o ausencia de obstrucciones. es necesario tener en cuenta.

L0 se refiere al resultado de la atenuación de la fuente de luz directa Lsun por la función de propagación de la luz T(x,x0) antes de llegar a los ojos del observador.

La luz reflejada en x0 también se atenuará a medida que se propaga hacia la posición del observador, y la intensidad final está relacionada con la radiancia I de la luz en x0. Tenga en cuenta que en el límite superior de la atmósfera, I tiene un valor de 0, que se utiliza al dibujar la región de transición entre la atmósfera y el espacio.

La componente dispersada es la parte del rayo dispersado en x0 dirigida hacia el observador, todavía relacionada con la función de propagación y la radiancia reflejada I en x0 y la radiancia dispersada J en x0.

En la renderización real, es necesario realizar una gran cantidad de cálculos complejos fuera de línea a través de mapas horneados: incluida principalmente la función de propagación T y la radiación dispersada J.

Los tragaluces realistas y la luz natural nos permiten saber la hora del día. Para lograr este efecto, necesitamos generar diferentes efectos de dispersión para diferentes ángulos de visión, diferentes direcciones de luz, diferentes períodos de tiempo y diferentes propiedades atmosféricas. El modelo de dispersión proporcionado en este artículo admite dispersión múltiple, por lo que puede simular bien el efecto del crepúsculo, así como el efecto atmosférico cuando se ve desde el espacio (ver más abajo)

El modelo de dispersión proporcionado por Bruneton&Neyret utiliza un único color para simular Skylight, que es suficiente para renderizar tomas lejanas, pero no tomas cercanas. Esta implementación es suficiente para representar vistas lejanas, pero puede no ser suficiente para representar tomas cercanas. Un mejor método de implementación es el siguiente:

1. Utilice la distribución de radiación del tragaluz CIE para simular el patrón de distribución de color del tragaluz.

2. Hornee el resplandor del tragaluz sin conexión y utilícelo en tiempo de ejecución Basado en muestreo

3. Genere los armónicos esféricos correspondientes para cada dirección de longitud del horizonte

4. Complete los coeficientes de SH en el polinomio correspondiente

5 Utilice la renderización PRT (Precomputed Radiance Transfer, una tecnología que logra efectos de iluminación global dinámicos en tiempo de ejecución mediante precomputación) para obtener efectos de iluminación global.

Aquí hay una imagen del método de implementación:

El uso de mapas de sombras para la representación de sombras es muy común, pero todavía existen muchos desafíos para lograr sombras de alta calidad, como el procesamiento debido. a diferentes resoluciones de textura y bordes irregulares de textura causados ​​por la precisión del almacenamiento.

En los grandes mundos abiertos, CSM se ha convertido en un estándar, pero su implementación aún necesita considerar cómo utilizar efectivamente la resolución del mapa de sombras, y todavía no puede hacer nada con respecto a los problemas de alias.

Independientemente de la distribución de las resoluciones de textura, lo primero que debe resolverse en la implementación del mapa de sombras es el problema de la irregularidad de los bordes de las sombras causada por la proyección.

PCF es uno de los métodos de filtrado de sombras más comunes para generar sombras suaves, generalmente implementado utilizando un patrón de muestreo distribuido de disco Poisson. Sin embargo, la calidad de la implementación de este método generalmente depende del número de puntos de muestreo, y se puede obtener una mejor calidad con un mayor número de puntos de muestreo.

PCF utiliza píxeles, por lo que es más caro durante las operaciones en tiempo real. Aunque todavía existen algunos trucos de optimización cuando se utiliza el método PCF (por ejemplo, generar una máscara para la parte del borde de la sombra y realizar el procesamiento PCF solo en esta parte de los datos durante el tiempo de ejecución real), no podemos evitar preguntar si Además de PCF, existen otras soluciones mejores.

Este es un diagrama esquemático de cómo se implementa el mapeo de sombras estándar (SSM para abreviar). Como puede ver, esta es una función paso a paso muy aburrida cuya salida solo depende de dónde está la profundidad del píxel actual. El espacio de luz corresponde al valor de profundidad del píxel del mapa de sombras correspondiente.

La desventaja de SSM es que sólo proporciona sombras duras, no sombras con bordes suaves como en el mundo real. Una forma de resolver este problema es ajustar la fórmula de cálculo de la sombra para incluir la profundidad del proyector y el portador de la sombra, filtrando así linealmente el cálculo de la sombra final para dar un efecto suave. Hay muchos métodos actualmente en camino. dirección (VSM, SM convolucional, ESM, etc.)

El cálculo de sombra de SSM es un proceso binario de dos vías. El cálculo de sombra de SSM es una función escalonada con una salida binaria, y una de las primeras ideas fue utilizar una función de salida suave en lugar de esta salida escalonada.

La idea de implementación es intentar utilizar métodos probabilísticos o métodos aproximados para dar soluciones, en lugar de considerar directamente la relación de profundidad entre el proyector y el portador de la sombra.

A través de estos métodos, los datos de profundidad del proyector se pueden filtrar una vez por adelantado a través de la función mipmap del hardware y el desenfoque de las muestras de textura para suavizar los bordes de las sombras, evitando así el uso de compensaciones de profundidad para aliviar la sombra. problema de falla.

El núcleo de la implementación de probabilidad es una fórmula:

f(dr) = Pr(do > dr)

Calcule el valor de profundidad muestreado de la sombra El mapa es mayor que la probabilidad del valor de profundidad de píxel actual (el píxel actual está iluminado), 1-f(dr) se puede utilizar como el valor Alfa de la sombra de píxel actual (Alfa de 1 significa sombra pura, Alfa de 0 significa completamente iluminado).

VSM implementa la probabilidad a través de la desigualdad de Chebyshev y calcula la probabilidad máxima de que el píxel actual se ilumine (la probabilidad real puede ser menor que este valor, razón por la cual se produce una fuga de luz con este método)

La ventaja de VSM es que puede lograr efectos de sombras suaves con un solo procesamiento del espacio de la pantalla, es altamente rentable y puede eliminar fallas superficiales con pendientes de profundidad excesivas.

Desventajas de VSM:

1. Se requieren mapas adicionales para almacenar mapas VSM

2. La alta variación conduce a fugas de luz (cuanto mayor sea el radio de desenfoque de VSM , cuanto más se produce una fuga de luz, más grave es)

La razón principal de la fuga de luz VSM es que la probabilidad de obtener sombras puras nunca es igual a 0 debido a la desigualdad de Chebyshev, lo que resulta en la incapacidad de obtener sombras puras. La razón principal de la fuga de luz VSM es que el valor de probabilidad calculado por la desigualdad de Chebyshev nunca puede ser igual a 0, por lo que no se pueden obtener sombras puras y hay múltiples oclusiones en el camino desde el píxel actual hasta la fuente de luz. estas oclusiones son Cuanto mayor es la relación de distancia entre el objeto de oclusión más cercano y el píxel actual, mayor es la varianza. En este momento, el valor de probabilidad calculado por la desigualdad de Chebyshev está más cerca de 1, lo que resulta en una fuga de luz.

Algunos métodos de optimización para aliviar el problema de la fuga de luz:

1. Establezca un umbral de probabilidad mínimo Pmin. Cuando el valor de probabilidad calculado sea menor que este valor, se reducirá directamente a. 0. Cuando sea mayor que At este valor, se escalará según el rango

2. El umbral de probabilidad mínimo Pmin es un valor que aumenta con el aumento del radio de desenfoque de VSM. El valor puede causar algunos efectos incorrectos, como que algunas áreas que deben iluminarse estén pintadas en sombra.

Se especula que el motivo del problema de fuga de luz es que la información obtenida utilizando solo los datos principales y auxiliares es muy limitada, lo que no es suficiente para reconstruir los datos ambientales para el cálculo de probabilidad. , en algunos objetos de proyección complejos (oclusión multicapa) en el entorno provocarán una fuga de luz grave. Además, es importante señalar que la función de distribución de probabilidad de un escenario dado debe caracterizarse por datos de todos los órdenes, una teoría que se utilizará más adelante cuando se analicen métodos SM estables y confiables.

Sin embargo, incluso si esta conjetura es cierta, la efectividad de este método aún es cuestionable; después de todo, no se puede ignorar el consumo de tiempo y espacio que se requiere actualmente para calcular los datos primarios y secundarios;

Suponiendo que la profundidad del píxel actual es siempre mayor o igual que la profundidad de SM (es decir, siempre está en un estado de oclusión), la forma exponencial de la función de paso se puede reescribir como De acuerdo con la fórmula anterior (el resultado es la concentración de la sombra, es decir, el grado de oclusión), donde c es un número entero muy grande, el resultado final deberá estar saturado.

Utilizando la forma exponencial de la fórmula, toda la fórmula se puede descomponer en un término oclusor y un término receptor, lo que permite difuminar el mapa de sombras exponencial utilizando múltiples muestras (un proceso llamado prefiltrado, a diferencia usando PCF para confundir los resultados de las pruebas).

Los pasos para implementar ESM se pueden dividir en los siguientes pasos:

1. Almacenar la profundidad de la sombra en el SM en forma de índice.

2 Configure SM Blur: muestree varios píxeles en el área circundante y pondere el promedio (genere un mapa MIP para ESM o realice un desenfoque gaussiano en direcciones horizontal y vertical por separado)

3. En Shadow, se realiza la prueba de profundidad. en tiempo de ejecución muestreando el mapa ESM y multiplicándolo por la profundidad exponencial del píxel actual.

ESM tiene las siguientes ventajas:

1. Fácil de implementar

2. Elimina los fallos de las sombras

3. Consigue sombras suaves

4. En comparación con VSM, solo es necesario almacenar el mapeo de un solo canal

5. No habrá fugas de luz como ocurre con VSM en escenas complejas

Como puede verse en la imagen, sin embargo, los MEA suelen cumplir múltiples propósitos. p> Se puede ver en la figura que cuanto mayor es el valor de la constante c, más cerca está el ESM de la función escalonada y mejor es el efecto de simulación de sombra (menor es la posibilidad de fuga de luz), pero si el valor de c es demasiado grande, el valor calculado puede exceder el rango máximo que el número de punto flotante puede representar (por ejemplo, para un número de punto flotante de 32 bits, cuanto mayor sea el valor de c, el valor calculado puede exceder el rango máximo que el El número de coma flotante puede representar (por ejemplo, para un número de coma flotante de 32 bits). Es decir, cuanto mayor sea el valor de c, el valor calculado puede exceder el rango máximo que el número de coma flotante puede representar (por ejemplo, para un número de coma flotante de 32 bits). Número de punto flotante de bits, cuanto mayor sea el valor de c, el valor calculado puede exceder el rango máximo que el número de punto flotante puede representar. Rango máximo), para números de punto flotante de 32 bits, el uso de c = 88 puede provocar un desbordamiento). entonces, ¿qué debemos hacer?

Bungie proporciona una solución:

1. Al renderizar, solo se almacenan datos de profundidad lineal, no datos exponenciales

2. Al difuminar, colóquelo en un espacio logarítmico (es decir, convierta múltiples operaciones de superposición exponencial en una operación de superposición, extraiga el mismo factor de multiplicación para que el

superpuesto Con este método, es posible logra un ESM c muy alto en un mapa de punto flotante de 16 bits, pero en este momento el ESM todavía está presente. Otros problemas

Al igual que los mapas de sombras convolucionales, el filtrado de ESM supone que el píxel actual está en un plano. Esto no estaba claro en implementaciones anteriores y el proceso de filtrado solo se realizaba en el mapa de sombras, a diferencia de Los píxeles de la pantalla son irrelevantes, entonces, ¿por qué hacer tal suposición? Para simplificar el cálculo, ¿la función de modelado de señal de paso más primitiva? se utilizó.

Esta fórmula utiliza r para representar el valor de profundidad del píxel actual convertido al espacio de sombra, y oi para representar el valor de profundidad del i-ésimo punto de muestreo en el mapa de sombra.

Para poder simplificar H(oi - r) a exp(k*(oi-r)), es necesario asegurar que r >oi, de modo que como k tiende a infinito, se puede omitir 1 en el denominador. como se desee, y solo si Puede omitirse solo si el receptor está encima de una superficie plana (de hecho, el receptor también puede estar en una superficie cóncava frente a la fuente de luz, pero esta situación es muy especial y puede ignorarse directamente ). Para garantizar que el valor de profundidad del punto de muestreo oi alrededor del SM correspondiente al punto de píxel actual no sea mucho mayor que r (si no es un plano, puede haber una situación en la que el valor de profundidad de la sombra en el área circundante es mayor que el valor de profundidad del punto de píxel actual), y si es demasiado mayor que r, no se puede establecer la suposición original. Esto significa que el resultado de la fórmula de cálculo antes de la simplificación aún puede ser menor que. 1, pero después de la simplificación, debido al crecimiento exponencial, conducirá a Si se promedia un valor grande con un conjunto de valores más pequeños, el resultado aún puede ser grande, y luego, una vez que se satura, se convertirá en 1 y 1. Corresponde a la luz plena, que es el rendimiento de la fuga de luz.

Como se muestra en el PPT anterior, cuando dr aumenta gradualmente hasta ser mayor que do, pero similar a do (por ejemplo, cuando el píxel actual está ubicado en la parte posterior del proyector), el rendimiento normal debería estará completamente en la sombra, pero según los cálculos de ESM, habrá un poco de luz (fuga de luz), esto se llama fuga de luz de contacto y, en realidad, ocurre con bastante frecuencia. Este problema se denomina fuga de luz de contacto y se ha descubierto que ocurre con bastante frecuencia en el desarrollo real. Este problema se puede aliviar aumentando el valor de c, pero no se puede eliminar. Entonces, ¿existe una mejor manera de resolverlo?

Una solución simple y tosca es multiplicar la salida por un factor en el cálculo final, haciéndolo más oscuro.

Existe una limitación en el uso de este proceso, que requiere que no realicemos ajustes computacionales adicionales (sin desenfoque) al generar y muestrear el ESM, para que los píxeles que originalmente están en la luz no se configuren incorrectamente. a la sombra. Cuando el desenfoque ESM está activado, esta técnica no se puede utilizar; de lo contrario, puede causar problemas más graves, como se muestra en la siguiente figura:

Inicialmente, pensamos que CSM y la mezcla de desenfoque de textura estaban desacopladas y no interfieren entre sí, pero en la práctica encontramos muchos problemas que requirieron una solución deliberada (especialmente al elegir entre múltiples cascadas).

La selección de una cascada en CSM generalmente se realiza comparando el valor Z del píxel actual en el espacio de la cámara con los límites de la cascada correspondiente.

Pueden surgir problemas a la hora de seleccionar el VCSM (variance CSM) correspondiente a cada píxel. Dado que nuestro VSM está difuminado por el hardware, se representan diferentes cascadas en la matriz de textura y, al calcular el índice de cascada de píxeles adyacentes en el mismo cuadrante, podemos obtener dos resultados diferentes, de modo que los valores de profundidad de estos dos adyacentes Los píxeles se muestrean de diferentes mapas en cascada. Dado que el índice en cascada es la clave para determinar la matriz de transformación de la imagen de proyección en el espacio luminoso, también puede dar lugar a diferentes coordenadas del mapa utilizadas en el muestreo final, así como a valores diferenciales no válidos y niveles LOD incorrectos (el método PCF no tiene estos problemas porque no requiere confiar en el valor diferencial del píxel y el nivel LOD para realizar el filtrado de desenfoque). Estas inconsistencias pueden resultar en una línea divisoria entre las áreas de transición de las dos capas en el efecto de sombreado de salida final, como se muestra a continuación:

Este problema surge principalmente cuando los píxeles adyacentes en el mismo cuadrante seleccionan diferentes niveles. El índice de enlaces generará resultados anormales de diferenciación de píxeles y resultados anormales de filtrado de mapas MIP. Si desea utilizar el filtrado de mapas MIP en VSM, debe resolver este problema.

La suposición es que el mismo quad puede abarcar hasta dos cascadas (esta es una suposición razonable en la mayoría de los casos, ya que es poco probable que un objeto pueda abarcar dos cascadas, lo cual no es razonable). Con base en esta suposición, solo necesitamos asegurarnos de que todos los píxeles en el quad actual correspondan a la misma cascada para garantizar que los datos diferenciales muestreados del mapa de sombras sean estables y los resultados del mapa MIP sean normales.

¿Cómo hacer esto? Primero, hacemos un desplazamiento a la izquierda de 1 según el índice concatenado del píxel actual, que en realidad es equivalente a f(x) = 2^x, convertido a 2 en forma exponencial.

Luego, en tres direcciones (¿horizontal, vertical y diagonal?), según el supuesto anterior, si hay dos cascadas en el cuadrilátero actual, entonces nMaxDifference = 2^(x+1) - 2^x = 2^ x. Entonces, según esta fórmula, existe la siguiente relación:

x=0, nMaxDifference = 1

x=1, nMaxDifference = 2; =2 , nMaxDifference = 4;

x=3, nMaxDifference = 8;

A partir de esto, puedes construir una matriz, indexada por nMaxDifference-1, para