From a3cbb445715c058ceaacb14d47c549dc15bfb71e Mon Sep 17 00:00:00 2001 From: lucastucious Date: Mon, 24 Mar 2025 18:02:15 +0100 Subject: [PATCH] refacto needed --- boat/BuyancyNode.gd | 11 ++++ boat/BuyancyNode.gd.uid | 1 + boat/WalkableBoat.gd | 8 +-- boat/boat.tscn | 42 ++++++++++---- mat/watershader.tres | 9 +-- ocean/Ocean2.tres | 6 +- ocean/Ocean_playground.tscn | 110 +++++++++++++++++++++++++++++++++++- ocean/ocean.gdshader | 12 +++- ocean/oceanTEST.gd | 12 ++++ ocean/oceanTEST.gd.uid | 1 + 10 files changed, 187 insertions(+), 25 deletions(-) create mode 100644 boat/BuyancyNode.gd create mode 100644 boat/BuyancyNode.gd.uid create mode 100644 ocean/oceanTEST.gd create mode 100644 ocean/oceanTEST.gd.uid diff --git a/boat/BuyancyNode.gd b/boat/BuyancyNode.gd new file mode 100644 index 0000000..5425225 --- /dev/null +++ b/boat/BuyancyNode.gd @@ -0,0 +1,11 @@ +extends Marker3D + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass diff --git a/boat/BuyancyNode.gd.uid b/boat/BuyancyNode.gd.uid new file mode 100644 index 0000000..7b49ab3 --- /dev/null +++ b/boat/BuyancyNode.gd.uid @@ -0,0 +1 @@ +uid://dliyvpt05xo5u diff --git a/boat/WalkableBoat.gd b/boat/WalkableBoat.gd index bf92dff..87aa690 100644 --- a/boat/WalkableBoat.gd +++ b/boat/WalkableBoat.gd @@ -14,7 +14,7 @@ var submerged := false var is_docked: bool = false -@export var ocean : Ocean #= get_tree().get_nodes_in_group("ocean")[0] +@export var ocean : OceanTile @export var max_thrust_force: float = 2048*3.0 @export var max_steering: float = 50.0 @@ -67,15 +67,15 @@ func _integrate_forces(state: PhysicsDirectBodyState3D): -func thrust(): +func thrust(_strength:=1.0): if not is_docked: thrust_force = max_thrust_force -func steer_right(): +func steer_right(_strength:=1.0): if not is_docked: steering = -PI * max_steering -func steer_left(): +func steer_left(_strength:=1.0): if not is_docked: steering = PI * max_steering diff --git a/boat/boat.tscn b/boat/boat.tscn index 05d15c5..def11d4 100644 --- a/boat/boat.tscn +++ b/boat/boat.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=10 format=3 uid="uid://babgqvkugifk1"] +[gd_scene load_steps=12 format=3 uid="uid://babgqvkugifk1"] [ext_resource type="Script" uid="uid://du135dtrpwm7o" path="res://boat/WalkableBoat.gd" id="1_ml88t"] [ext_resource type="PackedScene" uid="uid://bcdjvsj0la72h" path="res://boat/source/untitled.fbx" id="2_enlnh"] +[ext_resource type="Script" uid="uid://dliyvpt05xo5u" path="res://boat/BuyancyNode.gd" id="3_ml88t"] [sub_resource type="GDScript" id="GDScript_enlnh"] resource_name = "NoRotation" @@ -14,7 +15,7 @@ func _process(_delta): [sub_resource type="Curve" id="Curve_enlnh"] _limits = [0.0, 10.0, 0.0, 5.0] -_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(2.83988, 10), 0.299357, 0.0, 0, 0] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(2.83988, 10), 0.299357, 0.0, 0, 0] point_count = 2 [sub_resource type="CurveTexture" id="CurveTexture_ml88t"] @@ -26,6 +27,7 @@ emission_shape = 1 emission_sphere_radius = 2.42 angle_min = -63.4 angle_max = 360.0 +inherit_velocity_ratio = 1.384 spread = 21.0 initial_velocity_max = 1.0 angular_velocity_min = -144.39 @@ -36,7 +38,24 @@ scale_curve = SubResource("CurveTexture_ml88t") scale_over_velocity_max = 5.0 color = Color(1, 1, 1, 0.219608) +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ml88t"] +transparency = 1 +blend_mode = 1 +depth_draw_mode = 1 +diffuse_mode = 3 +specular_mode = 2 +disable_ambient_light = true +disable_fog = true +heightmap_scale = 9.055 +billboard_mode = 3 +billboard_keep_scale = true +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false +point_size = 8.0 + [sub_resource type="SphereMesh" id="SphereMesh_ml88t"] +material = SubResource("StandardMaterial3D_ml88t") radius = 0.08 height = 0.15 radial_segments = 4 @@ -57,26 +76,26 @@ water_drag = 0.01 max_thrust_force = 2000.0 max_steering = 250.0 -[node name="untitled" parent="." instance=ExtResource("2_enlnh")] +[node name="Model" parent="." instance=ExtResource("2_enlnh")] transform = Transform3D(-0.1, 0, -1.50996e-08, 0, 0.1, 0, 1.50996e-08, 0, -0.1, 0, 0.260904, 0) -[node name="Node3D" type="Node3D" parent="untitled"] +[node name="CamRoot" type="Node3D" parent="Model"] transform = Transform3D(-10, 0, 1.50996e-06, 0, 10, 0, -1.50996e-06, 0, -10, 0, 0, 0) script = SubResource("GDScript_enlnh") -[node name="SpringArm3D" type="SpringArm3D" parent="untitled/Node3D"] +[node name="SpringArm3D" type="SpringArm3D" parent="Model/CamRoot"] transform = Transform3D(1, 0, 0, 0, 0.893285, 0.449491, 0, -0.449491, 0.893285, 0, 0.350159, 0) spring_length = 3.5 -[node name="Camera3D" type="Camera3D" parent="untitled/Node3D/SpringArm3D"] +[node name="Camera3D" type="Camera3D" parent="Model/CamRoot/SpringArm3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.107117, 0.323316, 2.70191) -[node name="GPUParticles3D" type="GPUParticles3D" parent="untitled"] +[node name="PuffFX" type="GPUParticles3D" parent="Model"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.92513, 10.9874, -0.18139) -transparency = 0.18 -amount = 32 -lifetime = 7.0 -interp_to_end = 0.04 +cast_shadow = 0 +amount = 64 +lifetime = 15.0 +interp_to_end = 0.01 speed_scale = 0.8 randomness = 0.4 visibility_aabb = AABB(-4, -2.58, -6.945, 13.755, 23.63, 16.17) @@ -89,6 +108,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.465993, 0) [node name="Cale3" type="Marker3D" parent="ProbeContainer"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.719583, 0, -0.00873816) +script = ExtResource("3_ml88t") [node name="MeshInstance3D3" type="MeshInstance3D" parent="ProbeContainer/Cale3"] mesh = SubResource("SphereMesh_enlnh") diff --git a/mat/watershader.tres b/mat/watershader.tres index eb0f8ab..a5bf93d 100644 --- a/mat/watershader.tres +++ b/mat/watershader.tres @@ -614,6 +614,7 @@ void fragment() { } " +graph_offset = Vector2(266.202, -169.806) modes/diffuse = 3 modes/specular = 1 flags/fog_disabled = true @@ -683,13 +684,13 @@ nodes/fragment/19/position = Vector2(800, 1920) nodes/fragment/22/node = SubResource("VisualShaderNodeVaryingGetter_obdjg") nodes/fragment/22/position = Vector2(-1600, 1740) nodes/fragment/23/node = SubResource("VisualShaderNodeProximityFade_obdjg") -nodes/fragment/23/position = Vector2(-620, 60) +nodes/fragment/23/position = Vector2(-580, 60) nodes/fragment/24/node = SubResource("VisualShaderNodeFloatFunc_vh75p") nodes/fragment/24/position = Vector2(-400, 60) nodes/fragment/26/node = SubResource("VisualShaderNodeFloatFunc_eafem") nodes/fragment/26/position = Vector2(380, -40) nodes/fragment/27/node = SubResource("VisualShaderNodeInput_004we") -nodes/fragment/27/position = Vector2(-680, -80) +nodes/fragment/27/position = Vector2(-500, -360) nodes/fragment/29/node = SubResource("VisualShaderNodeFloatFunc_0o2nh") nodes/fragment/29/position = Vector2(560, -40) nodes/fragment/30/node = SubResource("VisualShaderNodeFloatOp_jwewd") @@ -705,7 +706,7 @@ nodes/fragment/35/position = Vector2(200, -80) nodes/fragment/36/node = SubResource("VisualShaderNodeFloatParameter_gokfr") nodes/fragment/36/position = Vector2(-500, 180) nodes/fragment/37/node = SubResource("VisualShaderNodeFloatParameter_5fl1t") -nodes/fragment/37/position = Vector2(-620, -400) +nodes/fragment/37/position = Vector2(-500, -260) nodes/fragment/38/node = SubResource("VisualShaderNodeMultiplyAdd_tk76b") nodes/fragment/38/position = Vector2(-80, -100) nodes/fragment/39/node = SubResource("VisualShaderNodeMix_y7ycs") @@ -727,7 +728,7 @@ nodes/fragment/47/position = Vector2(-720, 2160) nodes/fragment/48/node = SubResource("VisualShaderNodeInput_ft6xr") nodes/fragment/48/position = Vector2(-1040, 2420) nodes/fragment/50/node = SubResource("VisualShaderNodeFloatParameter_obdjg") -nodes/fragment/50/position = Vector2(-960, 80) +nodes/fragment/50/position = Vector2(-860, 60) nodes/fragment/51/node = SubResource("VisualShaderNodeSwitch_vh75p") nodes/fragment/51/position = Vector2(1300, -280) nodes/fragment/52/node = SubResource("VisualShaderNodeBooleanParameter_eafem") diff --git a/ocean/Ocean2.tres b/ocean/Ocean2.tres index 901b5bb..3a58358 100644 --- a/ocean/Ocean2.tres +++ b/ocean/Ocean2.tres @@ -44,7 +44,9 @@ shader = ExtResource("1_u0w43") shader_parameter/albedo = Color(0, 0.32, 0.43, 1) shader_parameter/albedo2 = Color(0, 0.47, 0.76, 1) shader_parameter/color_deep = Color(0.11, 0.29, 0.33, 1) -shader_parameter/color_shallow = Color(0, 0.47, 0.76, 1) +shader_parameter/color_shallow = Color(1, 1, 1, 1) +shader_parameter/shore_fade = 0.165 +shader_parameter/shore_intensity = 0.285 shader_parameter/metallic = 0.0 shader_parameter/roughness = 0.02 shader_parameter/texture_normal = SubResource("NoiseTexture2D_mf4pf") @@ -56,7 +58,7 @@ shader_parameter/wave_2_direction = Vector2(0, 2) shader_parameter/time_scale = 0.01 shader_parameter/wave_speed = 0.05 shader_parameter/noise_scale = 15.0 -shader_parameter/height_scale = 0.25 +shader_parameter/height_scale = 1.08 shader_parameter/beers_law = 2.0 shader_parameter/depth_offset = -0.75 shader_parameter/edge_scale = 0.1 diff --git a/ocean/Ocean_playground.tscn b/ocean/Ocean_playground.tscn index bb98e26..3ac4f02 100644 --- a/ocean/Ocean_playground.tscn +++ b/ocean/Ocean_playground.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=9 format=3 uid="uid://hs3a438it6j6"] +[gd_scene load_steps=11 format=3 uid="uid://hs3a438it6j6"] +[ext_resource type="Script" uid="uid://btd340abbfpke" path="res://ocean/oceanTEST.gd" id="1_2qsx7"] [ext_resource type="Material" uid="uid://djvstk5qjvdan" path="res://ocean/Ocean2.tres" id="1_kiaws"] [ext_resource type="Script" uid="uid://c12fpc7inp27s" path="res://ocean/ocean.gd" id="2_ap626"] [ext_resource type="PackedScene" uid="uid://babgqvkugifk1" path="res://boat/boat.tscn" id="3_ap626"] @@ -31,6 +32,13 @@ size = Vector2(10.5, 10.5) subdivide_width = 50 subdivide_depth = 50 +[sub_resource type="PlaneMesh" id="PlaneMesh_2qsx7"] +resource_name = "OceanTile_Far" +material = ExtResource("1_kiaws") +size = Vector2(10.5, 10.5) +subdivide_width = 25 +subdivide_depth = 25 + [node name="Node3D" type="Node3D"] [node name="WorldEnvironment" type="WorldEnvironment" parent="."] @@ -41,8 +49,10 @@ transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866025, -0.5, 0.75 shadow_enabled = true [node name="Ocean" type="Node3D" parent="."] +script = ExtResource("1_2qsx7") [node name="Water_Tile_00" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0531927, 0.00491202, 0.00426149) mesh = SubResource("PlaneMesh_mf4pf") skeleton = NodePath("../..") script = ExtResource("2_ap626") @@ -95,8 +105,104 @@ mesh = SubResource("PlaneMesh_ap626") skeleton = NodePath("../..") script = ExtResource("2_ap626") +[node name="Water_Tile_09" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 0) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_11" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 10) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_10" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, 20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_12" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_13" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_14" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_15" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_16" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 0) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_17" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -10) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_18" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, -20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_19" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_20" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0, 10) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_21" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_22" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_23" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -20) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + +[node name="Water_Tile_24" type="MeshInstance3D" parent="Ocean"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 0, -10) +mesh = SubResource("PlaneMesh_2qsx7") +skeleton = NodePath("../..") +script = ExtResource("2_ap626") + [node name="Boat" parent="." node_paths=PackedStringArray("ocean") instance=ExtResource("3_ap626")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.473399, -0.388613, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.473399, -0.51799, 0) float_force = 75.0 ocean = NodePath("../Ocean/Water_Tile_00") max_thrust_force = 3000.0 diff --git a/ocean/ocean.gdshader b/ocean/ocean.gdshader index 33362cd..5b0729f 100644 --- a/ocean/ocean.gdshader +++ b/ocean/ocean.gdshader @@ -8,7 +8,8 @@ uniform vec3 albedo : source_color = vec3(0.0,0.32,0.43); uniform vec3 albedo2 : source_color= vec3(0.0,0.47,0.76); uniform vec4 color_deep : source_color= vec4(0.11,0.29,0.33,1.0); uniform vec4 color_shallow : source_color= vec4(0.0,0.47,0.76,1.0); - +uniform float shore_fade = 1.0; +uniform float shore_intensity = 1.0; uniform float metallic : hint_range(0.0, 1.0) = 0; uniform float roughness : hint_range(0.0, 1.0) = 0.02; @@ -55,6 +56,13 @@ void fragment() { depth = depth + VERTEX.z; float depth_blend = exp((depth + depth_offset) * -beers_law); depth_blend = clamp(1.0 - depth_blend, 0.0, 1.0); + + float depth_tex = texture(DEPTH_TEXTURE, SCREEN_UV).r; + vec4 depth_world_pos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV * 2.0 - 1.0, depth_tex, 1.0); + depth_world_pos.xyz /= depth_world_pos.w; + + float shore_line = clamp(1.0 - smoothstep(depth_world_pos.z + shore_fade, depth_world_pos.z, VERTEX.z), 0.0, 1.0); + vec3 shore_color = mix(color_shallow.rgb, edge_color, shore_line); vec3 screen_color = textureLod(SCREEN_TEXTURE, SCREEN_UV, depth_blend * 2.5).rgb; vec3 depth_color = mix(color_shallow.rgb, color_deep.rgb, depth_blend); @@ -73,7 +81,7 @@ void fragment() { vec3 surface_color = mix(albedo, albedo2, fresnel); vec3 depth_color_adj = mix(edge_color, color, step(edge_scale, z_dif)); - ALBEDO = clamp(surface_color + depth_color_adj,vec3(0),vec3(1.0)); + ALBEDO = clamp(surface_color + depth_color_adj + shore_color * shore_intensity,vec3(0),vec3(1.0)); ALPHA = 1.0; METALLIC = metallic; ROUGHNESS = roughness; diff --git a/ocean/oceanTEST.gd b/ocean/oceanTEST.gd new file mode 100644 index 0000000..c1edd1f --- /dev/null +++ b/ocean/oceanTEST.gd @@ -0,0 +1,12 @@ +extends Node3D + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + global_position.x = $"../Boat".global_position.x + global_position.z = $"../Boat".global_position.z diff --git a/ocean/oceanTEST.gd.uid b/ocean/oceanTEST.gd.uid new file mode 100644 index 0000000..3784177 --- /dev/null +++ b/ocean/oceanTEST.gd.uid @@ -0,0 +1 @@ +uid://btd340abbfpke