Rework Ocean generator

This commit is contained in:
Lucas 2025-03-24 18:01:51 +01:00
parent 05512c0da2
commit 3f558a4fbb
No known key found for this signature in database
9 changed files with 140 additions and 70 deletions

View file

@ -1,7 +1,6 @@
extends MeshInstance3D
class_name OceanTile
extends RigidBody3D
class_name Boat
var time:float
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@ -10,7 +9,4 @@ func _ready() -> void:
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
time += delta
var mat : ShaderMaterial = mesh.surface_get_material(0)
mat.set_shader_parameter("wave_time",time)
pass

1
Boats/boat.gd.uid Normal file
View file

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

View file

@ -10,7 +10,7 @@ shader_parameter/color = Color(0.13, 0.31, 0.53, 0.73)
shader_parameter/wave = Vector4(1, 0, 0.5, 10)
shader_parameter/wave_speed = 1.0
shader_parameter/gravity = 9.8
shader_parameter/wave_time = 12.115
shader_parameter/wave_time = 212.196
[resource]
resource_name = "OceanTile_Main"

80
Ocean/ocean.gd Normal file
View file

@ -0,0 +1,80 @@
@tool
extends Node3D
class_name Ocean
@export_category("Tiles")
@export_tool_button("Generate Tiles","Ocean") var generate_tile_action = generate_tile
@export_tool_button("Remove Tiles","Ocean") var remove_tile_action = remove_tile
@onready var OceanTileMesh:PlaneMesh = preload("uid://wes0mbjy8mno")
enum OceanTileType {MAIN, NEAR, FAR, HORIZON}
var tiles:Array[MeshInstance3D]
@export_category("Waves")
var wave_time:float = 0.0
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
var boats:Array[Boat]
func _ready() -> void:
if not Engine.is_editor_hint():
add_to_group("Ocean")
if OceanTileMesh != null:
OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",0.0)
func _process(delta:float) :
if OceanTileMesh != null:
wave_time += delta
OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",wave_time)
########################
### EDITOR FUNCTIONS ###
var tile_size = 10.0
var _layer_number = 2
var tiles_pos_vector = [
Vector3(0.0, 0.0, 1.0), # Haut
Vector3(1.0, 0.0, 0.0), # Droite
Vector3(1.0, 0.0, 1.0) # Diagonale (haut-droite)
]
func remove_tile():
# Supprimer toutes les tuiles existantes
for child in get_children():
child.queue_free()
func generate_tile(_full: bool = true):
# Si _full est vrai, on enlève toutes les tuiles existantes
if _full:
remove_tile()
# Générer la tuile à la position centrale (0, 0, 0)
create_new_tile(Vector3(0.0, 0.0, 0.0))
# Générer les autres tuiles
for vector in tiles_pos_vector:
for n in range(1, _layer_number + 1): # n correspond à la couche
for direction_x in [-1, 1]: # Prend en compte les valeurs positives et négatives pour x
for direction_z in [-1, 1]: # Prend en compte les valeurs positives et négatives pour z
# Appliquer les directions après avoir multiplié par n et tile_size
var new_pos = Vector3(
vector.x * n * tile_size * direction_x,
vector.y * n * tile_size, # L'axe Y n'est pas affecté par la direction
vector.z * n * tile_size * direction_z
)
print(new_pos) # Affiche toutes les positions générées
create_new_tile(new_pos)
func create_new_tile(position: Vector3):
# Créer une nouvelle tuile
var NewTile = MeshInstance3D.new()
add_child(NewTile)
NewTile.set_owner(get_tree().edited_scene_root)
NewTile.set_name("OceanTile00")
NewTile.mesh = OceanTileMesh
NewTile.global_position = position
# Ajouter la tuile à la liste
tiles.append(NewTile)

View file

@ -1 +0,0 @@
uid://62f04keairkf

36
OpenWorld.tscn Normal file
View file

@ -0,0 +1,36 @@
[gd_scene load_steps=5 format=3 uid="uid://bhwuawppmqk4"]
[ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://Ocean/ocean.gd" id="1_xncsh"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_xncsh"]
sky_top_color = Color(0.191699, 0.357914, 1, 1)
sky_horizon_color = Color(0.874994, 0.991665, 1.25854, 1)
ground_bottom_color = Color(0.274101, 0.574573, 1, 1)
ground_horizon_color = Color(0.874994, 0.991665, 1.25854, 1)
[sub_resource type="Sky" id="Sky_7sjql"]
sky_material = SubResource("ProceduralSkyMaterial_xncsh")
[sub_resource type="Environment" id="Environment_q57bq"]
background_mode = 2
sky = SubResource("Sky_7sjql")
tonemap_mode = 2
ssao_enabled = true
sdfgi_enabled = true
glow_enabled = true
fog_enabled = true
fog_sky_affect = 0.699
[node name="OpenWorld" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_q57bq")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.149535, -0.420992, 0.894653, 0, 0.904827, 0.425779, -0.988756, 0.0636691, -0.135304, 0, 1.45796, 0)
light_color = Color(0.969986, 0.876638, 0.798898, 1)
shadow_enabled = true
[node name="Ocean" type="Node3D" parent="."]
script = ExtResource("1_xncsh")
metadata/_custom_type_script = "uid://cdnrxp6nu1wor"

View file

@ -1,24 +0,0 @@
@tool
extends Node3D
class_name Ocean
@onready var OceanTileMesh:PlaneMesh = preload("uid://wes0mbjy8mno")
@onready var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
var time:float
@export_tool_button("Generate Tiles","Ocean") var generate_tile_action = generate_tile
func generate_tile():
for i in range(8):
var NewTile = OceanTile.new()
add_child(NewTile)
func _ready() -> void:
if not Engine.is_editor_hint():
add_to_group("Ocean")
if OceanTileMesh != null:
OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",0.0)
func _process(delta):
if OceanTileMesh != null:
time += delta
OceanTileMesh.surface_get_material(0).set_shader_parameter("wave_time",time)

View file

@ -1,24 +1,32 @@
[gd_scene load_steps=11 format=3 uid="uid://bwdtb8qfox3nq"]
[ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://ocean.gd" id="1_aqk2v"]
[ext_resource type="Script" uid="uid://cdnrxp6nu1wor" path="res://Ocean/ocean.gd" id="1_aqk2v"]
[ext_resource type="Script" uid="uid://cnfkxclrq0i0s" path="res://buyancy_probe.gd" id="2_fj7yv"]
[ext_resource type="PlaneMesh" uid="uid://wes0mbjy8mno" path="res://Ocean/OceanTile_PlaneMesh.tres" id="2_tlwt5"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_aqk2v"]
sky_top_color = Color(0.191699, 0.357914, 1, 1)
sky_horizon_color = Color(0.549485, 0.583289, 0.73481, 1)
ground_bottom_color = Color(0.196971, 0.32493, 0.588228, 1)
ground_horizon_color = Color(0.549485, 0.583289, 0.73481, 1)
ground_energy_multiplier = 0.5
[sub_resource type="Sky" id="Sky_036b0"]
sky_material = SubResource("ProceduralSkyMaterial_aqk2v")
radiance_size = 0
[sub_resource type="Environment" id="Environment_dwbse"]
background_mode = 2
sky = SubResource("Sky_036b0")
ambient_light_source = 3
ambient_light_color = Color(0.408507, 0.421831, 0.473046, 1)
reflected_light_source = 2
tonemap_mode = 2
ssao_enabled = true
sdfgi_enabled = true
glow_enabled = true
fog_light_color = Color(0.187177, 0.206743, 0.237501, 1)
volumetric_fog_enabled = true
volumetric_fog_density = 0.0038
[sub_resource type="BoxShape3D" id="BoxShape3D_f3sb7"]
resource_name = "BoatShape"
@ -33,53 +41,22 @@ size = Vector3(0.5, 0.5, 0.5)
[sub_resource type="BoxMesh" id="BoxMesh_aqk2v"]
size = Vector3(0.5, 0.5, 0.5)
[sub_resource type="FogMaterial" id="FogMaterial_fj7yv"]
density = 0.03
albedo = Color(0.636369, 0.709149, 0.427976, 1)
[node name="World" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_dwbse")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
transform = Transform3D(-0.866024, -0.433016, 0.250001, 0, 0.499998, 0.866026, -0.500003, 0.749999, -0.43301, 0, 1.5328, 0)
shadow_enabled = true
[node name="Ocean" type="Node3D" parent="."]
script = ExtResource("1_aqk2v")
[node name="OceanTile00" type="MeshInstance3D" parent="Ocean"]
mesh = ExtResource("2_tlwt5")
[node name="OceanTile01" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile02" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 0)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile03" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile04" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile05" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, -10)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile06" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, -10)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile07" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 10)
mesh = ExtResource("2_tlwt5")
[node name="OceanTile08" type="MeshInstance3D" parent="Ocean"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 0, 10)
mesh = ExtResource("2_tlwt5")
[node name="Boat" type="RigidBody3D" parent="."]
mass = 5.0
@ -645,3 +622,8 @@ skeleton = NodePath("../../Boat")
transform = Transform3D(0.992158, 0, -0.124987, 0, 1, 0, 0.124987, 0, 0.992158, -1.45113, -3.57628e-07, 4.84515)
script = ExtResource("2_fj7yv")
show_probe = true
[node name="FogVolume" type="FogVolume" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.04025, 0)
shape = 4
material = SubResource("FogMaterial_fj7yv")