2

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

}
4

1 に答える 1