La prueba del horno blanco
(lousodrome.net)- En una iluminación ambiental uniforme, un objeto con reflectancia del 100% no debería distinguirse del fondo, y esta propiedad permite verificar rápidamente la consistencia física de un renderizador
- Ya sea mate, espejo o un material intermedio, si es perfectamente reflectante y está iluminado de manera uniforme, debe verse igual que el entorno y parecer que desaparece
- La nieve fresca puede alcanzar un albedo de 90–98%, y al combinarse con tiempo nublado o niebla puede producirse un whiteout en el que cielo y nieve se vuelven indistinguibles
- Esta prueba verifica que la BRDF no pierda ni cree energía, y en un entorno gris el exceso de energía reflejada se muestra con más brillo, lo que facilita encontrar errores
- Una BRDF Lambertiana de blanco puro es simple y su conservación de energía es clara, por lo que resulta útil como comprobación básica para revelar errores de integración como distribución de muestreo, pesos, PDF o la omisión de coeficientes como π o 2
Por qué un objeto debería desaparecer bajo luz uniforme
- Si un objeto con reflectancia del 100% está iluminado por un entorno uniforme, no debería distinguirse del fondo
- Esta propiedad se cumple independientemente de si el objeto es mate, reflectante como un espejo o un material intermedio
- Si el objeto no se ve en el resultado del render, es una señal de que coincide con el resultado esperado matemáticamente
Un caso parecido en el mundo real: whiteout
- La nieve fresca puede tener un albedo alto, de 90–98%, y acercarse a un blanco casi perfecto
- Si además hay tiempo nublado o niebla, puede producirse un estado de whiteout en el que la nieve y el cielo se vuelven indistinguibles
- En ese momento, todas las direcciones se ven como un blanco uniforme, y puede ser difícil distinguir a simple vista incluso la pendiente justo enfrente
Verificación de conservación de energía en la BRDF
- La prueba del horno blanco se usa con frecuencia para comprobar si una BRDF cumple con la conservación de energía
- Lo esencial es verificar que durante la reflexión la energía no desaparezca ni se genere de la nada
- Por ejemplo, puede servir para detectar problemas donde el material se ve más oscuro al aumentar la rugosidad (
roughness), o situaciones en las que las reflexiones múltiples llegan a un nivel que no puede ignorarse - Además de un entorno blanco, también resulta útil un entorno gris
- Si la energía reflejada es excesiva, aparecerá más brillante que el entorno y el error quedará en evidencia
Cómo revisar la implementación de integración del renderizador
- La prueba del horno blanco también es efectiva para revisar la parte de integración del renderizador, no solo la BRDF en sí
- Una BRDF Lambertiana con albedo del 100% conserva perfectamente la energía y además es simple de implementar, por lo que es ideal para exponer errores en la implementación del renderizador
- Hay varios puntos donde pueden surgir problemas
- Distribución de muestreo
- Pesos de las muestras
- Cálculo de la PDF
- Omisión de coeficientes como π o 2
- Estos errores pueden ser difíciles de encontrar porque la imagen resultante todavía puede parecer plausible
Ejemplos de fallos y uso para depuración
- Al escribir un path tracer o una de sus variantes, crear un pre-convolved environment map o probar otras distribuciones de muestreo, resulta útil hacer pasar primero la prueba del horno blanco con una BRDF Lambertiana de blanco puro
- Una vez superado este paso, se puede confiar hasta cierto punto en la implementación antes de probar la BRDF en sí
- Después de un comentario en Hacker News, al ejemplo de ShaderToy se le añadió una macro
SIMULATE_INCORRECT_INTEGRATIONpara poder observar un fallo de la prueba - Esta macro imita un error de integración incorrecta, como olvidar que la integral sobre el hemisferio corresponde a 2π o no tener en cuenta la distribución de muestreo
- Cuando el bug está activado, la esfera no refleja la cantidad correcta de energía y por eso se vuelve visible en pantalla
1 comentarios
Comentarios de Hacker News
Hace poco implementé un renderizador basado en física (PBR) siguiendo el tutorial de PBR de learnopengl, pero no pasó la prueba del horno blanco
Gracias a eso me di cuenta de que en realidad no entendía muy bien las matemáticas que implementé y, tal como dice el autor, no bastaba con que todo cuadrara multiplicando π o 2 arbitrariamente
También hay modelos que consideran las reflexiones mutuas entre las microfacetas teóricas que forman la distribución normal que define la BRDF, y son mejores, pero aun así es difícil estar seguro de que pasen esta prueba tal cual
En la práctica, la mayoría de las que se usan ampliamente pierden energía, y a veces se les agrega una tabla de consulta encima de la BRDF para compensarlo
Me sorprende ver este artículo en la parte alta de HN. En realidad hay dos tipos de prueba del horno, y la otra es una prueba en la que, con emisión de 0.5 y albedo de 0.5, el resultado debería ser 1.0 salvo por el error de píxeles con ruido
Hace mucho tiempo, en https://graphics.stanford.edu/~boulos/papers/brdftog.pdf, hubo un intento de intercambiar conservación de energía por reproducibilidad de datos, renunciando en ese proceso a la reciprocidad
Al final, a nadie le importó demasiado automatizar el ajuste de datos de materiales en una BRDF, y aun entre quienes sí tenían interés, se preferían más los BSDF simétricos y suficientemente conservativos
La investigación posterior también se enfocó mayormente en mejorar eso, sobre todo porque si se rompe la simetría, técnicas como el trazado bidireccional de trayectorias se vuelven bastante extrañas
Me pregunto por qué el nombre de la prueba incluye furnace. Entiendo el concepto general, pero el nombre se siente bastante arbitrario; me da curiosidad si tiene algún fundamento
Aquí la idea es parecida: el objeto está atrapado dentro de una cavidad con un espectro de emisión uniforme. Solo que en este caso no es negro, sino blanco
Justo hace unos días me apareció en las recomendaciones de YouTube un video sobre este tema, y era contenido de la próxima versión de Blender 4.0
Se agrega una nueva función Multiscatter GGX al BSDF, entra mucho más a fondo y muestra bastantes ejemplos
https://www.youtube.com/watch?v=v6qXbV_Q7z4
No sé cómo se supone que debería verse el ShaderToy incrustado. Le doy reproducir y espero, pero no pasa nada por más de un minuto
Creo que el artículo sería mucho mejor aunque fuera con unas cuantas capturas de pantalla de pruebas fallidas
Después vuelven a aparecer la esfera roja y la azul, y se ve algo como un reflejo en la esfera central, pero la esfera central se “mezcla” con el fondo y cuesta distinguir que es una esfera