Made things configurable during runtime

This commit is contained in:
nc5432 2025-04-22 15:24:08 -04:00
parent 4802c406e9
commit 5ebf9f2655
6 changed files with 469 additions and 79 deletions

View File

@ -1,7 +1,26 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://doo0lbnv6560s"]
[gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://doo0lbnv6560s"]
[ext_resource type="Shader" uid="uid://cs1j12437apag" path="res://Shaders/SinWater.gdshader" id="1_qkwc8"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_vr1qf"]
frequency = 0.0388
fractal_type = 3
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_af2ab"]
seamless = true
noise = SubResource("FastNoiseLite_vr1qf")
[resource]
render_priority = 0
shader = ExtResource("1_qkwc8")
shader_parameter/color = Vector3(0.1, 0.4, 0.8)
shader_parameter/opacity = 0.95
shader_parameter/foamHeight = 0.36
shader_parameter/speed = 1.2
shader_parameter/foamTex = SubResource("NoiseTexture2D_af2ab")
shader_parameter/amplitude = 0.075
shader_parameter/frequency = 1.6
shader_parameter/waveCount = 20
shader_parameter/amplitudeScaleFactor = 0.72
shader_parameter/frequencyScaleFactor = 1.325
shader_parameter/dirs = PackedFloat32Array(0.981, -0.588, 0.035, -0.977, -0.809, -0.351, 0.989, -0.24, -0.192, 0.907, -0.479, 0.499, 0.388, -0.97, 0.882, -0.845, 0.246, -0.068, -0.41, -0.202, -0.914, 0.605, -0.618, 0.898, -0.615, -0.508, -0.223, -0.841, 0.396, -0.609, 0.746, 0.129, 0.724, 0.54, -0.936, 0.589, 0.874, -0.715, -0.353, 0.243)

File diff suppressed because one or more lines are too long

115
Scripts/ShaderController.gd Normal file
View File

@ -0,0 +1,115 @@
class_name ShaderController extends Control
@export var eSinShader: ShaderMaterial
@export var gerstnerShader: ShaderMaterial
@export var maxWaveCount: int = 100
var mode: int = 0
func _ready() -> void:
var dirs: Array[float]
for i: int in range(maxWaveCount * 2):
dirs.append(randf_range(-1, 1))
eSinShader.set_shader_parameter("dirs", dirs)
gerstnerShader.set_shader_parameter("dirs", dirs)
func _on_option_button_item_selected(index: int) -> void:
match index:
0:
$"../ESin".show()
$"../Gerstner".hide()
$PanelContainer/MarginContainer/VBoxContainer/ESin.show()
$PanelContainer/MarginContainer/VBoxContainer/Gerstner.hide()
mode = 0
1:
$"../ESin".hide()
$"../Gerstner".show()
$PanelContainer/MarginContainer/VBoxContainer/ESin.hide()
$PanelContainer/MarginContainer/VBoxContainer/Gerstner.show()
mode = 1
func _on_color_picker_button_color_changed(color: Color) -> void:
match mode:
0:
eSinShader.set_shader_parameter("color", Vector3(color.r, color.g, color.b))
eSinShader.set_shader_parameter("opacity", color.a)
1:
gerstnerShader.set_shader_parameter("color", Vector3(color.r, color.g, color.b))
gerstnerShader.set_shader_parameter("opacity", color.a)
func _on_wave_count_value_changed(value: float) -> void:
match mode:
0:
eSinShader.set_shader_parameter("waveCount", value)
1:
gerstnerShader.set_shader_parameter("waveCount", value)
func _on_speed_value_changed(value: float) -> void:
match mode:
0:
eSinShader.set_shader_parameter("speed", value)
1:
gerstnerShader.set_shader_parameter("speed", value)
func _on_amplitude_value_changed(value: float) -> void:
match mode:
0:
eSinShader.set_shader_parameter("amplitude", value)
1:
gerstnerShader.set_shader_parameter("amplitude", value)
func _on_amplitude_scale_value_changed(value: float) -> void:
match mode:
0:
eSinShader.set_shader_parameter("amplitudeScaleFactor", value)
1:
gerstnerShader.set_shader_parameter("amplitudeScaleFactor", value)
func _on_frequency_value_changed(value: float) -> void:
match mode:
0:
eSinShader.set_shader_parameter("frequency", value)
1:
gerstnerShader.set_shader_parameter("frequency", value)
func _on_frequency_scale_value_changed(value: float) -> void:
match mode:
0:
eSinShader.set_shader_parameter("frequencyScaleFactor", value)
1:
gerstnerShader.set_shader_parameter("frequencyScaleFactor", value)
func _on_button_pressed() -> void:
match mode:
0:
eSinShader.set_shader_parameter("color", Vector3(0.1, 0.4, 0.8))
eSinShader.set_shader_parameter("opacity", 0.95)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer/ColorPickerButton.color = Color(0.1, 0.4, 0.8, 0.95)
eSinShader.set_shader_parameter("waveCount", 20)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer7/HSlider.value = 20
eSinShader.set_shader_parameter("speed", 1.2)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer2/HSlider.value = 1.2
eSinShader.set_shader_parameter("amplitude", 0.075)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer3/HSlider.value = 0.075
eSinShader.set_shader_parameter("amplitudeScaleFactor", 0.72)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer4/HSlider.value = 0.72
eSinShader.set_shader_parameter("frequency", 1.6)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer6/HSlider.value = 1.6
eSinShader.set_shader_parameter("frequencyScaleFactor", 1.325)
$PanelContainer/MarginContainer/VBoxContainer/ESin/HBoxContainer5/HSlider.value = 1.325
1:
gerstnerShader.set_shader_parameter("color", Vector3(0.1, 0.4, 0.8))
gerstnerShader.set_shader_parameter("opacity", 0.95)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer/ColorPickerButton.color = Color(0.1, 0.4, 0.8, 0.95)
gerstnerShader.set_shader_parameter("waveCount", 20)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer7/HSlider.value = 20
gerstnerShader.set_shader_parameter("speed", 1.545)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer2/HSlider.value = 1.545
gerstnerShader.set_shader_parameter("amplitude", 0.2)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer3/HSlider.value = 0.2
gerstnerShader.set_shader_parameter("amplitudeScaleFactor", 0.77)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer4/HSlider.value = 0.77
gerstnerShader.set_shader_parameter("frequency", 1.29)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer6/HSlider.value = 1.29
gerstnerShader.set_shader_parameter("frequencyScaleFactor", 1.225)
$PanelContainer/MarginContainer/VBoxContainer/Gerstner/HBoxContainer5/HSlider.value = 1.225

View File

@ -0,0 +1 @@
uid://itd5mq4iclkk

View File

@ -2,13 +2,14 @@ shader_type spatial;
render_mode world_vertex_coords;
uniform vec3 color = vec3(0.1, 0.4, 0.8);
uniform float opacity = 0.95;
uniform float speed = 1.0;
uniform float amplitude = 0.2;
uniform float frequency = 1.0;
uniform int waveCount = 5;
uniform float amplitudeScaleFactor = 0.82;
uniform float frequencyScaleFactor = 1.18;
uniform float dirs[40];
uniform float dirs[200];
uniform sampler2D depth: hint_depth_texture;
@ -47,7 +48,7 @@ void fragment() {
//SPECULAR = 1.0;
//float strength = baseHeight * texture(foamTex, UV).r;
//if (strength >= foamHeight) ALBEDO = ALBEDO + vec3(1, 1, 1) * (strength + foamHeight);
ALPHA = 0.9;
ALPHA = opacity;
float dep = texture(depth, SCREEN_UV).x;
vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, dep);
vec4 view = INV_PROJECTION_MATRIX * vec4(ndc, 1.0);

View File

@ -2,6 +2,7 @@ shader_type spatial;
render_mode world_vertex_coords;
uniform vec3 color = vec3(0.1, 0.4, 0.8);
uniform float opacity = 0.95;
uniform float foamHeight = 0.2;
uniform float speed = 1.0;
uniform sampler2D foamTex;
@ -10,8 +11,8 @@ uniform float frequency = 1.0;
uniform int waveCount = 5;
uniform float amplitudeScaleFactor = 0.82;
uniform float frequencyScaleFactor = 1.18;
uniform float dirs[40];
uniform sampler2D foam;
uniform float dirs[200];
//uniform sampler2D foam;
uniform sampler2D depth: hint_depth_texture;
@ -40,13 +41,13 @@ void vertex() {
void fragment() {
ALBEDO = color * clamp(yOffset, 0.2, 11.0);
vec4 foamLevel = texture(foam, UV);
ALBEDO += vec3(foamLevel.r, foamLevel.r, foamLevel.r);
//vec4 foamLevel = texture(foam, UV);
//ALBEDO += vec3(foamLevel.r, foamLevel.r, foamLevel.r);
//SPECULAR = 1.0;
//float strength = yOffset * texture(foamTex, UV).r;
//if (strength >= foamHeight) ALBEDO = ALBEDO + vec3(1, 1, 1) * (strength + foamHeight);
float strength = yOffset * texture(foamTex, UV).r;
if (strength >= foamHeight) ALBEDO = ALBEDO + vec3(1, 1, 1) * (strength + foamHeight - yOffset / 2.0);
ALPHA = 0.9;
ALPHA = opacity;
float dep = texture(depth, SCREEN_UV).x;
vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, dep);
vec4 view = INV_PROJECTION_MATRIX * vec4(ndc, 1.0);