Зеркальный свет не подходит - PullRequest
0 голосов
/ 24 января 2020

Я использую 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));

Затем я умножаю образец текстуры с комбинированным оттенением фонга.

У меня также есть изображения того, как это выглядит. Первый из них с фоновой заливкой и текстурой, второй - просто с зеркальным светом и ничего больше.

enter image description here

enter image description here

...