Trazador de ruta: materiales de varias capas y muestreo de importancia

12

Actualmente estoy tratando de implementar un trazado de ruta de Monte Carlo. He investigado un poco y parece que un enfoque común de los materiales es usar un modelo en capas. Algo como esto:

ingrese la descripción de la imagen aquí

Cuando la luz golpea la superficie, Fresnel nos dice cuánto de esa luz es reflejada por la primera capa y cuánto va a la segunda, y así sucesivamente.

Entonces hice algo similar, pero más simple: solo una capa especular y una capa difusa. No hay transmitancia todavía. Hasta ahora todo bien, utilizo un simple brdf ponderado en coseno para mi difuso y el modelo microfacetado Cook-Torrance para mi especular.

Ahora viene la parte difícil: ¿qué debo hacer una vez que un rayo toca la superficie? Normalmente, elegiría el brdf correspondiente al material de la superficie, tomaría una muestra de la dirección de la luz incidente, evaluaría el brdf y lo dividiría por la función de distribución de probabilidad correcta.

Pero aquí, un golpe de superficie corresponde efectivamente a múltiples materiales. La forma ingenua de manejar esto sería muestrear una vez por cada golpe de capa. Pero esto claramente es fuente de un gran éxito en el rendimiento, lo que hace que mi camino se convierta efectivamente en un árbol.

¿Hay una mejor solución?

Castan
fuente
1
¿No puedes 'monte-carlo' las capas de material? Por ejemplo, ponderar cada capa de acuerdo con su reflectividad y elegir una al azar según eso. Las capas más profundas necesitarán algo de atenuación en función de la suma de absorción de todas las capas por encima de ellas.
PaulHK
PaulHK Eso es exactamente lo que estoy haciendo en mi trazado de ruta, la ruleta rusa para cada interfaz entre capas, por lo que no hay ramificación en absoluto. Desafortunadamente, mi implementación aún no está terminada, por lo que no tengo información sobre el rendimiento real. He basado mi implementación en el documento "Superficies de micro facetas en capas arbitrarias" de Andrea Weidlich y Alexander Wilkie, que parece ser más limitado que el marco de Wenzel Jakob (señalado en la respuesta de Stefan), pero que es capaz de generar resultados bastante buenos y es mucho más sencillo de implementar.
Christian Pagot

Respuestas:

7

Wenzel Jakob et al presentaron un marco para Materiales en capas en SIGGRAPH 2014. La Sección 6.2 explica el muestreo de importancia. Si prefiere el código sobre las ecuaciones, el método se implementa en el renderizador de Mitsuba .

Stefan Werner
fuente
2
Tenga en cuenta que el método de Jakob et al. se basa en la representación de datos BSDF tabulados en alguna representación especializada de Fourier. Para más detalles, consulte también el informe técnico correspondiente . Una implementación de código abierto también está disponible en la tercera edición más reciente de PBRT . Los archivos BSDF se pueden generar con layerlab en Python.
tizian