Compensação por perda de energia em modelos BSDF de microfacet de dispersão única

11

Modelos de superfície baseados em microfacet de dispersão única como o original Torrance-Sparrow BRDF ou modelos derivados como o BSDF para superfícies dielétricas rugosas de Walter et al. negligenciar a inter-reflexão da luz entre microfacetes, o que resulta em perda de energia, causando escurecimento, especialmente em valores mais altos de rugosidade.

O problema pode ser facilmente demonstrado usando o teste do forno. As imagens a seguir mostram o comportamento da minha implementação de um microfacet condutor BRDF usando o modelo Smith e a distribuição GGX para parâmetros de rugosidade de 0,2 a 1,0 (o coeficiente de Fresnel é deliberadamente definido como 1 aqui para facilitar a visualização do problema):

rugosidade 0.2 rugosidade 0.4 rugosidade 0.6 rugosidade 0.8 rugosidade 1.0

Teste de forno de BSDF dielétrico bruto (IoR 1.51) usando o modelo Smith e a distribuição de microfacetos GGX para parâmetros de rugosidade de 0,2 a 1,0:

rugosidade 0.2 rugosidade 0.4 rugosidade 0.6 rugosidade 0.8 rugosidade 1.0

Eric Heitz et al. recentemente propuseram um modelo de dispersão múltipla que resolve o problema de escurecimento resolvendo completamente a interação da luz, mas há problemas de desempenho devido à natureza estocástica de sua rotina de avaliação, conforme mencionado pelo próprio Heitz no fórum LuxRender .

Existe um método de compensação conhecido para recuperar a energia perdida de modelos de espalhamento único? Não necessariamente fisicamente correto, mas pelo menos não quebrando a plausibilidade física (reciprocidade de Helmholtz e conservação de energia) demais e, idealmente, sem a necessidade de parâmetros de ajuste manual.

No Disney BSDF , há um componente parametrizado chamado "brilho" (basicamente um lóbulo brilhante baseado em Fresnel) que pode ser usado para compensar o escurecimento das bordas, mas, como mencionado no curso Siggraph 2015 , é um método muito ad hoc:

"... isso é muito aproximado e não funciona tão bem com outros valores de rugosidade ..."

O comentário acima mencionado de Eric Heitz no fórum LuxRender também sugere o uso de algum truque de compensação, mas, infelizmente, não entra em detalhes:

Que eu saiba, você pode usar alguns hacks mais simples para melhorar a conservação de energia nos modelos de dispersão única (como ajustar o albedo). No entanto, se você fizer isso, não poderá obter um material perfeitamente conservador de energia (por exemplo, vidro branco áspero perfeito) sem quebrar a reciprocidade do BSDF.

ivokabel
fonte

Respostas:

8

Que eu saiba, não há uma maneira fácil e analítica de recuperar a energia perdida em modelos de dispersão única. As técnicas anteriores pré-calculam a perda de energia e a reinjectam no BRDF como um componente difuso:

O que eles propõem é conservador e recíproco de energia, e provavelmente é a maneira mais simples de corrigir o escurecimento visual devido à perda de energia. A principal desvantagem é que, como a perda de energia não possui uma expressão analítica, ela deve ser pré-computada e armazenada em uma tabela de consulta.

Eric Heitz
fonte