first commit
This commit is contained in:
66
Shaders/tree_leaves_1.gdshader
Normal file
66
Shaders/tree_leaves_1.gdshader
Normal file
@@ -0,0 +1,66 @@
|
||||
shader_type spatial;
|
||||
render_mode specular_disabled, cull_back;
|
||||
|
||||
|
||||
global uniform float wind_scale;
|
||||
global uniform float wind_speed;
|
||||
global uniform float wind_strength;
|
||||
global uniform vec3 wind_direction;
|
||||
global uniform sampler2D wind_noise : filter_linear_mipmap;
|
||||
|
||||
uniform vec4 color: source_color;
|
||||
uniform sampler2D alpha;
|
||||
uniform float leaves_scale = 1.0;
|
||||
uniform float leaf_bend_amount = 0.7;
|
||||
uniform float light_steps = 5.0;
|
||||
|
||||
varying vec4 view_pos;
|
||||
varying vec4 world_pos;
|
||||
|
||||
void vertex() {
|
||||
world_pos = MODEL_MATRIX * vec4(VERTEX, 1.0);
|
||||
view_pos = MODELVIEW_MATRIX * vec4(VERTEX, 1.0);
|
||||
float speed = TIME * wind_speed;
|
||||
|
||||
// Noise for animation
|
||||
float noise_texture = textureLod(wind_noise, (world_pos.xz * wind_scale) - (speed * wind_direction.xz), 1.0).r;
|
||||
noise_texture = (noise_texture * 2. - 1.) * (wind_strength * leaf_bend_amount);
|
||||
|
||||
//Leaves Billboard
|
||||
vec4 new_position = vec4(UV.y, UV.x, 0.0, 1.0);
|
||||
new_position = new_position *2. - 1.;
|
||||
new_position = normalize(new_position);
|
||||
new_position *= leaves_scale;
|
||||
|
||||
// Leaves animation
|
||||
new_position += noise_texture * vec4(1.0, 0.0, 0.0, 0.0) * (UV.x * 2.0 - 1.0) - noise_texture * vec4(0.0, 1.0, 0.0, 0.0) * (UV.y * 2.0 - 1.0);
|
||||
|
||||
new_position *= MODELVIEW_MATRIX;
|
||||
|
||||
|
||||
VERTEX += new_position.xyz;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
ALBEDO = color.rgb;
|
||||
ALPHA = texture(alpha, UV).r;
|
||||
ALPHA_SCISSOR_THRESHOLD = 0.5;
|
||||
ROUGHNESS = 0.0;
|
||||
SPECULAR = 0.0;
|
||||
LIGHT_VERTEX = view_pos.xyz;
|
||||
}
|
||||
|
||||
void light() {
|
||||
// Cel shaded diffuse lighting
|
||||
float light = clamp(dot(NORMAL, LIGHT), 0.0, 1.0);
|
||||
light = ceil(light * light_steps) / light_steps;
|
||||
DIFFUSE_LIGHT += light * (LIGHT_COLOR / PI) * ATTENUATION;
|
||||
|
||||
// Rim Lighting
|
||||
float rim = 1.0 - dot(NORMAL, VIEW);
|
||||
rim *= light;
|
||||
rim = round(rim * light_steps) / light_steps;
|
||||
rim = rim * rim;
|
||||
DIFFUSE_LIGHT += rim * ATTENUATION * LIGHT_COLOR / PI;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user