Compensación por pérdida de energía en modelos BSDF de microfaceta de dispersión única

11

Modelos de superficie basados ​​en microfaceta de dispersión única como el Torrance-Sparrow BRDF original o modelos derivados como el BSDF para superficies dieléctricas rugosas de Walter et al. descuide la interreflexión de la luz entre las microfacetas, lo que resulta en una pérdida de energía que causa oscurecimiento, especialmente a valores de rugosidad más altos.

El problema se puede demostrar fácilmente con la prueba del horno. Las siguientes imágenes muestran el comportamiento de mi implementación de un BRDF de microfaceta conductora utilizando el modelo Smith y la distribución GGX para parámetros de rugosidad de 0.2 a 1.0 (el coeficiente de Fresnel se establece deliberadamente en 1 aquí para que el problema sea más fácil de ver):

rugosidad 0.2 rugosidad 0.4 rugosidad 0.6 rugosidad 0.8 rugosidad 1.0

Prueba de horno de BSDF dieléctrico rugoso (IoR 1.51) utilizando el modelo Smith y la distribución de microfaceta GGX para parámetros de rugosidad de 0.2 a 1.0:

rugosidad 0.2 rugosidad 0.4 rugosidad 0.6 rugosidad 0.8 rugosidad 1.0

Eric Heitz y col. Hace poco propuse un modelo de dispersión múltiple que resuelve el problema de oscurecimiento resolviendo la interacción de la luz por completo, pero hay problemas de rendimiento debido a la naturaleza estocástica de su rutina de evaluación, tal como lo mencionó el propio Heitz en el foro LuxRender .

¿Existe un método de compensación conocido para recuperar la energía perdida de los modelos de dispersión única? No necesariamente es físicamente correcto, pero al menos no rompe demasiado la plausibilidad física (reciprocidad de Helmholtz y conservación de la energía) e, idealmente, sin la necesidad de parámetros de ajuste manual.

En el BSDF de Disney , hay un componente parametrizado llamado "brillo" (básicamente un lóbulo brillante basado en Fresnel) que se puede usar para compensar el oscurecimiento en los bordes, pero como mencionan en su curso Siggraph 2015 , es un método muy ad hoc:

"... esto es muy aproximado, y no funciona tan bien para otros valores de rugosidad ..."

El comentario antes mencionado de Eric Heitz en el foro LuxRender también sugiere usar algún truco de compensación, pero, desafortunadamente, no entra en detalles:

Que yo sepa, puede usar algunos trucos más simples para mejorar la conservación de energía en los modelos de dispersión única (como ajustar el albedo). Sin embargo, si hace eso, no puede obtener un material que conserve perfectamente la energía (por ejemplo, vidrio rugoso blanco perfecto) sin romper la reciprocidad del BSDF.

ivokabel
fuente

Respuestas:

8

Que yo sepa, no existe una forma fácil y analítica de recuperar la energía perdida en los modelos de dispersión única. Las técnicas anteriores calculan previamente la pérdida de energía y la reinyectan en el BRDF como un componente de tipo difuso:

Lo que proponen es conservador de energía y recíproco, y es probablemente la forma más sencilla de corregir el oscurecimiento visual debido a la pérdida de energía. El principal inconveniente es que, dado que la pérdida de energía no tiene una expresión analítica, debe calcularse previamente y almacenarse en una tabla de consulta.

Eric Heitz
fuente