1 pontos por GN⁺ 2023-10-24 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2023-10-24
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

    • A maioria dos BRDFs que vi até agora fica mais escura à medida que a rugosidade aumenta, como o texto menciona
      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

    • Eu sei só o mínimo de ray tracing, mas ainda assim consegui acompanhar o texto. Foi escrito de forma clara e interessante
  • 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

    • O nome vem dos experimentos clássicos de radiação de corpo negro, que usavam forno, fornalha ou forja
      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
    • Porque o interior de uma fornalha quente brilha com iluminação uniforme, como o que o teste simula
    • Como o teste observa uma situação dentro de um ambiente iluminado uniformemente por luz branca, o nome funciona mais como um mnemônico que evoca a imagem de uma fornalha muito quente
  • 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

    • No começo fica cinza, depois o contorno da esfera aparece e o fundo vai surgindo em fade. Uma esfera vermelha, uma azul e uma branca aparecem ao redor da esfera cinza/branca no centro, e então a cena volta a desaparecer em cinza
      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
    • Acho que precisa de WebGL. Você pode verificar se o WebGL está ativado no navegador?