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.