- Desculpe pelo longo post, mas prefiro fazer isso porque " Devil está nos detalhes " . :)
Estou escrevendo um rastreador de caminho a partir do zero e está funcionando bem para superfícies perfeitamente difusas (lambertianas) ( ou seja, o teste do forno indica - pelo menos visualmente) que ele economiza energia e as imagens renderizadas correspondem às geradas com o renderizador Mitsuba para o mesmo parâmetros). Agora estou implementando o suporte ao termo especular do modelo original de microfacet Cook-Torrance, para renderizar algumas superfícies metálicas. No entanto, parece que esse BRDF está refletindo mais energia do que a recebida. Veja as imagens de exemplo abaixo:
Imagem acima: referência Mitsuba (presumida correta): imagem: Traçado com amostragem direta de luz, amostragem importante no hemisfério, comprimento máximo do trajeto = 5, 32 spat estratificado, filtro de caixa, rugosidade da superfície = 0,2, RGB.
Imagem acima: Imagem renderizada real: Rastreio de caminho ingênuo de força bruta, amostragem uniforme do hemisfério, comprimento máximo do caminho = 5, 4096 spp estratificado, filtro de caixa, rugosidade da superfície = 0,2, RGB. Apesar de algumas diferenças com relação às configurações de renderização, é claro que a imagem renderizada não convergirá para a referência mostrada anteriormente.
Costumo pensar que não é um problema de implementação, mas uma questão referente ao uso adequado do modelo de Cook-Torrance dentro da estrutura da equação de renderização. Abaixo, explico como estou avaliando o BRDF especular e gostaria de saber se estou fazendo isso corretamente e, se não, por quê.
Antes de entrar nos detalhes minuciosos, observe que o renderizador é bastante simples: 1) implementa apenas o algoritmo de rastreamento de caminho ingênuo de força bruta - sem amostragem direta de luz, sem rastreamento de caminho bidirecional, sem MLT; 2) toda a amostragem é uniforme no hemisfério acima do ponto de interseção - nenhuma amostragem é importante, nem para superfícies difusas; 3) o caminho do raio tem um comprimento máximo fixo de 5 - sem roleta russa; 4) o brilho / refletância é informado através de tuplas RGB - sem renderização espectral.
Modelo de microfacete Cook Torrance
Agora tentarei construir o caminho que segui para implementar a expressão de avaliação especular do BRDF. Tudo começa com a equação render onde p é o ponto de intersecção na superfície , w o é o vetor de visualização, w i
A integral acima ( ou seja, o termo de reflexão da equação de renderização) pode ser aproximada com o seguinte estimador de Monte Carlo quepé a função de densidade de probabilidade (PDF) que descreve a distribuição dos vetores de amostragemwk.
Para renderização real, o BRDF e o PDF devem ser especificados. No caso do termo especular do modelo de Cook-Torrance, estou usando o seguinte BRDF que D=1
Então, essa é a expressão que estou avaliando quando um raio atinge uma superfície especular cuja refletância é descrita pelo BRDF de Cook-Torrance. Essa é a expressão que parece refletir mais energia do que a recebida. Estou quase certo de que há algo errado com ele (ou no processo de derivação), mas simplesmente não consigo identificá-lo.
Qualquer ajuda é muito bem vinda! Obrigado!
ATUALIZAR
ATUALIZAÇÃO 2
Conforme apontado por PeteUK , a autoria da formulação de Fresnel apresentada no texto original da minha pergunta foi atribuída erroneamente a Cook e Torrance. A formulação de Fresnel usada acima é realmente conhecida como aproximação de Schlick e recebe o nome de Christophe Schlick. O texto original da pergunta foi modificado de acordo.