Confundido com implementações de PBR

13

Estou descobrindo o maravilhoso mundo da matemática e estou enfrentando uma enorme parede com PBR e nomes, por isso tenho algumas perguntas: Pelo que entendi, o BRDF descreve como um material reage à luz (luz direta e reflexões recebidas). Mas em "Cook-Torrance" não vejo nada sobre reflexões, não entendo como a integro, apenas recebo luz e reflexos difusos.

Eu li muito sobre diferentes "termos difusos", como "Oren-Nayar", isso faz parte da Cook-Torrance como um "D" diferente no candidato ao DFG? substitui-o sem cálculos especulares?

Eu li muito sobre "GGX" do meu background de artista do liquidificador. Eu pensei que era algo que causava uma reflexão embaçada, mas parece que eu estava errado e agora acho esse termo GGX em várias situações diferentes, como na micro-faceta normal. distribuição neste tutorial

Então, em resumo, a questão é: como "Oren-Nayar" e "GGX" e "Cook-Torrance" se relacionam (se houver) e como faço para integrar a "reflexão vec3" nesse algoritmo?

Como eu disse antes, eu sou um novato em matemática, portanto, se sua resposta for "matemática pesada", escreva uma versão glsl / hlsl de suas equações, é muito mais fácil de entender para mim, então uma equivalência me ajudará muito

PS: Entendo que minha pergunta é embaçada, mas também é tão embaçada quanto minha compreensão do assunto.

novo em
fonte
1
Algo que pode ajudá-lo é que "especular" significa "semelhante a um espelho". Assim, quando se fala de reflexões especulares e difusas, especular significa espelho como reflexões, o que as pessoas normalmente chamam de reflexão. Difuso é apenas "coisas iluminando". Eles estão refletindo a luz também, mas estão refletindo de várias direções diferentes; portanto, o resultado não é algo em que você possa reconhecer uma imagem. Há uma escala entre a reflexão especular e difusa em objetos reais, e isso faz parte do que o parâmetro "rugosidade" dos controles PBR.
Alan Wolfe
Você pode tentar ler o artigo original da Cook-Torrance: inst.cs.berkeley.edu/~cs294-13/fa09/lectures/cookpaper.pdf - verifique também as referências listadas no final, sempre que possível (a maioria é Disponível). Vai levar algum tempo, mas é uma maneira de entender "em profundidade" o que está acontecendo.
limpe

Respostas:

11

O DFG aparece na família de BRDFs baseados em microfacet. É simplesmente o produto de três termos:

  • D: A distribuição de microfacetos.
  • F: O coeficiente de fresnel.
  • G: A atenuação geométrica entre microfacetes.

Quando alguém diz Cook-Torrance, geralmente significa um microfacet BRDF em que a distribuição (D) é Beckmann, que eu acho que é sobre o que era o artigo original de Cook-Torrance.

GGX é realmente apenas uma distribuição diferente (termo D). GTR é outro. Os nomes são frequentemente usados ​​como atalhos para significar um BRDF usando essa distribuição.

Agora, todos eles assumem reflexão especular (ou refração) nos microfacetes, daí o termo fresnel. Se você adota uma idéia semelhante, mas usa microfacetes difusos (lambertianos), obtém o BRDF de Oren-Nayar. Eu acho que um é baseado em uma distribuição gaussiana dos microfacetes, mas eu não estou familiarizado com os detalhes.

Olivier
fonte
ok, isso é um pouco mais claro, mas ainda não explica o que faço com o "vec3 reflectionColour" que recebo ao relançar um raio em raytracing / marching ou usando SSR / cubemap. É como as equações levando em consideração apenas um ponto de foco / foco, mas nenhuma idéia para luzes ou reflexos da área. Parece também que o "especular" está relacionado apenas ao "ponto branco" em vez de reflexão por causa daquilo que não faz sentido = /
newin
@newin Em um modelo PBR, especular e reflexão são nomes diferentes para a mesma coisa. É um destaque especular quando o raio atinge uma luz, um reflexo quando atinge outro objeto (ou um ambiente). Quanto ao seu reflectionColour, depende de como o raio é gerado. Você está amostrando iluminação direta? Luzes da área? Integrando um BRDF e um mapa do ambiente? Tente ler o Rastreamento de caminho progressivo com amostragem de luz explícita . Há uma resposta longa que pode esclarecer algumas coisas sobre o processo.
Olivier
Então, se eu entendi corretamente que "vec3 reflectionColour" deve ser tratado como uma luz e se eu quiser fazer a luz emitir malha, devo apenas colocar um valor> 1 no albedo e é isso? (Eu estou tentando integrar PBR no cenário diferente a primeira é uma raymarcher onde eu quero malhas emissor de luz, o outro é um motor de jogo que o uso SSR e provavelmente usará cubemaps)
Newin
a luz emitida @ newin é apenas adicionada em cima de tudo o resto. Não está relacionado aos BRDFs. Se a sua malha não emitir nada além de emitir luz, você nem precisa rastrear mais raios a partir dela. Um albedo grande amplifica a luz (fisicamente errada), não a cria.
Olivier