🌊
[Godot] リアルな水面のシェーダーコード
海水面や広い湖などの水面をリアルに表現できるシェーダーコードです。
Code It ALLという方がめっちゃわかりやすく解説してくれていました。
shader_type spatial;
uniform vec3 water_color : source_color;
uniform float time_scale : hint_range(0.0, 10.0, 0.25) = 1.0;
uniform sampler2D water_normal_noise;
uniform sampler2D screen_texture :hint_screen_texture, repeat_disable;
void fragment() {
vec2 _uv = UV;
vec2 _suv = SCREEN_UV;
_uv.x += sin(TIME * time_scale + (_uv.x + _uv.y) * 25.0) * 0.01;
_uv.y += cos(TIME * time_scale + (_uv.x + _uv.y) * 25.0) * 0.01;
_suv.x += sin(TIME * time_scale + (_suv.x + _suv.y) * 25.0) * 0.01;
_suv.y += cos(TIME * time_scale + (_suv.x + _suv.y) * 25.0) * 0.01;
ALBEDO = texture(screen_texture, SCREEN_UV).rgb;
NORMAL_MAP = texture(water_normal_noise, _uv).rgb;
NORMAL *= 0.5;
ROUGHNESS = 0.2;
}
Discussion