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);
}