2011-01-03 19 views
8

En el trazado de rayos, quiero calcular el sombreado para un punto donde golpeó mi rayo. "Dibujo" líneas a todas las fuentes de luz y compruebo si están bloqueadas por objetos o no. Si no están bloqueados, calculo la intensidad de la iluminación de acuerdo con su intensidad y el grado entre el "rayo de golpe" y la superficie normal.Sombreado informático a través de una superficie transparente

Pero, ¿qué pasa si la luz está bloqueada por una superficie parcialmente transparente? Entonces la luz debería iluminar el punto, pero su intensidad y color se ven afectados por el color de la superficie por la que pasa, y para calcular que necesito hacer un trazado de rayos para el punto de paso del rayo de luz (en realidad para los 2 puntos, uno de entrada y uno de salida), y esto será muy costoso, así como potencialmente casi interminable (supongo que en el posicionamiento correcto de las fuentes de luz y las superficies podrías poner el rastreador en una posición casi infinita bucle por cada golpe).

¿Hay una manera rápida y buena de aproximar el color, o debería simplemente tomar el color de la superficie como el color de la luz y su transparencia como la intensidad?

Respuesta

3

No es necesario hacer un trazado de rayos comenzando en los puntos de entrada y salida. Piensa qué clase de luz está golpeando estos puntos. Un rayo de luz que golpea la superficie translúcida en un ángulo diferente al que golpea su objeto objetivo no afectará el color de la luz que golpea al objeto objetivo.

+  *  + 
+ * + 
    + * + 
    + * + 
---------- 
| +*+ | 
| + * + | 
| + * + | 
---------- 
+ * + 
     * 
     * 
    ------- 

Esto asume, por supuesto, que no hay refracción en el material.

Ahora, si quisiera extender su rastreador de rayos a algo un poco más avanzado como trazado de ruta, entonces tendría que considerar la luz que rebota del objeto translúcido y golpea su objeto final, pero para un rastreador de rayos no necesitas preocuparte por eso

Para el objeto translúcido, modelaría la disminución en la intensidad de la luz como una función lineal de la distancia (la mayoría de los objetos del mundo real se adhieren estrechamente a esta suposición). Si modela la luz como si tuviera componentes RGB (no físicamente realistas ...), entonces disminuiría cada componente en proporción al valor de ese componente dentro del objeto.

Si quieres estar realmente avanzado con lo que hace la luz mientras estás en el objeto, entonces necesitarás activar subsurface scattering (la razón por la que la leche en un vaso no se ve como un sólido blanco y por qué los humanos son tan difíciles modelo en CGI).

EDIT: El fenómeno que mencionas de la luz que rebota hacia adelante y hacia atrás infinitamente y usando muchos cálculos es cómo se comporta la luz real. En la actualidad, los renderizadores avanzados no pueden integrar todos estos componentes ligeros y, por lo tanto, al azar, toma muestras de las distribuciones de luz. Cuantas más muestras se tomen, más se acercará la imagen a un aspecto realista, y más se acercará la integración de la luz a su verdadero valor. Esto se llama renderización de monte carlo. El trazado de ruta, el trazado de ruta bidireccional y el transporte ligero de la metrópolis son algoritmos de monte carlo que intentan simular completamente el transporte liviano. Cada algoritmo, dado el tiempo suficiente, convergerá a la misma imagen final, sin embargo, algunos son más eficientes que otros. (Ver path tracing en Wikipedia. En la parte inferior del artículo hay una imagen mejor que la que traté de dibujar).

+0

+1 ¡simplemente increíble! – BlackBear

0

Si desea superficies que puedan hacer sombreados regulares y transparencias, lo más simple es ignorar el sombreado regular de los rayos de sombra: para fines de iluminación, utilice únicamente los atributos de filtrado de las superficies transparentes. Esto evita el cálculo de iluminación potencialmente infinito que describió.

Tenga en cuenta que hay una buena forma de aproximar árboles de rayos infinitos, que se conoce con el colorido nombre de "ruleta rusa": cuando cualquier rama del árbol pierde importancia, haga una elección aleatoria para podarla. Las ramas se podan con probabilidad P y contribuyen cero al resultado (están "muertas" y no es necesario calcularlas). Las ramas que sobreviven ("ganadores") obtienen su contribución multiplicada por 1/(1-P), de modo que la aproximación resultante es correcta en promedio.

La ruleta rusa es una técnica de Monte Carlo; Es posible que desee examinar el trazado de rayo de Monte Carlo y otros métodos global illumination.

Cuestiones relacionadas