Je ne trouve nulle part une bonne raison à cela. Le vecteur de réflexion utilisé en phong a une base simple en physique. Mais le demi-vecteur utilisé dans blinn n'a apparemment aucune base rationnelle et ne constitue pas une réflexion appropriée. Et pourtant, il est utilisé dans toutes les fonctions d'ombrage dites "physiques". S'il existe une bonne base physique pour cela, je voudrais savoir.
Ce que j'ai pu trouver sont quelques raisons:
C'est plus rapide - les informations sont mitigées à ce sujet, mais cela aurait quand même été une excellente raison ... en 1998.
Il gère mieux des angles supérieurs à 90 degrés - pour autant que je sache, la seule raison à cela est que le terme phong a été mal utilisé. Le produit scalaire de la réflexion et de la vue donne un angle compris entre -1 et +1. Habituellement, cet angle est fixé à 0 à 1, c'est la cause directe du problème à 90 degrés. Re-normalisez l'angle au lieu de le serrer et vous obtenez la couverture complète à 180 degrés. Je refuse de croire qu'une simple opération x * 0,5 + 0,5 a échappé au monde graphique depuis 40 ans.
il gère mieux les bords - Le "problème" de bord existe également dans la solution blinn, à un moindre degré. La cause principale est une simulation incorrecte de l'éclairage de zone au niveau du terminateur, qui devrait être essentielle pour tout shader "à base physique". Mais même dans des situations plus simples, une fonction sigmoïde peut approximer correctement une ligne de terminaison souple. La multiplication en un terme lambert est incorrecte car elle atténue le terme spéculaire de manière incorrecte, cela pourrait annuler un terme de Fresnel et conduire à d'autres erreurs.
Il a de longues réflexions sur le bord - Il me semble que si les réflexions anisotropes peuvent être réalistes, le blinn n'est pas la bonne façon de les mettre en œuvre, car elles n'apparaissent qu'au bord. Ce n'est qu'une heureuse coïncidence qu'une erreur dans le terme H semble réaliste.
Aucune de ces raisons n'est satisfaisante, je veux régler cette folie.
Je tiens à préciser que je ne parle pas spécifiquement de blinn et de phong , mais plutôt des composants vectoriels H et R, qui sont utilisés comme base pour ces shaders ainsi que pour d'autres.