VS2012의 셰이더 디자이너가 내놓은이 함수로 문제가 발생하지 않았습니다. 아래 코드를 보면 VS 버전과 MY 버전의 차이점을 알 수 있습니다.VS2012 셰이더 디자이너 깨진 알고리즘?
VS 버전에서는 질감을 고려하지 않으므로 주변 환경에서만 켜지는 물체의 "그늘지는"면이 회색으로 표시됩니다. MY 버전에서는 픽셀 색조 (텍스처에서 나온 것)를 추가 한 것을 볼 수 있습니다. 그들은 확산 조명을 고려하여 픽셀 색조를 고려하기 때문에 왜 주변 환경에 적합하지 않은지 알 수는 없습니다.
저는 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);
}