Encontrar la iluminancia de una fuente de luz triangular

Dado que la mayoría de las fuentes de luz en los juegos son puntuales, es bastante difícil aproximar las fuentes de luz de área con las fuentes puntuales. Como los triángulos son una forma universal para representar modelos 3D (por lo tanto, también fuentes de luz de área), me topé con una tarea que consistía en encontrar la iluminancia total en algún punto del espacio 3D desde una fuente triangular uniforme.

Así que comencé con la fórmula básica para calcular la iluminancia de una fuente puntual:

mi = I porque ( α ) r 2

dónde I siendo la intensidad, α siendo el ángulo de incidencia & r siendo la distancia de la fuente al punto.

Para encontrar el ángulo de incidencia, no solo necesitamos conocer el radio-vector del punto, sino también su normal. Así se definieron los siguientes vectores:

n - normal of the illuminated surface in the given point;
p - position of the point itself;
s - position of the light source;
r = s - p (distance vector).

A partir de las fórmulas del producto escalar, el coseno del ángulo de incidencia se calcula como:

porque ( α ) = norte · r | norte | | r | = norte · r | r |
como la longitud de la normal es 1.

Por lo tanto, la fórmula de la iluminancia se puede calcular como:

mi = I porque ( α ) r 2 = I norte · r | r | | r | 2 = I norte · r ( r · r ) 3 / 2

Como tenemos un triángulo, necesitamos encontrar la iluminancia de todos los puntos del triángulo. Cualquier punto s en el triángulo se puede definir usando coordenadas baricéntricas, así:

s = a + ( b a ) tu + ( C a ) v

dónde a , b & C son los vértices y tu & v son parámetros que van de 0 a 1 y cuya suma no puede exceder de 1. Así:

r = s pag = a + ( b a ) tu + ( C a ) v pag

Finalmente, se me ocurrió la integral doble y me quedé:

mi = I 0 1 tu 0 1 norte · r ( r · r ) 3 / 2 d tu d v
dónde:
r = a + ( b a ) tu + ( C a ) v pag

¿Alguien puede verificar mi solución y ayudarme a resolver la integral? (Como, sinceramente, no tengo idea de cómo se resuelven las integrales que involucran productos de puntos). Y tal vez, ¿podría haber soluciones más simples para esto? La integración numérica es una opción, pero aun así me gustaría tener la fórmula completa.

PS La tarea se puede modificar ligeramente para calcular la iluminancia del segmento de línea en lugar del triángulo. Uno solo necesita quitar uno de los vértices y el v -parámetro, por lo que la integral doble se reduce a la integral simple con una sola variable.

Busque en la literatura de gráficos por computadora. Recuerdo esto o triange to point o incluso posiblemente incluso el problema más complicado de triángulo a triángulo fue resuelto por un estudiante de posgrado en Princeton (?) Y presentado en SIGGRAPH. Probablemente fue en algún momento de la década de 1990. Esto fue parte de la investigación sobre la técnica de iluminación por radiosidad.

Respuestas (3)

Esto es más bien un comentario, pero demasiado grande.

La intensidad de un pequeño trozo de triángulo es proporcional al área de este triángulo, así como el coseno del ángulo entre la normal al triángulo y la dirección hacia el punto iluminado. Esto se debe a que si miras el triángulo en, digamos, un ángulo tal que aparece como un segmento de línea, la intensidad es cero. Esto introducirá un producto escalar adicional en el nominador y una norma adicional de r en el denominador. El producto escalar, sin embargo, será constante, es decir | metro ( a pag ) | , dónde metro es la normal al triángulo, porque los otros términos en r son ortogonales a metro . Puede controlar el letrero de este producto para verificar si el lado brillante de la fuente está dirigido hacia el punto iluminado.

Además, debe tener en cuenta que el elemento de área de superficie no es igual a d tu d v , sino más bien 2 S 0 d tu d v , dónde S 0 es el área del triángulo. En el contexto de un juego es más conveniente introducir la intensidad (potencia) por unidad de área de la fuente, para combinar triángulos en una sola fuente homogénea (o no). llamémoslo I . Entonces, introduciendo la notación

α = a pag , β = b a , γ = C a ,
Llego a
mi = 2 S 0 I d tu d v | α metro | norte ( α + tu β + v γ ) ( α + tu β + v γ ) 4 ,
donde la región de integración se elige como en su fórmula. Vemos que se desdobla en tres integrales, y dos de ellas difieren solo por el cambio ( tu , β ) ( v , γ ) . Entonces, en principio, necesita saber cómo calcular las siguientes dos integrales:
d tu d v 1 ( α + tu β + v γ ) 4 , d tu d v tu ( α + tu β + v γ ) 4 .
Siempre puede rotar y escalar para que α es por ejemplo ( 0 , 0 , 1 ) . Todavía puedes girar alrededor α para que, digamos, X -componente de β es igual a 0. Entonces, cada integral es en realidad una función de 5 variables

Creo que es realmente difícil obtener una solución analítica para estas integrales. Si está de acuerdo con la integración numérica, puede intentarlo, pero sospecho que para escenas dinámicas tendrá que usar métodos bastante toscos para alcanzar suficientes fps. Otro método es calcular previamente los valores, pero probablemente costará demasiado espacio. Otra opción más es encontrar una fórmula adecuada para las funciones, pero en el caso de 5 variables es bastante difícil.

Si su objetivo es una escena estática, le sugiero que utilice la proyección de rayos, pero supongo que no es el caso.

Dicho esto, creo que la precisión no es tan importante en los juegos, y puedes modificar ligeramente tu modelo para obtener fórmulas más simples. Sin embargo, la modificación concreta depende de las escalas de longitud de sus escenas. Tal vez sea posible reemplazar la cuarta potencia con la segunda y (probablemente) podrá tomar la integral. O, para reemplazar 1 / X 4 por Exp ( C X 2 ) (para los cuales la integral es gaussiana), para algunas escalas esto podría ser razonable y poder capturar las características cualitativas clave.

Para el segmento de línea, la integral se modifica fácilmente. No traté de tomarlo, pero incluso si no es factible, es esencialmente una función de dos variables, y es bastante fácil ajustar datos numéricos con una fórmula simple.

Muy agradecido por su contribución. No estoy seguro de si la orientación del triángulo al punto realmente importa, ya que considero que cualquier punto del triángulo es una fuente de luz infinitamente pequeña que emite rayos en todas las direcciones. Sin embargo, tiene razón con respecto a la inclusión del área (inicialmente vi el triángulo como algo así como una fuente de luz puntual pero más grande) ya que elimina todos los problemas relacionados con la homogeneidad.
Intenté resolver la integral deshaciéndome de los productos de punto y transformando el integrando a la forma polinomial, pero parece que incluso Wolfram Alpha no puede resolver tales cosas que producen "el tiempo computacional excedido". Todavía logré obtener la solución para el segmento de línea (abajo).
@inker, sí, probablemente el coseno adicional no importe

En cuanto al segmento de línea, utilicé las sustituciones sugeridas por Peter:

α = a pag
β = b a
r = a + ( b a ) tu pag = α + β tu
r r = α α + 2 ( α β ) tu + ( β β ) tu 2

Se pueden introducir algunas constantes adicionales:

A = α α
B = α β
C = β β
METRO = norte α
PAG = norte β

De este modo:

I 0 1 norte r ( r r ) 3 / 2 d tu = I 0 1 norte α + ( norte β ) tu ( α α + 2 ( α β ) tu + ( β β ) tu 2 ) 3 / 2 d tu =
= I 0 1 METRO + PAG tu ( A + 2 B tu + C tu 2 ) 3 / 2 d tu = I A PAG B METRO + B PAG tu C METRO tu ( B 2 A C ) A + 2 B tu + C tu 2 | 0 1 =
= I ( A PAG B METRO + B PAG C METRO ( B 2 A C ) A + 2 B + C A PAG B METRO ( B 2 A C ) A )

Introducción de constantes adicionales:

q = A PAG B METRO
T = B 2 A C

De este modo:

mi = I ( q + B PAG C METRO T A + 2 B + C q T A )

Tienes r r equivocado: r r = α α + 2 α β tu + β β tu 2

Los triángulos son, por regla general, realmente malos para proporcionar una solución analítica al integrarlos, mucho más de lo que se podría suponer sobre la base de simplemente lanzar el asunto en la mente de uno . Es algo así como el problema de la red infinita de resistencias en la ingeniería eléctrica: empiezas con "no podrías simplemente... pero qué pasaría si nosotros... seguramente si establecemos..." y luego empiezas a darte cuenta de cómo ¡difícil es!