Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | michaelreldred |
Hello,
I am working on adding a drop shadow to my game using shaders, and it works fine when testing from the editor or when I run an HTML5 build of the game
However, when I run the same shader on mobile there are gaps between the shadow and the objects it is running on
Here is my shader code:
shader_type canvas_item;
// The offset of the shadow from the main sprite
uniform vec2 offset = vec2(-1.0, 2.0);
// The color of the shadow to display
uniform vec4 shadow_color: hint_color = vec4(0.098, 0.164, 0.337, 1.0);
// The value to compare against to check if it is the background colour
uniform vec4 background_color: hint_color = vec4(0.282, 0.494, 0.690, 1.0);
void fragment() {
// Get the pixel value of the pixel that will contain the shadow
vec4 tex = texture(SCREEN_TEXTURE,SCREEN_UV,0.0);
// Get the coords of the original pixel to see if it needs a shadow
vec2 src_tex_location = SCREEN_UV - vec2(SCREEN_PIXEL_SIZE.x * offset.x , SCREEN_PIXEL_SIZE.y * offset.y);
// Get the pixel value of what is supposed to exist
vec4 offset_tex = texture(SCREEN_TEXTURE,src_tex_location,0.0);
// Check if this pixel matches the background color
vec3 tex_diff = tex.rgb - background_color.rgb;
float tex_diff_max = max(max(abs(tex_diff.r), abs(tex_diff.g)), abs(tex_diff.b));
// If the pixel is a background color, check offset pixel if it should be a shadow
if( tex_diff_max < 0.001 ) {
vec3 offset_pixel = offset_tex.rgb - background_color.rgb;
float offset_pixel_max = max(max(abs(offset_pixel.r), abs(offset_pixel.g)), abs(offset_pixel.b));
// If it doesn't match the background pixel, make a shadow
if( offset_pixel_max > 0.001 ) {
COLOR = shadow_color;
} else {
COLOR = tex;
}
// If it is not a background color, it shouldn't have a shadow
} else {
COLOR = tex
}
}
same issue, waiting for awnser
zen3001 | 2021-01-28 13:51