在进一步进行镜面照明之前,我想稍微清理一下代码,因此我通过一个函数和少量更改重新实现了它。
float4 PS(VS_OUTPUT input) : SV_TARGET
{
input.normal = normalize(input.normal);
float4 diffuse = ObjTexture.Sample(ObjSamplerState, input.TexCoord);
float3 finalColor;
finalColor = diffuse * light.ambient;
finalColor += saturate(dot(light.dir, input.normal) * light.diffuse * diffuse);
return float4(finalColor, diffuse.a);
}
哪个产生:
您可以看到修改后的代码有点漫射照明与原始版本不同。我需要从原始代码中恢复正常状态吗?
#1 楼
您的环境照明贡献在第二个中没有(:#2 楼
float3 DirectDiffuseBRDF(float3 diffuseAlbedo, float nDotL)
{
return (diffuseAlbedo * nDotL);
}
float4 PS(VS_OUTPUT input) : SV_TARGET
{
input.normal = normalize(input.normal);
float4 diffuseAlbedo = ObjTexture.Sample(ObjSamplerState, input.TexCoord);
float nDotL = dot(input.normal, light.dir);
float3 diffuseLighting = diffuseAlbedo * light.ambient * light.diffuse;
diffuseLighting += saturate(DirectDiffuseBRDF(diffuseAlbedo, nDotL);
return float4(diffuseLighting, diffuseAlbedo.a);
}
这似乎已解决。我忘记增加环境光。
评论
$ \ begingroup $
那么light.diffuse呢(漫射光的颜色呢?)
$ \ endgroup $
–narthex
16-10-9在9:56
$ \ begingroup $
哦,我忘了补充说明,我已经用它更新了答案。
$ \ endgroup $
– Arjan Singh
16-10-9在10:05
$ \ begingroup $
它不是颜色=漫射+环境吗?
$ \ endgroup $
– Zouch
16-10-11在18:34
$ \ begingroup $
是的,您不应将环境乘以,如果为0,则最终将得到0的扩散。它应该是漫反射+环境
$ \ endgroup $
–PaulHK
16-10-13在3:36