nerevelon5/assets/shaders/shadow.glsl
Ivan Yuriev 6a8bc1e07c - shadows demo
- scaling
 - math fix
 - refactoring
2025-04-17 03:52:58 +03:00

26 lines
1.2 KiB
GLSL

extern vec2 light_dir; // направление света, нормализованное
extern float flatten; // насколько тень сплющена (0.2 - норм)
extern float softness; // степень мягкости по краям
vec4 effect(vec4 color, Image tex, vec2 tex_coords, vec2 screen_coords)
{
// Получаем оригинальный цвет спрайта
vec4 tex_color = Texel(tex, tex_coords);
// Преобразуем цвет в "тень"
float alpha = tex_color.a;
vec3 shadow_color = vec3(0.0); // черная тень
// Модифицируем UV, чтобы проецировать вниз и вбок
vec2 offset = tex_coords;
offset.y -= tex_coords.y * flatten; // сплющиваем вниз
offset.x += tex_coords.y * flatten * light_dir.x; // сдвигаем в сторону
vec4 proj = Texel(tex, offset);
// Мягкость края тени (можно отключить, если не нужно)
float edge_fade = smoothstep(0.0, softness, proj.a);
return vec4(shadow_color, proj.a * edge_fade * 0.6); // альфа настраивается
}