Question

Ombrage Blinn-phong...?

Normals Blinn-phong

Donc, le problème que j'ai, comme l'image ci-dessus l'illustre, je l'espère, est que je n'arrive pas à obtenir une ombre fluide de mes reflets spéculaires.Le problème est la coupure abrupte le long des bords des faces, ce qui ne devrait pas se produire.L'éclairage diffus semble fonctionner plutôt bien et utilise les mêmes valeurs interpolées.Voici le code pour les reflets spéculaires de blinn-phong :

vec3 halfAngle = normalize(lightDirection.xyz + viewRay);

float blinnTerm = dot(normal.xyz, halfAngle);
blinnTerm = clamp(blinnTerm, 0.0f, 1.0f);
blinnTerm = pow(blinnTerm, 300.0f);

float specIntensity = intensity * blinnTerm;

vec4 specColour = specIntensity * specColour;

lightDirection est constant, c'est infiniment loin (c.-à-d.le soleil).Quant à viewRay, il est calculé dans le vertex shader comme ceci, en utilisant la matrice de projection :

viewRay = vec3(-(UV.x * 2.0f - 1.0f) / projection[0].x,
               -(UV.y * 2.0f - 1.0f) / projection[1].y,
                     1.0f);

J'utilise le rendu différé, d'où proviennent les valeurs UV (rendu vers une texture plein écran).

La seule chose à laquelle je peux penser, c'est que l'interpolation normale n'est tout simplement pas assez fluide.Mais si tel est le cas, comment pourrais-je y remédier ?(Je stocke les normales sous forme de flottants 16 bits, mais les augmenter à 32 bits n'a pas fait de différence).

Était-ce utile?

La solution

enter image description here

Et la théière est désormais réparée !Là était un problème avec l'interpolation des normales, mais heureusement, c'était une solution facile ;Je normalisais les normales dans mon vertex shader, puis interpolais, plutôt que d'interpoler d'abord puis de normaliser.Ce n'est pas encore parfait, mais c'est certainement une amélioration !

La leçon ici : si votre image semble plate, vous faites probablement quelque chose que vous ne devriez pas faire dans le vertex shader.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top