Pregunta

sombreado blinn-phong ...?

normales blinn-phong

Entonces, el problema que estoy teniendo, como lo ilustra la imagen de arriba, es que parece que no puedo obtener mis aspectos más destacados para sombra suavemente. El problema es el corte abrupto a lo largo de los bordes de la cara, lo que no debería estar sucediendo. La iluminación difusa parece estar funcionando bastante bien, y utiliza los mismos valores interpolados. Aquí está el código para los aspectos más destacados 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 es constante, está infinitamente lejos (es decir, el sol). En cuanto a ViewRay, se calcula en el shader de vértice así, utilizando la matriz de proyección:

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

Estoy usando la representación diferida, que es donde provienen los valores UV (renderizado a una textura de pantalla completa).

Lo único en lo que puedo pensar es que la interpolación normal simplemente no es lo suficientemente suave. Pero si ese es el caso, ¿cómo voy a arreglarlo? (Estoy almacenando los normales como flotadores de 16 bits, pero la abatanza a 32 bits no hizo una diferencia).

¿Fue útil?

Solución

ingrese la descripción de la imagen aquí

¡Y la tetera ahora está arreglada!Ahí, fue un problema con la interpolación de las normales, pero afortunadamente fue una solución fácil;Estaba normalizando las normales en mi shader de vértice, luego interpolando, en lugar de interpolar primero y luego normalizar.¡Todavía no es perfecto, pero ciertamente es una mejora!

La lección aquí: Si su imagen se ve plana, probablemente esté haciendo algo que no debe estar haciendo en el sombreador de vértices.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top