Radiosidad (gráficos por computadora)

Método de representación de gráficos por computadora mediante reflexión difusa
Escena renderizada con RRV [1] (implementación simple de renderizador de radiosidad basado en OpenGL) 79.ª iteración
La caja de Cornell , representada con y sin radiosidad por BMRT

En gráficos por computadora en 3D , la radiosidad es una aplicación del método de elementos finitos para resolver la ecuación de renderizado para escenas con superficies que reflejan la luz de manera difusa . A diferencia de los métodos de renderizado que utilizan algoritmos de Monte Carlo (como el trazado de trayectorias ), que manejan todos los tipos de trayectorias de luz, la radiosidad típica solo tiene en cuenta las trayectorias (representadas por el código "LD*E") que salen de una fuente de luz y se reflejan de manera difusa una cierta cantidad de veces (posiblemente cero) antes de llegar al ojo. La radiosidad es un algoritmo de iluminación global en el sentido de que la iluminación que llega a una superficie no proviene solo directamente de las fuentes de luz, sino también de otras superficies que reflejan la luz. La radiosidad es independiente del punto de vista, lo que aumenta los cálculos involucrados, pero los hace útiles para todos los puntos de vista.

Los métodos de radiosidad se desarrollaron por primera vez alrededor de 1950 en el campo de la ingeniería de transferencia de calor . Más tarde, en 1984, investigadores de la Universidad de Cornell [2] y la Universidad de Hiroshima los perfeccionaron específicamente para el problema de la representación de gráficos por computadora . [3]

Los motores de radiosidad comerciales notables son Enlighten de Geomerics (utilizado para juegos como Battlefield 3 y Need for Speed: The Run ); 3ds Max ; form•Z ; LightWave 3D y Electric Image Animation System .

Características visuales

Diferencia entre iluminación directa estándar sin penumbra de sombra y radiosidad con penumbra de sombra

La inclusión de cálculos de radiosidad en el proceso de renderizado suele aportar un elemento adicional de realismo a la escena final, debido a la forma en que imita fenómenos del mundo real. Consideremos una escena de una habitación sencilla.

La imagen de la izquierda se renderizó con un renderizador de iluminación directa típico . Hay tres tipos de iluminación en esta escena que el artista ha elegido y colocado específicamente en un intento de crear una iluminación realista: iluminación puntual con sombras (colocada fuera de la ventana para crear la luz que brilla en el suelo), iluminación ambiental (sin la cual cualquier parte de la habitación que no esté iluminada directamente por una fuente de luz estaría totalmente a oscuras) e iluminación omnidireccional sin sombras (para reducir la planitud de la iluminación ambiental).

La imagen de la derecha se ha renderizado mediante un algoritmo de radiosidad . Solo hay una fuente de luz : una imagen del cielo situada fuera de la ventana. La diferencia es evidente. La habitación brilla con luz. Se ven sombras suaves en el suelo y se perciben sutiles efectos de iluminación en toda la habitación. Además, el color rojo de la alfombra se ha difuminado en las paredes grises, lo que les da un aspecto ligeramente cálido. Ninguno de estos efectos fue elegido o diseñado específicamente por el artista.

Descripción general del algoritmo de radiosidad

Las superficies de la escena que se van a renderizar se dividen en una o más superficies más pequeñas (parches). Se calcula un factor de visión (también conocido como factor de forma ) para cada par de parches; es un coeficiente que describe qué tan bien se pueden ver los parches entre sí. Los parches que están alejados entre sí u orientados en ángulos oblicuos entre sí tendrán factores de visión más pequeños. Si hay otros parches en el camino, el factor de visión se reducirá o será cero, dependiendo de si la oclusión es parcial o total.

Los factores de visualización se utilizan como coeficientes en un sistema lineal de ecuaciones de renderizado. Al resolver este sistema se obtiene la radiosidad, o brillo, de cada parche, teniendo en cuenta las interreflexiones difusas y las sombras suaves.

La radiosidad progresiva resuelve el sistema de forma iterativa con valores de radiosidad intermedios para el parche, correspondientes a los niveles de rebote. Es decir, después de cada iteración, sabemos cómo se ve la escena después de un rebote de luz, después de dos pasadas, dos rebotes, etc. Esto es útil para obtener una vista previa interactiva de la escena. Además, el usuario puede detener las iteraciones una vez que la imagen se ve lo suficientemente bien, en lugar de esperar a que el cálculo converja numéricamente.

A medida que el algoritmo se repite, se puede ver cómo la luz fluye hacia la escena a medida que se calculan múltiples rebotes. Los parches individuales son visibles como cuadrados en las paredes y el piso.

Otro método común para resolver la ecuación de radiosidad es el de "disparar radiosidad", que resuelve iterativamente la ecuación de radiosidad "disparando" luz desde el parche con la mayor energía en cada paso. Después de la primera pasada, solo se iluminarán los parches que estén en la línea de visión directa de un parche emisor de luz. Después de la segunda pasada, se iluminarán más parches a medida que la luz comience a rebotar en la escena. La escena continúa volviéndose más brillante y finalmente alcanza un estado estable.

Formulación matemática

El método básico de radiosidad tiene su base en la teoría de la radiación térmica , ya que la radiosidad se basa en el cálculo de la cantidad de energía luminosa transferida entre superficies. Para simplificar los cálculos, el método supone que toda la dispersión es perfectamente difusa . Las superficies se suelen discretizar en elementos cuadriláteros o triangulares sobre los que se define una función polinómica por partes.

Después de esta descomposición, la cantidad de transferencia de energía luminosa se puede calcular utilizando la reflectividad conocida del parche reflectante, combinada con el factor de visión de los dos parches. Esta cantidad adimensional se calcula a partir de la orientación geométrica de dos parches y se puede considerar como la fracción del área total de emisión posible del primer parche que está cubierta por el segundo.

Más correctamente, la radiosidad B es la energía por unidad de área que sale de la superficie del parche por intervalo de tiempo discreto y es la combinación de la energía emitida y reflejada:

B ( x ) d A = E ( x ) d A + ρ ( x ) d A S B ( x ) 1 π r 2 cos θ x cos θ x V i s ( x , x ) d A {\displaystyle B(x)\,dA=E(x)\,dA+\rho (x)\,dA\int _{S}B(x'){\frac {1}{\pi r^{2}}}\cos \theta _{x}\cos \theta _{x'}\cdot \mathrm {Vis} (x,x')\,\mathrm {d} A'}

dónde:

  • B(x) i d A i es la energía total que sale de un área pequeña d A i alrededor de un punto x .
  • E(x) i d A i es la energía emitida.
  • ρ(x) es la reflectividad del punto, que da la energía reflejada por unidad de área multiplicando por la energía incidente por unidad de área (la energía total que llega de otros parches).
  • S denota que la variable de integración x' recorre todas las superficies de la escena.
  • r es la distancia entre x y x'
  • θ x y θ x' son los ángulos entre la línea que une x y x' y los vectores normales a la superficie en x y x' respectivamente.
  • Vis( x , x' ) es una función de visibilidad, definida como 1 si los dos puntos x y x' son visibles entre sí, y 0 si no lo son.
El factor de forma geométrica (o "ángulo sólido proyectado") F ij .

F ij se puede obtener proyectando el elemento A j sobre la superficie de un hemisferio unitario y luego proyectándolo a su vez sobre un círculo unitario alrededor del punto de interés en el plano de A i . El factor de forma es entonces igual a la proporción del círculo unitario cubierto por esta proyección.

Los factores de forma obedecen a la relación de reciprocidad A i F ij = A j F ji

Si las superficies se aproximan mediante un número finito de parches planos, cada uno de los cuales se considera que tiene una radiosidad constante B i y una reflectividad ρ i , la ecuación anterior da la ecuación de radiosidad discreta,

B i = E i + ρ i j = 1 n F i j B j {\displaystyle B_{i}=E_{i}+\rho _{i}\sum _{j=1}^{n}F_{ij}B_{j}}

donde F ij es el factor de visión geométrico para la radiación que sale de j y llega al parche i .

Esta ecuación se puede aplicar a cada parche. La ecuación es monocromática, por lo que la reproducción de la radiosidad del color requiere un cálculo para cada uno de los colores requeridos.

Métodos de solución

La ecuación se puede resolver formalmente como ecuación matricial, para dar la solución vectorial:

B = ( I ρ F ) 1 E {\displaystyle B=(I-\rho F)^{-1}E\;}

Esto proporciona directamente la solución completa de "rebote infinito" para B. Sin embargo, la cantidad de cálculos para calcular la solución matricial varía de acuerdo con n 3 , donde n es la cantidad de parches. Esto se vuelve prohibitivo para valores realistas de n .

En cambio, la ecuación se puede resolver más fácilmente de forma iterativa, aplicando repetidamente la fórmula de actualización de un solo rebote anterior. Formalmente, esta es una solución de la ecuación matricial por iteración de Jacobi . Debido a que las reflectividades ρ i son menores que 1, este esquema converge rápidamente, requiriendo típicamente solo un puñado de iteraciones para producir una solución razonable. También se pueden utilizar otros métodos iterativos estándar para soluciones de ecuaciones matriciales, por ejemplo, el método de Gauss-Seidel , donde los valores actualizados para cada parche se utilizan en el cálculo tan pronto como se calculan, en lugar de que todos se actualicen sincrónicamente al final de cada barrido. La solución también se puede ajustar para iterar sobre cada uno de los elementos de envío a su vez en su bucle principal más externo para cada actualización, en lugar de cada uno de los parches de recepción. Esto se conoce como la variante de disparo del algoritmo, en oposición a la variante de recolección . Utilizando la reciprocidad del factor de vista, A i F ij = A j F ji , la ecuación de actualización también puede reescribirse en términos del factor de vista F ji visto por cada parche de envío A j :

A i B i = A i E i + ρ i j = 1 n A j B j F j i {\displaystyle A_{i}B_{i}=A_{i}E_{i}+\rho _{i}\sum _{j=1}^{n}A_{j}B_{j}F_{ji}}

Esto a veces se conoce como la formulación de "potencia", ya que ahora es la potencia total transmitida de cada elemento la que se actualiza, en lugar de su radiosidad.

El factor de visión F ij se puede calcular de varias maneras. Los primeros métodos utilizaban un hemicubo (un cubo imaginario centrado en la primera superficie sobre la que se proyectaba la segunda superficie, ideado por Michael F. Cohen y Donald P. Greenberg en 1985). La superficie del hemicubo se dividía en cuadrados con forma de píxel, para cada uno de los cuales se podía calcular fácilmente un factor de visión de forma analítica. El factor de forma completo se podía aproximar sumando la contribución de cada uno de los cuadrados con forma de píxel. La proyección sobre el hemicubo, que se podía adaptar a partir de métodos estándar para determinar la visibilidad de polígonos, también resolvía el problema de las zonas intermedias que oscurecían parcialmente a las que estaban detrás.

Sin embargo, todo esto era bastante costoso en términos computacionales , porque idealmente los factores de forma deben derivarse para cada par posible de parches, lo que lleva a un aumento cuadrático en el cálculo a medida que aumenta el número de parches. Esto se puede reducir un poco utilizando un árbol de partición de espacio binario para reducir la cantidad de tiempo dedicado a determinar qué parches están completamente ocultos de otros en escenas complejas; pero aún así, el tiempo dedicado a determinar el factor de forma todavía suele escalar como n log n . Los nuevos métodos incluyen la integración adaptativa. [4]

Métodos de muestreo

De hecho, los factores de forma F ij no son necesarios explícitamente en ninguna de las ecuaciones de actualización; ni para estimar la intensidad total Σ j F ij B j obtenida de toda la vista, ni para estimar cómo se distribuye la potencia A j B j que se irradia. En cambio, estas actualizaciones se pueden estimar mediante métodos de muestreo, sin tener que calcular nunca los factores de forma explícitamente. Desde mediados de la década de 1990, estos métodos de muestreo han sido los más utilizados para los cálculos prácticos de radiosidad.

La intensidad obtenida se puede estimar generando un conjunto de muestras en el círculo unitario, levantándolas hasta el hemisferio y luego viendo cuál era la radiosidad del elemento en el que se habría originado un rayo que llegase en esa dirección. La estimación de la intensidad obtenida total es entonces simplemente el promedio de las radiosidades descubiertas por cada rayo. De manera similar, en la formulación de potencia, la potencia se puede distribuir generando un conjunto de rayos a partir del elemento radiante de la misma manera y distribuyendo la potencia para que se distribuya de manera uniforme entre cada elemento que impacta un rayo.

Se trata, en esencia, de la misma distribución que un programa de trazado de trayectorias muestrearía al rastrear hacia atrás un paso de reflexión difusa; o que un programa de trazado de rayos bidireccional muestrearía para lograr un paso de reflexión difusa hacia delante cuando se mapea la fuente de luz hacia delante. Por lo tanto, el enfoque de muestreo representa, en cierta medida, una convergencia entre las dos técnicas; la diferencia clave es que la técnica de radiosidad apunta a construir un mapa suficientemente preciso de la radiancia de todas las superficies de la escena, en lugar de solo una representación de la vista actual.

Reducción del tiempo de cálculo

Aunque en su forma básica se supone que la radiosidad tiene un aumento cuadrático en el tiempo de cálculo con la geometría añadida (superficies y parches), esto no tiene por qué ser así. El problema de la radiosidad se puede reformular como un problema de renderización de una escena con texturas mapeadas . En este caso, el tiempo de cálculo aumenta solo linealmente con la cantidad de parches (ignorando cuestiones complejas como el uso de la memoria caché ).

Tras el entusiasmo comercial por las imágenes mejoradas con radiosidad, pero antes de la estandarización del cálculo rápido de radiosidad, muchos arquitectos y artistas gráficos utilizaron una técnica a la que se denominaba vagamente radiosidad falsa . Al oscurecer las áreas de los mapas de textura correspondientes a esquinas, [ cita requerida ] juntas y huecos, y aplicarlos mediante autoiluminación o mapeo difuso, se podía crear un efecto similar a la radiosidad de interacción de parches con un renderizador de línea de escaneo estándar (cf. oclusión ambiental ).

La radiosidad estática precalculada se puede mostrar en tiempo real a través de Lightmaps en computadoras de escritorio actuales con hardware de aceleración de gráficos estándar .

Ventajas

Representación moderna de la tetera de Utah . Se utilizó radiosidad para toda la iluminación difusa en esta escena.

Una de las ventajas del algoritmo Radiosity es que es relativamente sencillo de explicar e implementar. Esto lo convierte en un algoritmo útil para enseñar a los estudiantes sobre algoritmos de iluminación global. Un renderizador de iluminación directa típico ya contiene casi todos los algoritmos ( transformaciones de perspectiva , mapeo de texturas , eliminación de superficies ocultas ) necesarios para implementar la radiosity. No se requieren sólidos conocimientos de matemáticas para comprender o implementar este algoritmo [ cita requerida ] .

Limitaciones

Los métodos de radiosidad típicos solo tienen en cuenta las trayectorias de luz de la forma LD*E, es decir, las trayectorias que comienzan en una fuente de luz y hacen múltiples rebotes difusos antes de llegar al ojo. Aunque existen varios enfoques para integrar otros efectos de iluminación, como los reflejos especulares [5] y brillantes [6] , los métodos basados ​​en radiosidad generalmente no se utilizan para resolver la ecuación de renderización completa.

La radiosidad básica también tiene problemas para resolver cambios repentinos en la visibilidad (por ejemplo, sombras con bordes marcados) porque la discretización regular y gruesa en elementos constantes por partes corresponde a un filtro de caja de paso bajo del dominio espacial. El mallado de discontinuidad [1] utiliza el conocimiento de los eventos de visibilidad para generar una discretización más inteligente.

Confusión sobre la terminología

Radiosity fue quizás el primer algoritmo de renderización de uso generalizado que tuvo en cuenta la iluminación indirecta difusa. Los algoritmos de renderización anteriores, como el trazado de rayos de estilo Whitted, eran capaces de calcular efectos como reflejos, refracciones y sombras, pero a pesar de ser fenómenos altamente globales, estos efectos no se denominaban comúnmente " iluminación global ". Como consecuencia, los términos " interreflexión difusa " y "radiosidad" se confundieron con "iluminación global" en el lenguaje popular . Sin embargo, los tres son conceptos distintos.

El método de radiosidad, en el contexto de los gráficos por ordenador, se deriva del método de radiosidad en transferencia de calor (y es fundamentalmente el mismo que él) . En este contexto, la radiosidad es el flujo radiativo total (tanto reflejado como reirradiado) que sale de una superficie; esto también se conoce a veces como excitación radiante . El cálculo de la radiosidad, en lugar de las temperaturas de la superficie, es un aspecto clave del método de radiosidad que permite aplicar métodos matriciales lineales al problema.

Véase también

Referencias

  1. ^ Dudka, Kamil. "RRV - Radiosity Renderer and Visualizer". dudka.cz . Consultado el 1 de febrero de 2013 .
  2. ^ "Cindy Goral, Kenneth E. Torrance, Donald P. Greenberg y B. Battaile, Modelado de la interacción de la luz entre superficies difusas", Computer Graphics , vol. 18, n.º 3. ( PDF )
  3. ^ "T. Nishita, E. Nakamae, Representación en semitonos de objetos 3D con bordes suaves mediante un método de escaneo múltiple", Journal of IPSJ, vol. 25, n.º 5, págs. 703-711, 1984 (en japonés) ( PDF )
  4. ^ G Walton, Cálculo de factores de visión obstruida mediante integración adaptativa , Informe NIST NISTIR-6925, véase también http://view3d.sourceforge.net/
  5. ^ Wallace, John R.; Cohen, Michael F.; Greenberg, Donald P. (agosto de 1987). "Una solución de dos pasos para la ecuación de renderizado: una síntesis de los métodos de trazado de rayos y radiosidad". ACM SIGGRAPH Computer Graphics . 21 (4): 311–320. doi :10.1145/37402.37438. ISSN  0097-8930.
  6. ^ "Agrupamiento para iluminación global brillante". Archivado desde el original el 12 de octubre de 2006. Consultado el 29 de diciembre de 2006 .

Lectura adicional

  • Descripción general de la radiosidad, de HyperGraph de SIGGRAPH (proporciona un algoritmo de radiosidad matricial completo y un algoritmo de radiosidad progresiva)
  • Radiosity, de Hugo Elias (también proporciona una descripción general de los algoritmos de iluminación, junto con ejemplos de programación)
  • Radiosidad, por Allen Martin (una explicación un poco más matemática de la radiosidad)
  • ROVER, por el Dr. Tralvex Yeap (Biblioteca de resúmenes y bibliografía de Radiosity)
  • Radiosidad: Implementaciones básicas (Estudio básico de radiosidad)
  • RADical, de Parag Chaudhuri (una implementación de la variante de disparo y clasificación del algoritmo de radiosidad progresiva con aceleración OpenGL, que se extiende desde GLUTRAD de Colbeck)
  • Renderizador y visualizador de radiosidad (implementación simple del renderizador de radiosidad basado en OpenGL )
  • Enlighten (código de software con licencia que proporciona radiosidad en tiempo real para aplicaciones de juegos de computadora. Desarrollado por la empresa británica Geomerics )
Retrieved from "https://en.wikipedia.org/w/index.php?title=Radiosity_(computer_graphics)&oldid=1192179386"