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; }