Я использую direct x 11 c ++, моя проблема в пиксельном шейдере, я думаю, я пытаюсь вычислить зеркальный свет, но зеркальная часть делает модель действительно странной, в некоторых местах она очень темная и очень свет в некоторых других. Я получаю зеркальные свойства материала из модели. Это выглядит хорошо, когда он открыт в программе моделирования. Это мой код:
//* ambientspecularExp
//pointLightDiffuse
float4 plight = PointLightcolor * intensities.y;
float4 pointLightDir = normalize(PointLightpos - input.worldPos);
float4 normalW = float4(input.normal.x, input.normal.y, input.normal.z, 1);
float diffuseFactor = max(dot(pointLightDir, normalW), 0);
//Atten = 1/( att0i + att1i * d + att2i * d²)
float d = distance(PointLightpos, input.worldPos);
float attenuation = 1 / (attenuations.x + (attenuations.y * d) + (attenuations.z * pow(d, 2)));
float4 aL = (AmbientLightColor * intensities.x)*attenuation;
//diffuseFactor *= attenuation;
float4 diffuseLight = (plight *diffuseFactor * diffuse)*attenuation;
//Specular * PointLightcolor
float4 r = reflect(-pointLightDir, normalW);
float4 v = normalize(cameraPos - input.worldPos);
float4 spec = float4(0, 0, 0, 0);
//float4 spec = float4(max((pow(dot(r, v), specularExp) * specular), 0));
if (diffuseFactor > 0)
{
spec = float4(((pow(dot(r, v), intensities.z) * specular))*attenuation);
}
//FinalOutput
float4 combined = float4(aL + diffuseLight +spec);
float4 color = (tex.Sample(mySampler, input.UV));
Затем я умножаю образец текстуры с комбинированным оттенением фонга.
У меня также есть изображения того, как это выглядит. Первый из них с фоновой заливкой и текстурой, второй - просто с зеркальным светом и ничего больше.