VS2012 中的着色器设计器发出的这个函数给我带来了无穷无尽的麻烦。如果您查看下面的代码,您可以看到 VS 版本和 MY 版本之间的区别。
在 VS 版本中,它们不考虑纹理,因此任何仅由环境光照亮的对象的“阴影”侧都只是灰色。在我的版本中,您可以看到我添加了像素颜色(来自纹理),然后效果很好。由于他们将像素颜色考虑到漫反射照明,我无法弄清楚为什么他们不会考虑环境光。
因为我对 3D 很陌生,所以我不想假设我很聪明,而且 VS 团队从未对此进行过测试。而且由于它如此基础,我想知道我是否只是错过了一些东西。想法?
float3 LambertLighting(
float3 lightNormal,
float3 surfaceNormal,
float3 materialAmbient,
float3 lightAmbient,
float3 lightColor,
float3 pixelColor
)
{
// compute amount of contribution per light
float diffuseAmount = saturate(dot(lightNormal, surfaceNormal));
float3 diffuse = diffuseAmount * lightColor * pixelColor;
// combine ambient with diffuse
// VS Version:
return saturate((materialAmbient * lightAmbient) + diffuse);
// MY Version:
return saturate((materialAmbient * lightAmbient * pixelColor) + diffuse);
}