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%:
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:
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):
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:
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:
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θ1p dF1(Fr2cosθ2p dF2(Fr3cosθ3p dF3(Fr2cosθ4 4p dF2(LyoFr1cosθ5 5p dF1) ) )))
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 :p dFLyo
Fr = fr1⋅ fr2⋅ fr3⋅ fr2⋅ fr1
p dF= p dF1⋅ p dF2⋅ p dF3⋅ p dF2⋅ p dF1
cosθ = cosθ1⋅ cosθ2⋅ cosθ3⋅ cosθ2⋅ cosθ1
Lr= (Fr cosθp dF)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.
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.
fuente