Teste do forno branco
(lousodrome.net)- Em iluminação ambiente uniforme, um objeto 100% refletivo não deve se distinguir do fundo; essa propriedade permite verificar rapidamente a consistência física de um renderizador
- Seja fosco, espelhado ou um material intermediário, se for totalmente refletivo e iluminado uniformemente, deve parecer igual ao ambiente, como se tivesse desaparecido
- A neve fresca pode ter albedo de até 90–98%, portanto, quando combinada com tempo nublado ou neblina, pode ocorrer um whiteout em que céu e neve não se distinguem
- Esse teste verifica se a BRDF perde ou cria energia; em um ambiente cinza, energia refletida em excesso aparece mais clara, facilitando encontrar erros
- Uma BRDF Lambertiana branco puro é simples e tem conservação de energia clara, sendo útil como verificação básica para revelar bugs de integração, como problemas na distribuição de amostragem, pesos, PDF ou a ausência de fatores π ou 2
Por que um objeto deve desaparecer sob luz uniforme
- Quando um objeto 100% refletivo é iluminado por um ambiente uniforme, ele não deve se distinguir do fundo
- Essa propriedade independe de o objeto ser fosco, refletir como um espelho ou ter um material intermediário
- Se o objeto não aparece no resultado da renderização, isso é um sinal de que o resultado corresponde ao esperado matematicamente
Caso semelhante no mundo real: whiteout
- A neve fresca pode ter albedo tão alto quanto 90–98%, chegando perto de um branco quase perfeito
- Quando tempo nublado ou neblina se sobrepõem a isso, pode surgir uma condição de whiteout, em que neve e céu não se distinguem
- Nesse momento, todas as direções parecem um branco uniforme, e pode ser difícil distinguir a olho nu até mesmo uma inclinação logo à frente
Verificação da conservação de energia da BRDF
- O teste do forno branco é frequentemente usado para verificar se uma BRDF satisfaz a conservação de energia
- O ponto central é confirmar se a energia não desaparece nem é criada durante o processo de reflexão
- Por exemplo, ele pode revelar problemas em que o material parece mais escuro conforme a rugosidade (roughness) aumenta, ou situações em que inter-reflexões chegam a um nível difícil de ignorar
- Além de um ambiente branco, um ambiente cinza também é útil
- Se a energia refletida for excessiva, ela aparecerá mais clara que o entorno, revelando o erro
Como verificar a implementação da integração no renderizador
- O teste do forno branco também é eficaz para verificar não apenas a BRDF em si, mas a parte de integração do renderizador
- Uma BRDF Lambertiana com albedo de 100% tem conservação de energia perfeita e implementação simples, por isso é boa para revelar bugs na implementação do renderizador
- Há vários pontos em que problemas podem surgir
- Distribuição de amostragem
- Peso das amostras
- Cálculo da PDF
- Ausência de fatores como π ou 2
- Esses erros podem ser difíceis de encontrar porque a imagem resultante ainda pode parecer plausível
Exemplo de falha e uso na depuração
- Ao escrever um path tracer ou uma variação dele, criar um environment map pré-convoluído ou testar uma distribuição de amostragem diferente, é útil primeiro passar no teste do forno branco com uma BRDF Lambertiana branco puro
- Depois de passar por essa etapa, é possível confiar até certo ponto na implementação antes de testar a BRDF em si
- Após comentários no Hacker News, foi adicionada ao exemplo no ShaderToy a macro
SIMULATE_INCORRECT_INTEGRATION, que permite observar uma falha no teste - Essa macro simula um bug de integração incorreta, como esquecer que a integral hemisférica corresponde a 2π ou não levar em conta a distribuição de amostragem
- Quando o bug é ativado, a esfera não consegue refletir a quantidade correta de energia e passa a ficar visível na tela
1 comentários
Comentários do Hacker News
Recentemente implementei um renderizador baseado em física (PBR) seguindo o tutorial de PBR do learnopengl, mas ele não passou no teste da fornalha branca
Isso me fez perceber que eu não entendia muito bem a matemática que implementei e, como o autor disse, não funcionava simplesmente multiplicar arbitrariamente por π ou por 2
Existem modelos melhores que consideram a reflexão mútua entre as microfacetas teóricas que formam a distribuição de normais do BRDF, mas mesmo nesses é difícil ter certeza de que passam nesse teste exatamente como está
Na prática, a maioria dos usados amplamente perde energia, e em alguns casos usam até uma tabela de consulta em cima do BRDF para compensar isso
Achei curioso ver este post no topo do HN. Na verdade existem dois testes da fornalha, e o outro é um teste em que, com emissão de 0,5 e albedo de 0,5, o resultado deve ser 1,0, exceto pelo erro de pixel causado por ruído
Há muito tempo houve uma tentativa em https://graphics.stanford.edu/~boulos/papers/brdftog.pdf de trocar conservação de energia e reprodutibilidade dos dados pelo custo de abrir mão da reciprocidade
No fim, ninguém ligou muito para ajustar automaticamente os dados de materiais em BRDFs e, mesmo entre os interessados, a preferência era por BSDFs simétricos e suficientemente conservativos
Depois disso, a maior parte das pesquisas também melhorou essa linha, especialmente porque quebrar a simetria faz técnicas como path tracing bidirecional ficarem bem estranhas
Fiquei curioso sobre por que o nome do teste inclui furnace. Entendo o conceito geral, mas o nome parece bem arbitrário; queria saber se há alguma razão por trás dele
Aqui a ideia é parecida: o objeto fica preso dentro de uma cavidade com um espectro de emissão uniforme. Só que, neste caso, em vez de corpo negro, é branco
Coincidentemente, há poucos dias o YouTube me recomendou um vídeo sobre esse tema, que fazia parte do conteúdo previsto para o lançamento do Blender 4.0
Um novo Multiscatter GGX foi adicionado ao BSDF, e o vídeo aprofunda muito mais o assunto e mostra vários exemplos
https://www.youtube.com/watch?v=v6qXbV_Q7z4
Não faço ideia de como o ShaderToy incorporado deveria aparecer originalmente. Mesmo apertando play e esperando, nada acontece por mais de um minuto
Acho que o texto ficaria bem melhor se tivesse ao menos algumas capturas de tela de testes que falharam
Depois a esfera vermelha e a azul reaparecem e algo parecido com um reflexo surge na esfera central, mas ela acaba “se misturando” ao fundo e fica difícil perceber que é uma esfera