diff --git a/shaders/lighting.frag b/shaders/lighting.frag index 01f9a7b..56649af 100644 --- a/shaders/lighting.frag +++ b/shaders/lighting.frag @@ -49,7 +49,7 @@ void main() float L_distance; // Расстояние от поверхности до источника float attenuation; // Коэф. угасания float acosA; // Косинус между вектором от поверхности к источнику и обратным направлением источника - + float intensity; // Интенсивность для прожектора // Фоновая освещенность color = vec4(ka, 1); @@ -85,6 +85,14 @@ void main() // Угасание с учетом расстояния attenuation = 1 / (1 + light_f.data[i].attenuation[1] * L_distance + light_f.data[i].attenuation[2] * L_distance * L_distance); + // Если источник - прожектор, то добавим смягчение + if (light_f.data[i].direction_angle.a < 180) + { + intensity = clamp((light_f.data[i].direction_angle.a - acosA) / 5, 0.0, 1.0); + diffuse *= intensity; + specular *= intensity; + } + color += vec4(light_f.data[i].color*kd*diffuse * attenuation, 1) + vec4(light_f.data[i].color*ks*specular * attenuation, 1); }