From 7793d7c05c5f6985efb84d51ec52f8697525d001 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Tue, 20 Dec 2022 15:59:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BC=D1=8F=D0=B3=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=83=D0=B3=D0=BB=D0=BE=D0=B2=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shaders/lighting.frag | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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); }