godot-grass/shrub.gdshader
2025-10-21 16:31:54 +02:00

45 lines
1.0 KiB
Plaintext

shader_type spatial;
render_mode cull_disabled;
uniform float fluff_scale = 0.2;
uniform sampler2D albedo: source_color;
uniform sampler2D normals: hint_normal;
uniform vec3 color_dark: source_color;
uniform vec3 color_light: source_color;
varying vec2 remapped_uv;
void vertex() {
remapped_uv = (UV - vec2(0.5)) * 2.0;
VERTEX += TANGENT * remapped_uv.x * fluff_scale;
VERTEX -= BINORMAL * remapped_uv.y * fluff_scale;
NORMAL = normalize(VERTEX);
}
void fragment() {
if (!FRONT_FACING) NORMAL = -NORMAL;
vec4 albedo_sample = texture(albedo, UV).rgba;
ALBEDO = mix(color_dark, color_light, length(remapped_uv));
ALPHA = albedo_sample.a;
ALPHA_SCISSOR_THRESHOLD = 0.95;
BACKLIGHT = color_light * 1.5;
ROUGHNESS = 0.4;
SPECULAR = 0.2;
AO = mix(0.5, 1.0, smoothstep(-1.0, 2.0, VERTEX.y));
AO_LIGHT_AFFECT = 0.25;
NORMAL_MAP = texture(normals, UV).xyz;
}
//void light() {
// // Called for every pixel for every light affecting the material.
// // Uncomment to replace the default light processing function with this one.
//}