🌊

[Godot] リアルな水面のシェーダーコード

2024/03/01に公開

海水面や広い湖などの水面をリアルに表現できるシェーダーコードです。
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;
}

参考1
参考2

Discussion