41 lines
1.3 KiB
Plaintext
41 lines
1.3 KiB
Plaintext
shader_type spatial;
|
|
render_mode blend_add, depth_draw_opaque, cull_back, diffuse_burley, shadows_disabled;
|
|
|
|
uniform float alpha : hint_range(0.0, 1.0) = 0.5;
|
|
uniform float rim_power : hint_range(0.0, 5.0) = 1.0;
|
|
|
|
uniform sampler2D texture_emission : source_color, hint_default_black,filter_linear_mipmap,repeat_enable;
|
|
uniform sampler2D gradient : source_color, hint_default_black,filter_linear_mipmap,repeat_enable;
|
|
|
|
uniform vec4 emission : source_color;
|
|
uniform float emission_energy : hint_range(0.0, 1.0) = 0.5;
|
|
uniform vec3 uv1_scale = vec3(5.0, 0.0, 0.0);
|
|
uniform vec3 uv1_offset = vec3(0.0, 1.0, 0.0); //change y to whooooosh effect
|
|
|
|
varying vec2 base_uv;
|
|
|
|
// rotate on 90 degrees
|
|
vec2 rotateUV(vec2 uv) {
|
|
return vec2(1.0 * (uv.y - 0.5) + 0.5, -1.0 * (uv.y - 0.5) + 0.5);
|
|
}
|
|
|
|
void vertex() {
|
|
base_uv = rotateUV(UV);
|
|
UV = UV * uv1_scale.xy + uv1_offset.xy;
|
|
// UV.y += TIME * 0.02; // If you need animation, this needs some work.
|
|
}
|
|
|
|
void fragment() {
|
|
vec3 fallof = texture(gradient, base_uv).rgb;
|
|
|
|
float fresnel = pow(1.0 - dot(normalize(NORMAL), normalize(VIEW)), rim_power);
|
|
float fade = mix(1.0, -1.0, fresnel);
|
|
|
|
ROUGHNESS = 0.0;
|
|
SPECULAR = 0.0;
|
|
|
|
vec3 emission_tex = texture(texture_emission, UV).rgb;
|
|
EMISSION = (emission.rgb + emission_tex) * emission_energy * fallof;
|
|
|
|
ALPHA = clamp(fade, 0.0, 1.0) * EMISSION.r * alpha;
|
|
} |