winter-tales/VFX/Shaders/Fresnel Overlay.gdshader

31 lines
874 B
Plaintext
Raw Normal View History

2026-02-12 09:53:56 +00:00
shader_type spatial;
render_mode blend_add, depth_draw_never, cull_back;
uniform vec4 albedo : source_color;
uniform sampler2D texture_albedo : source_color, filter_linear_mipmap, repeat_enable;
uniform float fresnelScale = 1.0;
uniform float fresnelPower = 1.0;
uniform float normalGrowth = 0;
uniform float growthMax = 2;
uniform float driver:hint_range(0.0, 1.0) = 0;
varying float driverCurve;
void vertex()
{
float d = length( CAMERA_POSITION_WORLD - NODE_POSITION_WORLD );
driverCurve = sin( driver * PI );
VERTEX += NORMAL * normalGrowth * d * ( driver * growthMax );
}
void fragment()
{
float fresnel = pow( 1.0 - abs( NORMAL.z ), fresnelPower ) * fresnelScale;
fresnel = clamp( fresnel, 0.0, 1.0 );
vec4 albedo_tex = texture( texture_albedo, UV );
ALBEDO = albedo.rgb * albedo_tex.rgb;
ALPHA *= albedo.a * albedo_tex.a * fresnel * driverCurve;
}