blinn-phong阴影......?

所以我拥有的问题,因为上面的图像有望说明,是我似乎无法平滑地遮住镜面亮点。问题是沿着面边缘的突然截止,这不应该发生。漫反射照明似乎相当合作,它使用相同的内插值。这是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是恒定的,它无限地远处(即太阳)。至于ViewRay,它使用投影矩阵:

如此如此计算的顶点着色器。
viewRay = vec3(-(UV.x * 2.0f - 1.0f) / projection[0].x,
               -(UV.y * 2.0f - 1.0f) / projection[1].y,
                     1.0f);
.

我正在使用延期渲染,这是UV值来自的(渲染到全屏纹理)。

我唯一可以想到的是正常插值只是不够平滑。但如果是这种情况,我会如何解决这个问题? (我现在将法线存储为16位浮点数,但将其上升到32位并没有产生差异)。

有帮助吗?

解决方案

和茶壶现在是固定的!有一个问题,具有插入法线的问题,但值得愉快的是一个简单的修复;我正常化了我的顶点着色器中的法线,然后是插值,而不是先介断,而不是归一化。它仍然不完美,但它肯定是一个改进!

这里的课程:如果您的图像看起来持平,您可能会在顶点着色器中做一些不应该做的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top