|
| 1 | +//ATTENTION: |
| 2 | +// THIS IS SHADE AUTOGENERATED BY |
| 3 | +// THE ADDON SPRITE-SHADER-MIXER |
| 4 | +// ANY MANUAL CHANGES WILL BE REMOVED WHEN THE ADDON |
| 5 | +// UPDATES THIS SHADER. |
| 6 | +// ANYWAY, YOU CAN SAVE THE CURRENT VERSION AS A RESOURCE FILE. |
| 7 | +//SHADERS:Gold,Teleport,Shadow, |
| 8 | +shader_type canvas_item; |
| 9 | + |
| 10 | + |
| 11 | +//GOLD |
| 12 | +uniform bool GOLD_active = true; |
| 13 | +uniform float GOLD_offset: hint_range(0, 100) = 0; |
| 14 | +uniform float GOLD_speed : hint_range(0, 10) = 1; |
| 15 | +uniform float GOLD_mix : hint_range(0,1)=0; |
| 16 | +float gold_calc_luminance(vec3 color) |
| 17 | +{ |
| 18 | + return dot(color, vec3( 0.299, 0.587, 0.114)); |
| 19 | +} |
| 20 | +float gold_mark_light(vec2 uv, float value) |
| 21 | +{ |
| 22 | + vec2 co = uv * 5.0; |
| 23 | + float n = sin(value + co.x) + sin(value - co.x) + sin(value + co.y) + sin(value + 2.5 * co.y); |
| 24 | + return fract((5.0 + n) / 5.0); |
| 25 | +} |
| 26 | +void gold(in vec2 uv, in sampler2D txt, in vec2 spriteSize, in vec2 pixelSize, inout vec4 finalColor) |
| 27 | +{ |
| 28 | + float value = GOLD_offset + TIME * GOLD_speed; |
| 29 | + vec4 txt_color = texture(txt, uv); |
| 30 | + float luminance = gold_calc_luminance(txt_color.rbg); |
| 31 | + vec3 metal = vec3(luminance); |
| 32 | + metal.r = luminance * pow(1.5 * luminance, 3.0); |
| 33 | + metal.g = luminance * pow(1.5 * luminance, 3.0); |
| 34 | + metal.b = luminance * pow(0.75 * luminance, 3.0); |
| 35 | + |
| 36 | + float n = gold_mark_light(uv, value); |
| 37 | + n += dot(txt_color.rbg, vec3(0.2, 0.4, 0.2)); |
| 38 | + n = fract(n); |
| 39 | + |
| 40 | + float a = clamp(abs(n * 6.0 - 2.0), 0.0, 1.0); |
| 41 | + vec4 color = vec4(metal.rgb + (1.0 - a), 1.0); |
| 42 | + color.rgb = color.rgb * 0.5 + dot(color.rgb, vec3 (0.113, 0.455, 0.172)) - vec3(0.0, 0.1, 0.6) + 0.025; |
| 43 | + color.a = txt_color.a; |
| 44 | + finalColor = mix(color, finalColor, GOLD_mix); |
| 45 | +} |
| 46 | + |
| 47 | + |
| 48 | +//TELEPORT |
| 49 | +uniform bool TELEPORT_active = true; |
| 50 | +uniform float TELEPORT_progress : hint_range(0.0, 1.0); |
| 51 | +uniform float TELEPORT_noise_desnity:hint_range(0.0, 500.0, 0.1) = 60; |
| 52 | +uniform float TELEPORT_beam_size : hint_range(0.01, 0.15); |
| 53 | +uniform vec4 TELEPORT_color : source_color = vec4(0.0, 1.02, 1.2, 1.0); |
| 54 | +vec2 TELEPORT_random(vec2 uv){ |
| 55 | + uv = vec2( dot(uv, vec2(127.1,311.7) ), |
| 56 | + dot(uv, vec2(269.5,183.3) ) ); |
| 57 | + return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123); |
| 58 | +} |
| 59 | +float TELEPORT_noise(vec2 uv) { |
| 60 | + vec2 uv_index = floor(uv); |
| 61 | + vec2 uv_fract = fract(uv); |
| 62 | + |
| 63 | + vec2 blur = smoothstep(0.0, 1.0, uv_fract); |
| 64 | + |
| 65 | + return mix( mix( dot( TELEPORT_random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ), |
| 66 | + dot( TELEPORT_random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x), |
| 67 | + mix( dot( TELEPORT_random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ), |
| 68 | + dot( TELEPORT_random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) * 0.5 + 0.5; |
| 69 | +} |
| 70 | +void teleport(in vec2 uv, in sampler2D txt, vec2 size, vec2 pixelSize, inout vec4 color) |
| 71 | +{ |
| 72 | + float noise = TELEPORT_noise(uv * TELEPORT_noise_desnity) * uv.y; |
| 73 | + |
| 74 | + float d1 = step(TELEPORT_progress, noise); |
| 75 | + float d2 = step(TELEPORT_progress - TELEPORT_beam_size, noise); |
| 76 | + |
| 77 | + vec3 beam = vec3(d2 - d1) * color.rgb; |
| 78 | + |
| 79 | + color.rgb += beam; |
| 80 | + color.a *= d2; |
| 81 | +} |
| 82 | +//SHADOW |
| 83 | +uniform bool SHADOW_active = true; |
| 84 | +uniform vec2 SHADOW_deform = vec2(0.0, 0.0); |
| 85 | +uniform vec2 SHADOW_offset = vec2(20.0, 20.0); |
| 86 | +uniform vec4 SHADOW_modulate : source_color; |
| 87 | +uniform float SHADOW_mix : hint_range(0,1) = 0; |
| 88 | +void shadow(in vec2 uv, in sampler2D txt, in vec2 size, in vec2 texturePixelSize, inout vec4 color) { |
| 89 | + float sizex = float(textureSize(txt,int(texturePixelSize.x)).x); //comment for GLES2 |
| 90 | + float sizey = float(textureSize(txt,int(texturePixelSize.y)).y); //comment for GLES2 |
| 91 | + //float sizex = texture_size.x; //uncomment for GLES2 |
| 92 | + //float sizey = texture_size.y; //uncomment for GLES2 |
| 93 | + uv.y+=SHADOW_offset.y*texturePixelSize.y; |
| 94 | + uv.x+=SHADOW_offset.x*texturePixelSize.x; |
| 95 | + float decalx=((uv.y-texturePixelSize.x*sizex)*SHADOW_deform.x); |
| 96 | + float decaly=((uv.y-texturePixelSize.y*sizey)*SHADOW_deform.y); |
| 97 | + uv.x += decalx; |
| 98 | + uv.y += decaly; |
| 99 | + vec4 shadow = vec4(SHADOW_modulate.rgb, texture(txt, uv).a * SHADOW_modulate.a * 0.5); |
| 100 | + color =mix(mix(shadow, color, color.a), color, SHADOW_mix); |
| 101 | +} |
| 102 | + |
| 103 | + |
| 104 | +void fragment() { |
| 105 | + vec4 color = texture(TEXTURE, UV); |
| 106 | + vec2 size = vec2(textureSize(TEXTURE, 0)); |
| 107 | + vec2 uv = UV; |
| 108 | + vec2 screen_uv = SCREEN_UV; |
| 109 | + |
| 110 | + if(GOLD_active) gold(uv, TEXTURE, size, TEXTURE_PIXEL_SIZE, color); |
| 111 | + if(TELEPORT_active) teleport(uv, TEXTURE, size, TEXTURE_PIXEL_SIZE, color); |
| 112 | + if(SHADOW_active) shadow(uv, TEXTURE, size, TEXTURE_PIXEL_SIZE, color); |
| 113 | + |
| 114 | + |
| 115 | + COLOR=color; |
| 116 | +} |
| 117 | + |
| 118 | +void vertex() { |
| 119 | + |
| 120 | +} |
0 commit comments