Trazado de ruta y materiales


8

Me pregunto sobre la técnica utilizada al muestrear un material en capas para el próximo evento en un trazado de ruta. Tengo un material con tres capas: una base difusa, lóbulos especulares y brillantes. ¿Cómo se elige una capa discreta para muestrear para la siguiente dirección del rayo? ¿Es solo una selección aleatoria? Si es así, ¿se asignan pesos iguales a las capas o se usan pesos basados ​​en la contribución final de un lóbulo? Gracias por cualquier idea de esta etapa de muestreo.

~ M

Respuestas:


12

Esta pregunta está algo relacionada con esta .

Como ya ha dicho Alan, seguir el camino de luz real a través de cada capa conduce a resultados más precisos físicamente. Basaré mi respuesta en un documento de Andrea Weidlich y Alexander Wilkie ( "Superficies de micro facetas en capas arbitrarias" ) que he leído e implementado parcialmente. En el artículo, los autores suponen que la distancia entre dos capas es menor que el radio de un elemento de área diferencial. Esta suposición simplifica la implementación porque no tenemos que calcular los puntos de intersección por separado para cada capa, en realidad suponemos que todos los puntos de intersección sobre las capas son exactamente el mismo punto.

Según el documento, se deben resolver dos problemas para obtener material de varias capas. El primero es muestrear adecuadamente las capas y el segundo es encontrar el BSDF resultante generado por la combinación de los múltiples BSDF que se encuentran a lo largo de la ruta de muestreo.

ACTUALIZACIÓN: En realidad, he adoptado un método diferente para implementar la evaluación de este modelo en capas. Si bien me he mantenido con la idea de considerar que los puntos de intersección son exactamente el mismo punto a lo largo de las capas, he calculado el muestreo y el BRDF final de manera diferente: para el muestreo, he usado el trazado de rayos ordinario, pero a través de las capas (usando ruso Ruleta para seleccionar entre reflexión / refracción cuando ese sea el caso); para la evaluación final de BRDF, simplemente multiplico cada BRDF atravesado por la trayectoria del rayo (ponderando las radiaciones incidentes según el coseno del rayo incidente).

Muestreo

En esta primera etapa, determinaremos la ruta de luz real a través de las capas. Cuando un rayo de luz se mueve de un medio menos denso, por ejemplo, aire, a un medio más denso, por ejemplo, vidrio, parte de su energía se refleja y la parte restante se transmite. Puede encontrar la cantidad de energía que se refleja a través de las ecuaciones de reflectancia de Fresnel . Entonces, por ejemplo, si la reflectancia de Fresnel de un dieléctrico dado es 0.3, sabemos que se refleja el 30% de la energía y se transmitirá el 70%:

ingrese la descripción de la imagen aquí

Cuando el rayo de luz se mueve de un medio más denso a uno menos denso, se aplica el mismo principio descrito por la reflectancia de Fresnel. Sin embargo, en este caso específico, la reflexión interna total (también conocida como TIR) también podría ocurrir si el ángulo del rayo incidente está por encima del ángulo crítico. En el caso de TIR, el 100% de la energía se refleja en el material:

ingrese la descripción de la imagen aquí

Cuando la luz golpea un conductor o una superficie difusa, siempre se reflejará (siendo la dirección de reflexión relacionada con el tipo de BRDF). En un material multicapa, el camino de luz resultante será el resultado agregado de todas esas posibilidades. Por lo tanto, en el caso de un material de 3 capas, suponiendo que la primera y segunda capas son dieléctricas y la tercera capa es difusa, podríamos terminar, por ejemplo, con el siguiente camino de luz (un árbol en realidad):

ingrese la descripción de la imagen aquí

Podemos simular este tipo de interacción usando la recursión y ponderando cada trayectoria de luz de acuerdo con la reflectancia / transmisión real en los puntos incidentes correspondientes. Un problema con respecto al uso de la recursividad en este caso es que la cantidad de rayos aumenta con la profundidad de la recursión, concentrando el esfuerzo computacional en los rayos que individualmente podrían no contribuir casi nada al resultado final. Por otro lado, el resultado agregado de esos rayos individuales en niveles de recursión profunda puede ser significativo y no debe descartarse. En este caso, podemos usar la ruleta rusa (RR) para evitar ramificaciones y caminos de luz final probabilísticos sin perder energía, pero a costa de una mayor variación (resultado más ruidoso). En este caso, el resultado de la reflectancia de Fresnel, o la TIR, se usará para seleccionar aleatoriamente qué camino seguir. Por ejemplo:

ingrese la descripción de la imagen aquí

Como se puede ver, la reflectancia TIR o Fresnel puede mantener algunos rayos rebotando indefinidamente entre las capas. Hasta donde sé, Mitsuba implementa el plástico como un material de dos capas, y utiliza una solución de forma cerrada para este caso específico que representa un número infinito de rebotes de luz entre las capas. Sin embargo, Mitsuba también permite la creación de materiales multicapa con un número arbitrario de capas, en cuyo caso impone un número máximo de rebotes internos ya que no parece existir una solución de forma cerrada para el caso general. Como efecto secundario, se puede perder algo de energía en el proceso de renderizado, haciendo que el material se vea más oscuro de lo que debería ser.

En mi implementación actual de material multicapa, permito un número arbitrario de rebotes internos a costa de tiempos de renderización más largos (bueno ... en realidad, he implementado solo dos capas ... una dieléctrica y una difusa :).

Una opción adicional es mezclar ramificaciones y RR. Por ejemplo, los rayos iniciales (niveles profundos más bajos) pueden presentar una contribución sustancial a la imagen final. Por lo tanto, uno podría elegir ramificarse solo en la primera o dos intersecciones, usando solo RR después. Este es, por ejemplo, el enfoque utilizado por smallpt .

Un punto interesante con respecto a los materiales multicapa es que los rayos reflejados / transmitidos individuales pueden tomarse muestras de acuerdo con los BRDF / BTDF correspondientes de cada capa.

Evaluación del BSDF final

Considerando la siguiente ruta de luz calculada usando RR:

ingrese la descripción de la imagen aquí

Podemos evaluar la cantidad total de radiación reflejada por un BSDF multicapa considerando cada capa como un objeto individual y aplicando el mismo enfoque utilizado en el trazado de ruta ordinario (es decir, la radiación que sale de una capa será la radiación incidente para la siguiente capa). El estimador final puede representarse así por el producto de cada estimador Monte Carlo individual:Lr

Lr=(Fr1cosθ1pagsreF1(Fr2cosθ2pagsreF2(Fr3cosθ3pagsreF3(Fr2cosθ4 4pagsreF2(LyoFr1cosθ5 5pagsreF1)))))

Dado que todos los términos del estimador se multiplican, podemos simplificar la implementación calculando el BSDF final y el y factorizando el término :pagsreFLyo

Fr=Fr1Fr2Fr3Fr2Fr1

pagsreF=pagsreF1pagsreF2pagsreF3pagsreF2pagsreF1

cosθ=cosθ1cosθ2cosθ3cosθ2cosθ1

Lr=(FrcosθpagsreF)Lyo

El artículo de Andrea Weidlich y Alexander Wilkie también tiene en cuenta la absorción, es decir, cada rayo de luz podría atenuarse de acuerdo con el factor de absorción de cada capa transmisiva y su grosor. Todavía no he incluido la absorción en mi renderizador, pero está representado por un solo valor escalar, que se evaluará de acuerdo con la Ley de Beer .

Enfoques alternativos

El representador de Mitsuba utiliza una representación alternativa para material de varias capas basada en la "tabulación de funciones de reflectancia en una base de Fourier". Todavía no he profundizado en ello, pero podría ser de interés: " Un marco integral para la representación de materiales en capas " por Wenzel Jacob et al . También hay una versión ampliada de este documento.


1
Quiero preguntar (con la esperanza de que recuerdes el artículo) si estás seguro de agregar términos de coseno para cada capa? Por lo que yo entiendo, calculamos la ecuación de representación solo en la capa superior. Vamos hacia abajo para determinar la dirección de salida final y para determinar BRDF. ¿Echo de menos algo?
Mustafa Işık

@ MustafaIşık Tienes razón, en el documento no agregan los términos del coseno al BRDF final. En realidad, he adoptado un enfoque un poco diferente al propuesto en el documento (incluiré eso en mi respuesta). En el documento, proponen la definición de un BRDF único a partir de los BRDF en capas. El proceso de derivación me pareció un poco confuso: 1) No entiendo por qué agregan los BRDF individuales (creo que deberían multiplicarse);
Christian Pagot

@ MustafaIşık 2) como ha señalado, no hay multiplicación por el término coseno (creo que debe hacerlo porque estamos considerando solo la energía que incide en un área diferencial); 3) no desarrollan la expresiónt=(1-sol)+T21sol; 4) No sé si han diluido el término coseno dentro del BRDF; 5) también, TIR puede causar pérdida de energía. Debido a esas razones, he decidido rastrear cada rayo usando la ruleta rusa para decidir la refracción o la reflexión, a costa de tiempos de renderización más largos que los que finalmente obtuvieron.
Christian Pagot

1
El documento parece sencillo, pero no lo es, ya que no todos los términos ni estrategias se explican con suficiente claridad para una implementación exacta. Sin embargo, es influyente. La suya es más como una simulación evitada por el papel pero más precisa.
Mustafa Işık

3

Pensando en ello desde un punto de vista físico, parece que funcionaría como una versión generalizada de cálculo difuso / especular.

Comenzaría con la capa superior y usaría fresnel, etc. para calcular un porcentaje de luz que se refleja frente a las transmisiones. Luego, utiliza un número aleatorio para determinar cuál de estos debe hacer para su muestra.

En el caso de la reflexión, haría el lóbulo especular de su capa superior, se reflejaría en la superficie y continuaría.

En el caso de la transmisión, pasarías a la segunda capa.

En esta capa, una vez más calcularías el porcentaje de probabilidad de reflejar vs transmitir.

En el caso de la reflexión, usaría el lóbulo especular de esta segunda capa, haría la reflexión y seguiría adelante.

En el caso de la transmisión, te moverías a la capa interna.

Para esta capa más interna, una vez más, descubriría si necesitara reflexionar o transmitir.

Para la reflexión, usarías el lóbulo especular de esta capa interna.

Para la transmisión, haría su cálculo difuso, o cualquier otra cosa que su superficie más interna desee hacer para la luz transmitida (¿dispersión por debajo de la superficie? ¿Refracción? Etc.).

No estoy seguro de si cada capa debe hacer su propia refracción y si técnicamente debe mover el rayo un poco entre las capas para obtener efectos más realistas. Para su caso, puede que no haga la diferencia.

Pero básicamente, si tuviera una esfera con 3 capas, DEBERÍA comportarse como si tuviera 3 esferas diferentes anidadas entre sí y cada una tuviera una sola capa que manejara la transmisión frente a la reflexión.

Tener un material en capas es solo una forma más compacta de decir que esto es lo que quieres, en comparación con tener los tres objetos separados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.