53 lines
No EOL
1.3 KiB
Text
53 lines
No EOL
1.3 KiB
Text
shader_type canvas_item;
|
|
|
|
uniform vec2[10] wave_centers;
|
|
uniform float[10] wave_distances;
|
|
|
|
uniform vec3 color : source_color;
|
|
uniform float max_distance;
|
|
uniform float bublic_size = 2.0;
|
|
|
|
varying vec2[10] local_position;
|
|
|
|
float smooth_bublic(vec2 center,vec2 pixel_pos,float distance_from_center,float size)
|
|
{
|
|
return 1.0-distance(distance_from_center,distance(center,pixel_pos))/size;
|
|
}
|
|
|
|
float solid_bublic(vec2 center,vec2 pixel_pos,float distance_from_center,float size,float border)
|
|
{
|
|
|
|
return step(border,smooth_bublic(center,pixel_pos,distance_from_center,size));;
|
|
}
|
|
|
|
void vertex()
|
|
{
|
|
for (int i = 0; i < wave_centers.length(); i++)
|
|
{
|
|
local_position[i] = (inverse(MODEL_MATRIX) * vec4(wave_centers[i],0.0,1.0)).xy;
|
|
}
|
|
}
|
|
|
|
void fragment() {
|
|
// Set faction color
|
|
COLOR = texture(TEXTURE,UV) * vec4(color,1.0);
|
|
|
|
/*for (int i = 0; i < wave_centers.length(); i++)
|
|
{
|
|
float wave_distance = wave_distances[i];
|
|
float normalized_distance = wave_distance/max_distance;
|
|
|
|
if (normalized_distance >= 1.0 || normalized_distance < 0.0)
|
|
{
|
|
break;
|
|
}
|
|
float bublic = solid_bublic(local_position[i],(UV-0.5)/TEXTURE_PIXEL_SIZE,wave_distance,bublic_size,0.75);
|
|
|
|
if (bublic == 0.0){
|
|
break;
|
|
}
|
|
|
|
COLOR.rgb = mix(COLOR.rgb,vec3(bublic*color),1.0-normalized_distance);
|
|
|
|
}*/
|
|
} |