40 lines
1.3 KiB
Plaintext

shader_type spatial;
render_mode cull_disabled;
render_mode specular_toon;
// render_mode shadows_disabled;
// render_mode wireframe;
uniform vec3 color : source_color = vec3(0.055, 0.286, 0.62);
uniform vec3 fresnel_color : source_color = vec3(0.141, 0.447, 0.902);
uniform float fresnel_reduction = 5.0;
uniform float roughness : hint_range(0.0, 1.0) = 0.02;
uniform sampler2D height_map;
uniform sampler2D normal_map;
uniform float height_scale = 0.0;
uniform float noise_scale = 0.5;
uniform vec2 wave_direction = vec2(1.0, 1.0);
uniform float time_scale : hint_range(0.0, 1.0) = 0.1;
varying vec2 noise_position;
float get_fresnel(float power, vec3 normal, vec3 view) {
return pow((1.0 - clamp(dot(normalize(normal), normalize(view)), 0.0, 1.0)), power);
}
void vertex() {
vec2 wave = TIME * time_scale * wave_direction;
noise_position = (wave + VERTEX.xz) * noise_scale + 0.5;
float height = texture(height_map, noise_position).x - 0.5;
VERTEX.y += height * height_scale;
}
void fragment() {
// NORMAL_MAP = texture(normal_map, UV).rgb;
NORMAL_MAP = texture(normal_map, noise_position).xyz;
float fresnel = get_fresnel(fresnel_reduction, NORMAL, VIEW);
RIM = 0.2;
METALLIC = 0.0;
ROUGHNESS = roughness * fresnel;
ALBEDO = mix(color, fresnel_color, fresnel);
}