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.
En fait, je pense que vous avez vous-même énuméré les raisons pour lesquelles Blinn est la valeur par défaut par rapport à Phong.
Chaque raison que vous avez mentionnée là-bas est, en fait, un domaine où Blinn se révèle supérieur à Phong.
Dans l'ensemble, tout cela fait de Blinn un meilleur défaut que Phong.
Blinn est-il parfait? Est-ce mieux que Phong?
Non.
Mais il est un défaut raisonnable. N'hésitez pas à remplacer Phong par Blinn dans n'importe quel rendu / shader que vous écrivez.
la source
J'ai découvert la raison pour laquelle le vecteur H devait être utilisé. Malheureusement, ce n'est pas la façon dont il est utilisé dans la plupart des modèles d'ombrage, ce qui peut être conclu comme incorrect.
Pour un ombrage basé physiquement, la lumière réfléchie doit obéir aux équations de Fresnel. (La plupart des shaders "à base physique" ne le font pas) Les microfacets doivent également obéir aux équations de Fresnel, qui dépendent de l'angle d'incidence de la lumière ainsi que de l'indice de réfraction de l'interface pour produire un résultat correct.
Selon la loi de réflexion, l'angle d'incidence doit être reflété par l'angle de réflexion le long de la normale de surface. Pour qu'un rayon de lumière ait frappé la caméra - ce que nous savons qu'il a fait - il doit avoir été réfléchi par la lumière - dont nous connaissons la direction. Ainsi, la normale de surface doit par déduction être l'axe du miroir pour ces deux directions. Cela nous donne le demi-vecteur H qui est entre eux. Calculé en normalisant la somme des deux.
Maintenant, en calculant l'angle entre la direction de la lumière L et le demi-vecteur H, nous acquérons l'angle d'incidence de la réflexion spéculaire d'un microfacet et pouvons l'atténuer correctement en utilisant le terme de Fresnel.
Notez que la direction de la vue est égale à R pour ce microfacet, H n'est pas un terme de réflexion. Blinn, Cook, Torrance et Sparrow peuvent le sucer. Phong et Fresnel avaient raison.
la source