31 lines
874 B
Plaintext
31 lines
874 B
Plaintext
|
|
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;
|
||
|
|
}
|