Visual studio 2012 VS2012明暗器设计器破坏算法?
这个函数是由VS2012中的着色器设计器发出的,我遇到了很多麻烦。如果您查看下面的代码,您可以看到VS版本和我的版本之间的差异 在VS版本中,它们不考虑纹理,因此仅由环境光照亮的任何对象的“阴影”面都是灰色的。在我的版本中,你可以看到我添加了pixelcolor(来自纹理),然后效果很好。因为他们在漫反射照明中考虑了像素颜色,所以我不明白为什么他们在环境照明中不考虑像素颜色 因为我是3D新手,我不想假设我很聪明,而VS团队从未测试过这一点。因为它是如此的基本,我想知道我是否错过了什么。想法Visual studio 2012 VS2012明暗器设计器破坏算法?,visual-studio-2012,xna,pixel-shader,Visual Studio 2012,Xna,Pixel Shader,这个函数是由VS2012中的着色器设计器发出的,我遇到了很多麻烦。如果您查看下面的代码,您可以看到VS版本和我的版本之间的差异 在VS版本中,它们不考虑纹理,因此仅由环境光照亮的任何对象的“阴影”面都是灰色的。在我的版本中,你可以看到我添加了pixelcolor(来自纹理),然后效果很好。因为他们在漫反射照明中考虑了像素颜色,所以我不明白为什么他们在环境照明中不考虑像素颜色 因为我是3D新手,我不想假设我很聪明,而VS团队从未测试过这一点。因为它是如此的基本,我想知道我是否错过了什么。想法 fl
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);
}
这一行应该已经考虑了纹理的颜色:
float3 diffuse = diffuseAmount * lightColor * pixelColor;
稍后将其与环境照明混合以获得正确的结果。在您的版本中,将添加纹理颜色两次(一次在漫反射中,一次在环境光中)。
VS版本对应于我见过的各种在线朗伯照明示例,因此这绝对正确
可能出现的问题是,在测试设置中,漫反射颜色为黑色或灰色,这会使像素颜色看起来也是灰色的