Shadow 2D
Add a 2D shadow behind your texture.
Shader code
/**
* Shadow 2D.
* License: CC0
* https://creativecommons.org/publicdomain/zero/1.0/
*/
shader_type canvas_item;
render_mode blend_mix;
uniform vec2 deform = vec2(2.0, 2.0);
uniform vec2 offset = vec2(0.0, 0.0);
uniform vec4 modulate : hint_color;
//uniform vec2 texture_size; //uncomment for GLES2
void fragment() {
vec2 ps = TEXTURE_PIXEL_SIZE;
vec2 uv = UV;
float sizex = float(textureSize(TEXTURE,int(ps.x)).x); //comment for GLES2
float sizey = float(textureSize(TEXTURE,int(ps.y)).y); //comment for GLES2
//float sizex = texture_size.x; //uncomment for GLES2
//float sizey = texture_size.y; //uncomment for GLES2
uv.y+=offset.y*ps.y;
uv.x+=offset.x*ps.x;
float decalx=((uv.y-ps.x*sizex)*deform.x);
float decaly=((uv.y-ps.y*sizey)*deform.y);
uv.x += decalx;
uv.y += decaly;
vec4 shadow = vec4(modulate.rgb, texture(TEXTURE, uv).a * modulate.a);
vec4 col = texture(TEXTURE, UV);
COLOR = mix(shadow, col, col.a);
}
Would there be a way to do this with gles2?
I made an update with gles2 version but unfortunately in gles2 you have to provide the texture size through a parameter.
How to use this and AnimatedSprite?
Also, good job.
Tks
prolly gotta make copy the frames of the sprite and ya know.. depends what you need to do
just using the material propertyy
Nice shader!
If you make the shadow long, it is cropped. How can I fix it?
your texture must have a bit of transparent area around the main texture so the shader has space. It can’t draw outside the textures bounding box.
I can’t do that! It would make a terrible workflow for creating textures and complicate positioning sprites!
whiner
Doesn’t work with Godot 4.
nothing does
Replace hint_color with source_color, that should fix the problem.