Por que o H (blinn) é usado em vez do R (phong) no sombreamento especular?

22

Não consigo encontrar uma boa razão para isso em nenhum lugar. O vetor de reflexão usado em phong tem uma base simples em física. Mas o meio vetor usado em blinn aparentemente não tem base racional e não constitui uma reflexão adequada. E, no entanto, é usado em todas as chamadas funções de sombreamento "fisicamente baseadas". Se houver uma boa base física, eu gostaria de saber.

O que consegui encontrar são alguns dos motivos:

É mais rápido - há informações variadas sobre isso, mas mesmo assim teria sido um ótimo motivo ... no ano de 1998.

Ele lida com ângulos superiores a 90 graus - até onde eu sei, a única razão para isso é porque o termo phong foi usado incorretamente. O produto escalar da reflexão e da vista fornece um ângulo entre -1 e +1. Normalmente, esse ângulo é fixado em 0 a 1, essa é a causa direta do problema de 90 graus. Re-normalize o ângulo em vez de fixá-lo e você terá a cobertura completa de 180 graus. Recuso-me a acreditar que uma operação simples x * 0,5 + 0,5 ilude o mundo dos gráficos há 40 anos.

ele lida melhor com as bordas - O "problema" da borda também existe na solução blinn, apenas em menor grau. A principal causa é a simulação inadequada da iluminação da área no terminador, o que deve ser essencial para qualquer sombreador "fisicamente". Mas mesmo em situações mais simples, uma função sigmóide pode aproximar uma linha terminadora suave corretamente. A multiplicação para um termo lambert é incorreta, pois atenua indevidamente o termo especular, isso pode cancelar um termo de fresnel e levar a erros adicionais.

Tem longas reflexões na borda - Parece-me que, embora as reflexões anisotrópicas possam ser realistas, o blinn não é a maneira correta de implementá-las, pois elas apenas aparecem na borda. É apenas uma feliz coincidência que um erro no termo H pareça realista.

Nenhuma dessas razões é satisfatória, quero resolver essa loucura.

Quero esclarecer que não estou falando especificamente de blinn e phong , mas dos componentes vetoriais H e R, que são usados ​​como base para esses shaders e para outros.

BmB
fonte

Respostas:

24

Para superfícies perfeitamente reflexivas, o modelo Phong faz sentido. No entanto, de onde vem o n em (RV) ^ n do modelo Phong para aproximar superfícies mais ásperas? Onde está a teoria de que você precisa elevar o resultado do produto escalar à potência, exceto que ele parece apenas dar empiricamente o resultado adequado?

Para o modelo de Blinn, existe a teoria de microfacetos com base física para suportar todos os componentes da equação e também há evidências empíricas de que o modelo aproxima as superfícies do mundo real mais de perto (embora não perfeitamente). O semi-vetor no modelo de Blinn é usado como uma entrada para a função de distribuição normal (NDF), que é uma aproximação de como os microfacetes são distribuídos sobre a superfície normal como função da rugosidade da superfície. Ou seja, quando o vetor H aponta para a direção normal, o valor é mais alto, pois a maioria dos microfacetes aponta para essa direção, e a probabilidade diminui de acordo quando o ângulo entre o vetor normal e o H é aumentado.

O modelo de Blinn não é perfeito de forma alguma e, por exemplo, não leva em consideração o termo de geometria do modelo de microfacet (ou seja, sombreamento e mascaramento de microfacetados cuja importância aumenta nos ângulos de pastejo).

JarkkoL
fonte
Não estou falando da implementação específica do phong, que de fato não tem base física. Mas não vejo como a teoria dos microfacet suporta H melhor que R como base para um vetor de reflexão. Nenhum modelo de sombreamento é suportado empiricamente, cada um falha na reprodução de materiais reais, conforme "Validação experimental do BRDF" em 2005. Parece-me que os microfacetes são modelados em phong pelo produto de ponto R · V, que pode servir como um base para um destaque mais fisicamente correto, seja através de uma função de remapeamento ou de uma rampa. Uma função de energia é simplesmente o remapeamento mais simples e incorreto.
BMB
2
@BmB Não, os microfacetes não são "modelados em phong", mas usam a distribuição de probabilidade de microfacetes definidos com o NDF, que está sendo "amostrado" com o vetor H. O NDF é geralmente simétrico em relação ao normal (isotrópico / anisotrópico), por isso faz sentido usar o vetor H para ele. Eu disse que não há evidência empírica de que Blinn-modelo mais perto se aproxima materiais do mundo real do que Phong.
JarkkoL
Qualquer reflexão que não esteja ao longo do vetor de reflexão não é um reflexo de espelho perfeito. O produto escalar produz um valor de refletância para ângulos que não são perfeitos. Necessariamente, estes devem ser produzidos por microfacetes. O produto escalar, portanto, modela microfacetes. Um ponto simples produz uma distribuição linear. Mas a distribuição pode ser modelado por qualquer função com R tão bem como H. Isso explica nada sobre a validade da H sobre R.
BMB
1
@BmB Eu sugiro que você leia sobre a teoria dos microfacetos e, especificamente, sobre a parte do NDF para entender o conceito. Isso ajudará você a obter a resposta para sua pergunta.
JarkkoL
1
Você deve abrir uma nova pergunta sobre microfacetes e NDF, porque obviamente há muita coisa que você não entende sobre esses conceitos e os comentários não são o lugar certo para explicá-los.
JarkkoL
6

Na verdade, acho que você listou as razões pelas quais Blinn é o padrão em relação a Phong.

Cada razão que você listou existe, de fato, uma área em que Blinn se mostra superior a Phong.

Tomados como um todo, tudo isso leva a Blinn a ser um padrão melhor do que Phong.

Blinn é perfeito? É melhor que Phong?

Não.

Mas é um padrão razoável. Sinta-se livre para substituir Phong por Blinn em qualquer renderizador / shader que você escrever.

John
fonte
Concordo, é exatamente isso. Nenhum dos modelos é perfeito. A aproximação de Blinn era acima de tudo uma otimização de desempenho naquela época, já que calcular o meio ângulo é muito mais barato. Acabou que parece melhor a maior parte do tempo também.
Damon
-2

Eu descobri o motivo do vetor H ser usado. Infelizmente, não é assim que é usado na maioria dos modelos de sombreamento, que pode ser considerado incorreto.

Para sombreamento fisicamente baseado, a luz refletida deve obedecer às equações de Fresnel. (A maioria dos shaders "baseados fisicamente" não) Os microfacetes também devem obedecer às equações de Fresnel, que se baseiam no ângulo de incidência da luz e no índice de refração da interface para produzir um resultado correto.

De acordo com a lei da reflexão, o ângulo de incidência deve ser espelhado com o ângulo de reflexão ao longo da superfície normal. Para um raio de luz ter atingido a câmera - o que sabemos que aconteceu - deve ter sido refletido a partir da luz - para a qual sabemos a direção. Assim, a superfície normal deve, por dedução, ser o eixo do espelho para essas duas direções. Isso nos dá o meio vetor H que está entre eles. Calculado normalizando a soma de ambos.

Agora, calculando o ângulo entre a direção da luz L e o meio vetor H, adquirimos o ângulo de incidência para a reflexão especular de um microfacete e podemos atenuá-lo corretamente usando o termo fresnel.

Observe que a direção da vista é igual a R para esse microfacete, H não é um termo de reflexão. Blinn, Cook, Torrance e Sparrow podem sugá-lo. Phong e Fresnel estavam certos.

BmB
fonte
O termo Fresnel faz parte da equação de microfacet BRDF e o microfacet individual não leva isso em consideração, pois eles são modelados como refletores perfeitos. Além disso, você não calcula o ângulo entre os vetores L e H, mas os vetores N e H. Isso deve lhe dar uma dica de por que H está sendo usado. Você precisa de um pouco mais de conhecimento sobre o tema a concluir que era certo ou "mais certo";)
JarkkoL
Um microfacete de um material tem as mesmas propriedades que o material. Portanto, um microfacete de um refletor imperfeito não pode ser um refletor perfeito. Sua lógica é doentia e inútil. N ponto H não tem significado físico.
BMB
4
Não, não é assim que o modelo de microfacet funciona. Minha lógica é perfeitamente correta, como qualquer pessoa que entenda até o básico do modelo de microfacet pode confirmar. Cada microfacete é um refletor perfeito (isto é, opticamente plano) e a reflexão imperfeita de um material provém da variação das normais do microfacete, conforme definido pelo NDF. Sua persistência para desafiar conselhos perfeitamente válidas é meio divertido;)
JarkkoL
Você não deu nenhum conselho, tudo o que você fez foi persistir em afirmar que está certo, sem nada para apoiá-lo e lançar insultos. H é o normal de um microfacete, não o reflexo. A reflexão pode ser calculada com o normal. Física básica discorda de você.
BMB