Pergunta

Sombreamento Blinn-phong...?

Normals Blinn-phong

Portanto, o problema que estou tendo, como espero ilustrar a imagem acima, é que não consigo fazer com que meus realces especulares sombreiem suavemente.O problema é o corte abrupto nas bordas da face, o que não deveria estar acontecendo.A iluminação difusa parece estar funcionando muito bem e utiliza os mesmos valores interpolados.Aqui está o código para os destaques especulares do 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 é constante, está infinitamente distante (ou seja,o sol).Quanto ao viewRay, ele é calculado no vertex shader assim, usando a matriz de projeção:

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

Estou usando a renderização adiada, de onde vêm os valores UV (renderização para uma textura de tela cheia).

A única coisa que consigo pensar é que a interpolação normal não é suave o suficiente.Mas se for esse o caso, como eu faria para consertar isso?(Estou armazenando os normais como flutuadores de 16 bits, mas aumentá-los para 32 bits não fez diferença).

Foi útil?

Solução

enter image description here

E o bule agora está consertado!Lá era um problema com a interpolação dos normais, mas felizmente foi uma solução fácil;Eu estava normalizando os normais em meu sombreador de vértice e depois interpolando, em vez de interpolar primeiro e depois normalizar.Ainda não está perfeito, mas certamente é uma melhoria!

A lição aqui: se sua imagem parecer plana, você provavelmente está fazendo algo que não deveria no sombreador de vértice.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top