From 2a80c8f5267e9e9e95bc8d42e0f945d215d78e76 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Thu, 18 Aug 2022 14:10:28 +0200 Subject: [PATCH 01/12] low poly --- world/World.gd | 2 +- world/game.gd | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/world/World.gd b/world/World.gd index a3f2520..0638b4d 100644 --- a/world/World.gd +++ b/world/World.gd @@ -12,7 +12,7 @@ func draw_world(): var st = SurfaceTool.new() st.begin(Mesh.PRIMITIVE_TRIANGLES) - st.add_smooth_group(true) + # st.add_smooth_group(true) for triangle in terrain.get_triangles(): for point in triangle.points(): var factor = Vector3(1, 24*5, 1) diff --git a/world/game.gd b/world/game.gd index 5492cf2..d29d96e 100644 --- a/world/game.gd +++ b/world/game.gd @@ -4,11 +4,11 @@ signal world_loaded export(int) var width = 2000 export(int) var height = 2000 -export(int) var spacing = 5 +export(int) var spacing = 20 export(int, 1, 9) var octaves = 5 export(int, 1, 30) var wavelength = 8 export(int) var border_width = 200 -export(int) var terraces = 24 +export(int) var terraces = 12 export(int) var terrace_height = 5 export(float) var mountain_height = 6.0 / 24.0 export(int) var river_proba = 200 -- 2.36.2 From 40aef0a08c213030788d3083abfb8a4c996c0a7b Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Thu, 18 Aug 2022 14:14:04 +0200 Subject: [PATCH 02/12] Cleanup --- world/game.gd | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/world/game.gd b/world/game.gd index d29d96e..d69cd87 100644 --- a/world/game.gd +++ b/world/game.gd @@ -22,7 +22,6 @@ func _ready(): rng.randomize() noise.seed = rng.randi() noise.octaves = octaves - # terrain = Terrain.new(width,height,spacing,false) var terrain_name="bonjourazeazea" terrain = Terrain.new() @@ -203,13 +202,4 @@ func add_trees(): if num == 1: var tree = treescene.instance() tree.translation = Vector3(point.point3d() * Vector3(1, 24*5, 1)) - add_child(tree) - - # for point in points.size(): - # if points_data[i].elevation > 0: - # var num = rng.randi_range(0, 20) - # if num == 2: - # var tree = treescene.instance() - # tree.translation = Vector3(points[i].x, points_data[i].elevation * terrace_height, points[i].y) - - # add_child(tree) + add_child(tree) \ No newline at end of file -- 2.36.2 From 93e1038a814d1f23adde9251848a33489c3529ef Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Thu, 18 Aug 2022 16:37:02 +0200 Subject: [PATCH 03/12] =?UTF-8?q?Getter=20et=20setter=20pour=20l'=C3=A9l?= =?UTF-8?q?=C3=A9vation=20dans=20les=20triangles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/terrain/Terrain.gd | 9 ++++++++- world/game.gd | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 4483c5f..1225386 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -81,7 +81,14 @@ class Triangle: func center3d(): var points = points() return (points[0].point3d() + points[1].point3d() + points[2].point3d()) / 3.0 - + + func set_elevation(elevation:float): + for point in points(): + point.set_elevation(elevation) + + func get_elevation(): + return center3d().y + func polygon(): var polygon = [] for point in points(): diff --git a/world/game.gd b/world/game.gd index d69cd87..2c11f32 100644 --- a/world/game.gd +++ b/world/game.gd @@ -202,4 +202,4 @@ func add_trees(): if num == 1: var tree = treescene.instance() tree.translation = Vector3(point.point3d() * Vector3(1, 24*5, 1)) - add_child(tree) \ No newline at end of file + add_child(tree) -- 2.36.2 From 1de23642e2570c74614d5c164576d6e8a9417dd7 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Thu, 18 Aug 2022 16:47:22 +0200 Subject: [PATCH 04/12] =?UTF-8?q?=20Calculer=20l'=C3=A9l=C3=A9vation=20pou?= =?UTF-8?q?r=20le=20triangle=20et=20non=20les=20points=20(en=20fonction=20?= =?UTF-8?q?du=20center3d)=20-=20render=203d=20cass=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/map/map.gd | 4 ++-- world/World.gd | 6 +++--- world/game.gd | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index 1334eaf..4c72cb4 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -12,9 +12,9 @@ func heightmap(): colors.add_point(0.25, Color("#fbf8b0")) # yellow colors.add_point(0, Color("#89cfa5")) # green colors.add_point(-0.999, Color("#5e4fa2")) # blue - var color = colors.interpolate(min(triangle.get_data("elevation"), 0.999)) + var color = colors.interpolate(min(triangle.get_elevation(), 0.999)) if triangle.get_data("ocean"): - var factor = pow((triangle.get_data("elevation")+1), 10) / 5.0 + var factor = pow((triangle.get_elevation()+1), 10) / 5.0 color = Color("#5e4fa2") + Color(factor, factor, factor, 0.0) if triangle.polygon().size() > 2: draw_polygon(triangle.polygon(), PoolColorArray([color])) diff --git a/world/World.gd b/world/World.gd index 0638b4d..73d9bb3 100644 --- a/world/World.gd +++ b/world/World.gd @@ -14,13 +14,13 @@ func draw_world(): st.begin(Mesh.PRIMITIVE_TRIANGLES) # st.add_smooth_group(true) for triangle in terrain.get_triangles(): - for point in triangle.points(): - var factor = Vector3(1, 24*5, 1) + # for point in triangle.points(): + var factor = Vector3(1, 24*5, 1) # if point.get_data("river") and i == 0: # factor.y -= 0 # if i == 1: # factor.y -= 2.0 - st.add_vertex(point.point3d() * factor) + st.add_vertex(triangle.center3d() * factor) st.generate_normals() # st.generate_tangents() diff --git a/world/game.gd b/world/game.gd index 2c11f32..133185c 100644 --- a/world/game.gd +++ b/world/game.gd @@ -59,7 +59,8 @@ func init_data(): if point.get_data("river"): set_river_path(point) for triangle in terrain.get_triangles(): - triangle.set_data("elevation", triangle_find_elevation(triangle)) + triangle.set_elevation(point_find_elevation(triangle.center2d())) + # triangle.set_data("elevation", triangle_find_elevation(triangle)) triangle.set_data("water", triangle_is_water(triangle)) triangle.set_data("ocean", false) # TODO #1 : Get triangles around point @@ -177,7 +178,7 @@ func triangle_find_elevation(triangle): return elevation func triangle_is_water(triangle): - if triangle.get_data("elevation") <= 0: + if triangle.get_elevation() <= 0: return true return false -- 2.36.2 From 15b6772fd7db5c6afa696286c1bddc2aeda94bff Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Thu, 18 Aug 2022 23:38:39 +0200 Subject: [PATCH 05/12] =?UTF-8?q?Nouvelle=20cr=C3=A9ation=20du=20mesh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/camera/CameraController.gd | 3 +- utils/terrain/Terrain.gd | 5 +++- world/World.gd | 43 ---------------------------- world/World3d.gd | 49 ++++++++++++++++++++++++++++++++ world/game.gd | 28 +++++++++--------- world/game.tscn | 24 ++++++++-------- 6 files changed, 81 insertions(+), 71 deletions(-) delete mode 100644 world/World.gd create mode 100644 world/World3d.gd diff --git a/utils/camera/CameraController.gd b/utils/camera/CameraController.gd index fda1053..52597ef 100644 --- a/utils/camera/CameraController.gd +++ b/utils/camera/CameraController.gd @@ -25,6 +25,7 @@ export(float, 1,3) var zoom_sensibility = 2.5 export(float, 1,3) var rotation_sensibility = 2.3 export(float, 1.0, 10.0) var height = 5.0 + var pitch : float var yaw : float var current_action = CAMERA_ACTIONS.MOVING @@ -78,7 +79,7 @@ func move(_velocity : Vector2): y_offset = result.position.y else: y_offset = 0 - global_transform.origin.y = max(5 + y_offset * 1.3, 10) + global_transform.origin.y = max(15 + y_offset * 1.3, 10) emit_signal("camera_moved", global_transform.origin) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 1225386..4fe0e50 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -73,7 +73,7 @@ class Triangle: if opposite._idx >= 0: list_triangles.append(opposite.triangle()) return list_triangles - + func center2d(): var points = points() return (points[0].point2d() + points[1].point2d() + points[2].point2d()) / 3.0 @@ -247,6 +247,9 @@ class Edge: func triangle(): return Triangle.new(floor(_idx / 3), _terrain) + + func opposite_triangle(): + return opposite().triangle() func start(): return Point.new(_terrain._triangles[_idx], _terrain) diff --git a/world/World.gd b/world/World.gd deleted file mode 100644 index 73d9bb3..0000000 --- a/world/World.gd +++ /dev/null @@ -1,43 +0,0 @@ -extends Spatial - -var terrain - -func _ready(): - pass - - -func draw_world(): - # for i in range(0, 1, 1): - # print(i) - var st = SurfaceTool.new() - - st.begin(Mesh.PRIMITIVE_TRIANGLES) - # st.add_smooth_group(true) - for triangle in terrain.get_triangles(): - # for point in triangle.points(): - var factor = Vector3(1, 24*5, 1) - # if point.get_data("river") and i == 0: - # factor.y -= 0 - # if i == 1: - # factor.y -= 2.0 - st.add_vertex(triangle.center3d() * factor) - - st.generate_normals() - # st.generate_tangents() - st.index() - # Commit to a mesh. - var mesh = st.commit() - - var mi = MeshInstance.new() - mi.mesh = mesh - var material = load("res://world/world.material") - mi.set_surface_material(0, material) - mi.create_trimesh_collision() - mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON - print(mi) - add_child(mi) - -func _on_Game_world_loaded(game_terrain): - terrain = game_terrain - draw_world() - diff --git a/world/World3d.gd b/world/World3d.gd new file mode 100644 index 0000000..5626a04 --- /dev/null +++ b/world/World3d.gd @@ -0,0 +1,49 @@ +extends Spatial + +var terrain + +func _ready(): + pass + + +func draw_world(): + # for i in range(0, 1, 1): + # print(i) + var st = SurfaceTool.new() + + st.begin(Mesh.PRIMITIVE_TRIANGLES) + # st.add_smooth_group(true) + for triangle in terrain.get_triangles(): + var factor = Vector3(1, 12*10, 1) + for edge in triangle.edges(): + if triangle.get_elevation() > edge.opposite_triangle().get_elevation(): + st.add_vertex(Vector3(edge.start().point3d().x, triangle.get_elevation(), edge.start().point3d().z) * factor) + st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor) + st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor) + + st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor) + st.add_vertex(Vector3(edge.end().point3d().x, edge.opposite_triangle().get_elevation(), edge.end().point3d().z) * factor) + st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor) + + for point in triangle.points(): + st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor) + + st.generate_normals() + st.generate_tangents() + st.index() + # Commit to a mesh. + var mesh = st.commit() + + var mi = MeshInstance.new() + mi.mesh = mesh + var material = load("res://world/world.material") + mi.set_surface_material(0, material) + mi.create_trimesh_collision() + mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON + print(mi) + add_child(mi) + +func _on_Game_world_loaded(game_terrain): + terrain = game_terrain + draw_world() + diff --git a/world/game.gd b/world/game.gd index 133185c..e524a7c 100644 --- a/world/game.gd +++ b/world/game.gd @@ -8,7 +8,7 @@ export(int) var spacing = 20 export(int, 1, 9) var octaves = 5 export(int, 1, 30) var wavelength = 8 export(int) var border_width = 200 -export(int) var terraces = 12 +export(int) var terraces = 10 export(int) var terrace_height = 5 export(float) var mountain_height = 6.0 / 24.0 export(int) var river_proba = 200 @@ -43,21 +43,21 @@ func _ready(): Global.print_debug("Pas de palais ..., pas de palais.") func init_data(): - for point in terrain.get_points(): - point.set_elevation(point_find_elevation(point.point2d())) - point.set_data("water", point_is_water(point)) - point.set_data("mountain", point_is_mountain(point)) + # for point in terrain.get_points(): + # point.set_elevation(point_find_elevation(point.point2d())) + # point.set_data("water", point_is_water(point)) + # point.set_data("mountain", point_is_mountain(point)) # point.set_data("river", point_is_river(point)) - fill_oceans() + # fill_oceans() - for point in terrain.get_points(): - if point.get_data("water") and not point.get_data("ocean"): - point.set_elevation(0.1) - point.set_data("water", false) - point.set_data("coast", point_is_coast(point)) - if point.get_data("river"): - set_river_path(point) + # for point in terrain.get_points(): + # if point.get_data("water") and not point.get_data("ocean"): + # point.set_elevation(0.1) + # point.set_data("water", false) + # point.set_data("coast", point_is_coast(point)) + # if point.get_data("river"): + # set_river_path(point) for triangle in terrain.get_triangles(): triangle.set_elevation(point_find_elevation(triangle.center2d())) # triangle.set_data("elevation", triangle_find_elevation(triangle)) @@ -202,5 +202,5 @@ func add_trees(): var num = rng.randi_range(0, 5) if num == 1: var tree = treescene.instance() - tree.translation = Vector3(point.point3d() * Vector3(1, 24*5, 1)) + tree.translation = Vector3(point.point3d() * Vector3(1, 12*10, 1)) add_child(tree) diff --git a/world/game.tscn b/world/game.tscn index 30a9446..e8a7107 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -3,7 +3,7 @@ [ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1] [ext_resource path="res://world/game.gd" type="Script" id=2] [ext_resource path="res://world/default_env.tres" type="Environment" id=3] -[ext_resource path="res://world/World.gd" type="Script" id=4] +[ext_resource path="res://world/World3d.gd" type="Script" id=4] [ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5] [sub_resource type="PlaneMesh" id=1] @@ -24,36 +24,36 @@ scale = Vector2( 0.25, 0.25 ) scale = Vector2( 4, 4 ) z_index = 3 -[node name="World" type="Spatial" parent="."] +[node name="World3d" type="Spatial" parent="."] script = ExtResource( 4 ) -[node name="Water" type="MeshInstance" parent="World"] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.1, 1000 ) +[node name="Water" type="MeshInstance" parent="World3d"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.5, 1000 ) mesh = SubResource( 1 ) material/0 = SubResource( 2 ) -[node name="WorldEnvironment" type="WorldEnvironment" parent="World"] +[node name="WorldEnvironment" type="WorldEnvironment" parent="World3d"] environment = ExtResource( 3 ) -[node name="CamBase" parent="World" instance=ExtResource( 5 )] +[node name="CamBase" parent="World3d" instance=ExtResource( 5 )] -[node name="Camera" parent="World/CamBase" index="0"] +[node name="Camera" parent="World3d/CamBase" index="0"] transform = Transform( 1, 0, 0, 0, 0.910272, -0.41401, 0, 0.41401, 0.910272, 0, -1.90735e-06, 6.618 ) movement_speed = 48.076 min_zoom = 10.0 zoom_sensibility = 1.436 rotation_sensibility = 3.0 -[node name="DirectionalLight" type="DirectionalLight" parent="World"] +[node name="DirectionalLight" type="DirectionalLight" parent="World3d"] transform = Transform( 1, 0, 0, 0, 0.512597, 0.858629, 0, -0.858629, 0.512597, 0, 1.41623, 0 ) light_energy = 0.1 shadow_enabled = true [connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"] -[connection signal="world_loaded" from="." to="World" method="_on_Game_world_loaded"] -[connection signal="map_clicked" from="UI/Map" to="World/CamBase/Camera" method="_on_Map_map_clicked"] -[connection signal="camera_moved" from="World/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"] +[connection signal="world_loaded" from="." to="World3d" method="_on_Game_world_loaded"] +[connection signal="map_clicked" from="UI/Map" to="World3d/CamBase/Camera" method="_on_Map_map_clicked"] +[connection signal="camera_moved" from="World3d/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"] [editable path="UI"] [editable path="UI/Map"] -[editable path="World/CamBase"] +[editable path="World3d/CamBase"] -- 2.36.2 From 29b26e77d904e78310b1a24a5f7bdb6c796763cf Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Fri, 19 Aug 2022 17:38:50 +0200 Subject: [PATCH 06/12] =?UTF-8?q?Ajout=20d'un=20outline=20en=20post=20proc?= =?UTF-8?q?ess=20via=20la=20cam=C3=A9ra?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE.md | 22 +++ project.godot | 12 +- utils/camera/CamBase.tscn | 4 - utils/camera/CameraController.gd | 8 +- utils/camera/outline.gd | 156 ++++++++++++++++++ utils/camera/post_process_outlines.shader | 134 +++++++++++++++ .../post_process_outlines_material.tres | 18 ++ world/game.tscn | 8 +- world/world.material | Bin 1166 -> 1159 bytes 9 files changed, 348 insertions(+), 14 deletions(-) create mode 100644 LICENSE.md create mode 100644 utils/camera/outline.gd create mode 100644 utils/camera/post_process_outlines.shader create mode 100644 utils/camera/post_process_outlines_material.tres diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..b3e9312 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2021 João Marinheiro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/project.godot b/project.godot index 2be809e..42ff1a3 100644 --- a/project.godot +++ b/project.godot @@ -9,11 +9,16 @@ config_version=4 _global_script_classes=[ { -"base": "Camera", +"base": "CameraOutline", "class": "CameraController", "language": "GDScript", "path": "res://utils/camera/CameraController.gd" }, { +"base": "Camera", +"class": "CameraOutline", +"language": "GDScript", +"path": "res://utils/camera/outline.gd" +}, { "base": "Reference", "class": "Delaunator", "language": "GDScript", @@ -31,6 +36,7 @@ _global_script_classes=[ { } ] _global_script_class_icons={ "CameraController": "", +"CameraOutline": "", "Delaunator": "", "PoissonDiscSampling": "", "Terrain": "" @@ -46,6 +52,10 @@ config/icon="res://icon.png" Global="*res://utils/Global.gd" +[editor_plugins] + +enabled=PoolStringArray( ) + [gui] common/drop_mouse_on_gui_input_disabled=true diff --git a/utils/camera/CamBase.tscn b/utils/camera/CamBase.tscn index 7e9ecb6..beda4a5 100644 --- a/utils/camera/CamBase.tscn +++ b/utils/camera/CamBase.tscn @@ -15,10 +15,6 @@ size = 20.0 near = 0.01 far = 8192.0 script = ExtResource( 3 ) -movement_speed = 70.017 -min_zoom = 51.0 -zoom_sensibility = 2.818 -rotation_sensibility = 1.0 [node name="Node" type="Node" parent="Camera"] script = ExtResource( 4 ) diff --git a/utils/camera/CameraController.gd b/utils/camera/CameraController.gd index 52597ef..7ddf252 100644 --- a/utils/camera/CameraController.gd +++ b/utils/camera/CameraController.gd @@ -1,4 +1,4 @@ -extends Camera +extends CameraOutline class_name CameraController signal camera_moved(new_location) @@ -8,7 +8,7 @@ enum CAMERA_ACTIONS{ ROTATING_VIEW, } -export(float,1,100) var movement_speed = 30 +export(float,1,100) var movement_speed = 48 export(float,0.01,0.99) var movement_damping = 0.74 export(float,0.01, 3.1415) var max_rotation = 1.2 export(float,0.01, 3.1415) var min_rotation = 0.5 @@ -18,10 +18,10 @@ export(float,0.01, 3.1415) var min_rotation = 0.5 export(float, 0.0,1.0) var edge_size = 0.0 #EDIT HERE--->**,***<--- ZOOM MIN AND MAX LIMITS -export(float, 10,100) var min_zoom = 25 +export(float, 10,100) var min_zoom = 10 export(float, 10,100) var max_zoom = 100 -export(float, 1,3) var zoom_sensibility = 2.5 +export(float, 1,3) var zoom_sensibility = 1.4 export(float, 1,3) var rotation_sensibility = 2.3 export(float, 1.0, 10.0) var height = 5.0 diff --git a/utils/camera/outline.gd b/utils/camera/outline.gd new file mode 100644 index 0000000..e2e9316 --- /dev/null +++ b/utils/camera/outline.gd @@ -0,0 +1,156 @@ +tool +extends Camera + +class_name CameraOutline + +var screen_mesh : MeshInstance; + +var global_post_process_material : ShaderMaterial = preload("post_process_outlines_material.tres"); +var instance_post_process_material : ShaderMaterial = global_post_process_material.duplicate(); + +#Size of color outlines +export (float) var color_outline_scale = 0.0 setget set_color_scale, get_color_scale + +#Size of depth outlines +export (float) var depth_outline_scale = 2.0 setget set_depth_scale, get_depth_scale + +#Controls sensitivity to depth changes (lower values mean more outlines, but more artifacts too) +export (float,0,10) var depth_threshold = 0.1 setget set_depth_thres, get_depth_thres + +#Multiplier for depth values +export (float) var depth_multiplier = 99999.0 setget set_depth_multiplier, get_depth_multiplier + +#General threshold for values to be considered as edges +export (float,0,1) var edge_threshold = 0.332 setget set_edge_threshold, get_edge_threshold + +#Max edge alpha, lower values means edges blend more with background +export (float,0,1) var max_edge_alpha = 0.791 setget set_max_edge_alpha, get_max_edge_alpha + +#General multiplier for edge alpha value, higher values mean harder edges +export (float) var edge_alpha_multiplier = 3.0 setget set_alpha_multiplier, get_alpha_multiplier + +#Outlines color +export (Color) var edge_color = Color(0.4,0.4,0.4,1) setget set_edge_color, get_edge_color + +#Sets depth edges to use the laplace operator instead of sobel +export (Texture) var background_tex setget set_bg_tex, get_bg_tex + +#Sets depth edges to use the laplace operator instead of sobel +export (bool) var depth_use_laplace = true setget set_depth_use_laplace, get_depth_use_laplace + +#Sets color edges to use the laplace operator instead of sobel +export (bool) var color_use_laplace = false setget set_color_use_laplace, get_color_use_laplace + +#Sets shader to use render the BG behind the edges +export (bool) var use_bg_texture = false setget set_use_bg_texture, get_use_bg_texture + +func set_color_scale(value): + color_outline_scale = value; + instance_post_process_material.set_shader_param("color_outline_scale", value); + +func get_color_scale(): + return color_outline_scale; + +func set_depth_scale(value): + depth_outline_scale = value; + instance_post_process_material.set_shader_param("depth_outline_scale", value); + +func get_depth_scale(): + return depth_outline_scale; + +func set_depth_thres(value): + depth_threshold = value; + instance_post_process_material.set_shader_param("depth_threshold", value); + +func get_depth_thres(): + return depth_threshold; + +func set_depth_multiplier(value): + depth_multiplier = value; + instance_post_process_material.set_shader_param("depth_multiplier", value); + +func get_depth_multiplier(): + return depth_multiplier; + +func set_edge_threshold(value): + edge_threshold = value; + instance_post_process_material.set_shader_param("edge_threshold", value); + +func get_edge_threshold(): + return edge_threshold; + +func set_max_edge_alpha(value): + max_edge_alpha = value; + instance_post_process_material.set_shader_param("max_edge_alpha", value); + +func get_max_edge_alpha(): + return max_edge_alpha; + +func set_alpha_multiplier(value): + edge_alpha_multiplier = value; + instance_post_process_material.set_shader_param("edge_alpha_multiplier", value); + +func get_alpha_multiplier(): + return edge_alpha_multiplier; + +func set_edge_color(value): + edge_color = value; + instance_post_process_material.set_shader_param("edge_color", value); + +func get_edge_color(): + return edge_color; + +func set_bg_tex(value): + background_tex = value; + instance_post_process_material.set_shader_param("bgTex", value); + +func get_bg_tex(): + return background_tex; + +func set_depth_use_laplace(value): + depth_use_laplace = value; + instance_post_process_material.set_shader_param("depth_use_laplace", value); + +func get_depth_use_laplace(): + return depth_use_laplace; + +func set_color_use_laplace(value): + color_use_laplace = value; + instance_post_process_material.set_shader_param("color_use_laplace", value); + +func get_color_use_laplace(): + return color_use_laplace; + +func set_use_bg_texture(value): + use_bg_texture = value; + instance_post_process_material.set_shader_param("use_bg_texture", value); + +func get_use_bg_texture(): + return use_bg_texture; + +func _ready(): + screen_mesh = MeshInstance.new(); + var quad : QuadMesh = QuadMesh.new(); + quad.size = Vector2(2,2); + screen_mesh.mesh = quad; + screen_mesh.material_override = instance_post_process_material; + screen_mesh.extra_cull_margin = 16000; + add_child(screen_mesh); + + set_color_scale(color_outline_scale) + set_depth_scale(depth_outline_scale) + set_alpha_multiplier(edge_alpha_multiplier) + set_depth_thres(depth_threshold) + set_depth_multiplier(depth_multiplier) + set_edge_threshold(edge_threshold) + set_max_edge_alpha(max_edge_alpha) + set_edge_color(edge_color) + set_bg_tex(background_tex) + set_use_bg_texture(use_bg_texture) + set_depth_use_laplace(depth_use_laplace) + set_color_use_laplace(color_use_laplace) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/utils/camera/post_process_outlines.shader b/utils/camera/post_process_outlines.shader new file mode 100644 index 0000000..b200433 --- /dev/null +++ b/utils/camera/post_process_outlines.shader @@ -0,0 +1,134 @@ +shader_type spatial; +render_mode depth_draw_never, depth_test_disable, unshaded; + +uniform float color_outline_scale = 2.0; // Size of color outlines +uniform float depth_outline_scale = 2.0; // Size of depth outlines +uniform float depth_threshold : hint_range(0,10) = 2.5; // Controls sensitivity to depth changes (lower values mean more outlines, but more artifacts too) +uniform float depth_multiplier = 1000.0; // Multiplier for depth values +uniform float edge_threshold : hint_range(0,1) = 0.04; // General threshold for values to be considered as edges +uniform float max_edge_alpha : hint_range(0,1) = 0.8; // Max edge alpha, lower values means edges blend more with background +uniform float edge_alpha_multiplier = 3.0; // General multiplier for edge alpha value, higher values mean harder edges + +uniform vec4 edge_color : hint_color = vec4(0,0,0,1); // Outlines color +uniform sampler2D bgTex : hint_albedo; // BG texture + +uniform bool depth_use_laplace = true; // Sets depth edges to use the laplace operator instead of sobel +uniform bool color_use_laplace = false; // Sets color edges to use the laplace operator instead of sobel +uniform bool use_bg_texture = false; // Sets shader to use render the BG behind the edges + +varying mat4 CAMERA; + +void vertex() { + POSITION = vec4(VERTEX, 1.0); + CAMERA = CAMERA_MATRIX; +} + +float getDepthVal(sampler2D depthTex, vec2 depthUV, mat4 invProjMat) { + float depth = texture(depthTex, depthUV).r; + return depth; +} + +void fragment() { + float halfScaleFloor_c = floor(color_outline_scale * 0.5); + float halfScaleCeil_c = ceil(color_outline_scale * 0.5); + float halfScaleFloor_d = floor(depth_outline_scale * 0.5); + float halfScaleCeil_d = ceil(depth_outline_scale * 0.5); + vec2 texelSize = vec2(1.0/VIEWPORT_SIZE.x, 1.0/VIEWPORT_SIZE.y); + + vec2 bottomLeftUV_c = SCREEN_UV - vec2(texelSize.x, texelSize.y) * halfScaleFloor_c; + vec2 topRightUV_c = SCREEN_UV + vec2(texelSize.x, texelSize.y) * halfScaleCeil_c; + vec2 topUV_c = SCREEN_UV + vec2(0.0, texelSize.y * halfScaleCeil_c); + vec2 bottomUV_c = SCREEN_UV + vec2(0.0, -texelSize.y * halfScaleFloor_c); + vec2 rightUV_c = SCREEN_UV + vec2(texelSize.x * halfScaleCeil_c, 0.0); + vec2 leftUV_c = SCREEN_UV + vec2(-texelSize.x * halfScaleFloor_c, 0.0); + vec2 bottomRightUV_c = SCREEN_UV + vec2(texelSize.x * halfScaleCeil_c, -texelSize.y * halfScaleFloor_c); + vec2 topLeftUV_c = SCREEN_UV + vec2(-texelSize.x * halfScaleFloor_c, texelSize.y * halfScaleCeil_c); + vec2 centerUV_c = SCREEN_UV; + + vec2 bottomLeftUV_d = SCREEN_UV - vec2(texelSize.x, texelSize.y) * halfScaleFloor_d; + vec2 topRightUV_d = SCREEN_UV + vec2(texelSize.x, texelSize.y) * halfScaleCeil_d; + vec2 topUV_d = SCREEN_UV + vec2(0.0, texelSize.y * halfScaleCeil_d); + vec2 bottomUV_d = SCREEN_UV + vec2(0.0, -texelSize.y * halfScaleFloor_d); + vec2 rightUV_d = SCREEN_UV + vec2(texelSize.x * halfScaleCeil_d, 0.0); + vec2 leftUV_d = SCREEN_UV + vec2(-texelSize.x * halfScaleFloor_d, 0.0); + vec2 bottomRightUV_d = SCREEN_UV + vec2(texelSize.x * halfScaleCeil_d, -texelSize.y * halfScaleFloor_d); + vec2 topLeftUV_d = SCREEN_UV + vec2(-texelSize.x * halfScaleFloor_d, texelSize.y * halfScaleCeil_d); + vec2 centerUV_d = SCREEN_UV; + + float d0 = getDepthVal(DEPTH_TEXTURE, topLeftUV_d, INV_PROJECTION_MATRIX); + float d1 = getDepthVal(DEPTH_TEXTURE, topUV_d, INV_PROJECTION_MATRIX); + float d2 = getDepthVal(DEPTH_TEXTURE, topRightUV_d, INV_PROJECTION_MATRIX); + float d3 = getDepthVal(DEPTH_TEXTURE, leftUV_d, INV_PROJECTION_MATRIX); + float d4 = getDepthVal(DEPTH_TEXTURE, centerUV_d, INV_PROJECTION_MATRIX); + float d5 = getDepthVal(DEPTH_TEXTURE, rightUV_d, INV_PROJECTION_MATRIX); + float d6 = getDepthVal(DEPTH_TEXTURE, bottomLeftUV_d, INV_PROJECTION_MATRIX); + float d7 = getDepthVal(DEPTH_TEXTURE, bottomUV_d, INV_PROJECTION_MATRIX); + float d8 = getDepthVal(DEPTH_TEXTURE, bottomRightUV_d, INV_PROJECTION_MATRIX); + + float edgeDepth = 0.0; + if (depth_use_laplace) { + edgeDepth = (8.0 * d4 - (d0+d1+d2+d3+d5+d6+d7+d8)) * depth_multiplier; + } + else { + float d_sobel_edge_h = (d2 + (2.0*d5) + d8 - (d0 + (2.0*d3) + d6)) / 4.0; + float d_sobel_edge_v = (d0 + (2.0*d1) + d2 - (d6 + (2.0*d7) + d8)) / 4.0; + edgeDepth = sqrt((d_sobel_edge_h * d_sobel_edge_h) + (d_sobel_edge_v * d_sobel_edge_v)) * depth_multiplier; + } + + + float depthThreshold = depth_threshold * d0; + edgeDepth = smoothstep(depthThreshold-depthThreshold/5.0, depthThreshold, edgeDepth); + + float edgeVal = edgeDepth; + + vec4 n0 = texture(SCREEN_TEXTURE, topLeftUV_c); + vec4 n1 = texture(SCREEN_TEXTURE, topUV_c); + vec4 n2 = texture(SCREEN_TEXTURE, topRightUV_c); + vec4 n3 = texture(SCREEN_TEXTURE, leftUV_c); + vec4 n4 = texture(SCREEN_TEXTURE, centerUV_c); + vec4 n5 = texture(SCREEN_TEXTURE, rightUV_c); + vec4 n6 = texture(SCREEN_TEXTURE, bottomLeftUV_c); + vec4 n7 = texture(SCREEN_TEXTURE, bottomUV_c); + vec4 n8 = texture(SCREEN_TEXTURE, bottomRightUV_c); + + + float color_edge; + + if (color_use_laplace) { + vec4 laplace_edge = (8.0 * n4 - (n0+n1+n2+n3+n5+n6+n7+n8)); + color_edge = laplace_edge.r; + color_edge += laplace_edge.g; + color_edge += laplace_edge.b; + color_edge /= 3.0; + } + else { + vec4 sobel_edge_h = (n2 + (2.0*n5) + n8 - (n0 + (2.0*n3) + n6)) / 4.0; + vec4 sobel_edge_v = (n0 + (2.0*n1) + n2 - (n6 + (2.0*n7) + n8)) / 4.0; + vec4 sobel = sqrt((sobel_edge_h * sobel_edge_h) + (sobel_edge_v * sobel_edge_v)); + color_edge = sobel.r; + color_edge += sobel.g; + color_edge += sobel.b; + color_edge /= 3.0; + } + + edgeVal = max(edgeVal, color_edge); + + if (edgeVal > edge_threshold) { + if (use_bg_texture) { + ALBEDO = edge_color.rgb * texture(bgTex, SCREEN_UV).rgb; + } + else { + ALBEDO = edge_color.rgb; + ALPHA = min(max_edge_alpha,edgeVal * edge_alpha_multiplier); + } + + } + else { + if (use_bg_texture) { + ALBEDO = texture(bgTex, SCREEN_UV).rgb; + } + else { + ALPHA = 0.0; + } + } +} \ No newline at end of file diff --git a/utils/camera/post_process_outlines_material.tres b/utils/camera/post_process_outlines_material.tres new file mode 100644 index 0000000..2308901 --- /dev/null +++ b/utils/camera/post_process_outlines_material.tres @@ -0,0 +1,18 @@ +[gd_resource type="ShaderMaterial" load_steps=2 format=2] + +[ext_resource path="res://utils/camera/post_process_outlines.shader" type="Shader" id=1] + +[resource] +resource_local_to_scene = true +shader = ExtResource( 1 ) +shader_param/color_outline_scale = 1.0 +shader_param/depth_outline_scale = 1.0 +shader_param/depth_threshold = 1.0 +shader_param/depth_multiplier = 10000.0 +shader_param/edge_threshold = 0.1 +shader_param/max_edge_alpha = 0.8 +shader_param/edge_alpha_multiplier = 3.0 +shader_param/edge_color = Color( 0, 0, 0, 1 ) +shader_param/depth_use_laplace = true +shader_param/color_use_laplace = false +shader_param/use_bg_texture = false diff --git a/world/game.tscn b/world/game.tscn index e8a7107..a1855c0 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -38,14 +38,12 @@ environment = ExtResource( 3 ) [node name="CamBase" parent="World3d" instance=ExtResource( 5 )] [node name="Camera" parent="World3d/CamBase" index="0"] -transform = Transform( 1, 0, 0, 0, 0.910272, -0.41401, 0, 0.41401, 0.910272, 0, -1.90735e-06, 6.618 ) -movement_speed = 48.076 -min_zoom = 10.0 +transform = Transform( 1, 0, 0, 0, 0.659983, -0.75128, 0, 0.75128, 0.659983, 0, -1.90735e-06, 6.618 ) +fov = 55.0 zoom_sensibility = 1.436 -rotation_sensibility = 3.0 [node name="DirectionalLight" type="DirectionalLight" parent="World3d"] -transform = Transform( 1, 0, 0, 0, 0.512597, 0.858629, 0, -0.858629, 0.512597, 0, 1.41623, 0 ) +transform = Transform( 1, 0, 0, 0, 0.641744, 0.766919, 0, -0.766919, 0.641744, 0, 1.41623, 0 ) light_energy = 0.1 shadow_enabled = true diff --git a/world/world.material b/world/world.material index e4ba4f61e8eed162c40ed316a3053fa7e9d80572..2448577da7906540ca1bbab346bee09f2c9adfbe 100644 GIT binary patch literal 1159 zcmV;21bF*WQ$s@n000005C8y83IG6a1ONaiwJ-f(O$jX{0QT^tLlAY-0TBQo#rG`56;8I|SmylGc@YTsHy(pov^kPPR?QYnqJg=SCi}$(OptCpchP&H9S^T%VDRei4rgGlTa^*fJOQP;(K%lz?bO+Z`yZOoXrtaG6Cfl1# zkyK~uN)ztMX*)gZ^qWzBUIR5g<c_L?ED7)I9XVI+<|#_$HnZ$({-is~$EAhEuM5Ux9`b-tsC-U{ zDu`t+5`9=okU-HAs#HvXKpvORO3R3V)2Pv%VrWK0BuPP17{)*XLXavmZW5qVIm?33 zFhr_~CfVBWusoN+RrAW(h6Y4Qw49SeuK64e9$I9!nc&nx7FNBvB55DX08Bzsdr=Yx z7qlcXA+VwflPxJbl1yQDfC8v)>+QA-mTODw4t>wGQ5pH-I6Zu>5IS3DNgQ`^SF+ zZ`lc)1Bf%{nB%IX1|Ogw2gt6XNTd|IRc!b${gBFL{J{%}5a$Y95xf*D&`rM*s$CpM zTm*C!ctZGUfMQ|8?h)W^vs3z7ek*a@83bwe(X$mqxsy&-_UXXixen9gBcMi);X*oO zSaUkc^#smN5GT6{aG_)epoBgqwK4yq;4`nQfYz>&oBIaOPzQ`2DrUhfK+h07>5NHb zFC2pa6Tkm99TKtaX6#x*N z2p~)Wg#e8JlmOReO>*%)OL2vgtvJ?c0b_YZ7dnqb^G9*35=WD?&=`Lmi9UNLv^FV~ z`8!EJ?LBOD@=7mCXe_;$O<%hk_9@S6=k?7|+qAG99b&edxFVE6a&bw>5Sw9FbPPI12#~;VdjnhJt zFp<(vJrOB=?<_}S+ey(f3+D0B33*U>`-+)#VL3_rcXhaq2NVPFvd5RWx;D> znqA4(eCNh_aWYjJ%iu2_jBZI%rAma23{*37LZGeV@|>ARH^v9fIcZ4a|*_6 zG^Wq@Nxn@>f?Jg(Td$=yDxeU^#19}D3nE3bizLZ|j*S}`wu6U*6dE*YWFBzj$W{m$ zlFf93n3;i*Wj%akA9CpE?g%OiM3hkAIg%j6j2_V42(ln1kjiqzkkQ?n?mkeUyA@O+ z#~Gf&$c(F#>ZCI9uTxY%p6zBycxNx?TeX^>D3#jGva|VQfj&@e=*iYD3G@9?>I*EKvnwxPmPA}tT{mis-2!Ixe>KXZmEAdA7?14()*^49@H zk|tCVfeYazaUigg3X_#|)Ll>?7@z>sZN1%A#e%jp@8I`L8ryD?+Sj0#NAwXYP(TJD&j4|Si`}1S+w-T?j{GX|u~P`^?4w_+i1OGSQTTenn!XFHh*OPl zC%v%3;URmx)M9wE+md5H8ip!gVHF%FBI{@a)9o?Ed2kS9SlcSaLGZ(!bOXA>db~6g z_E;_?Nd}y=TRu^6js!W`^?(aYb_+`Aqfr|ka3p+8+2i@ZNB55OfH0~8xz*}Ae=M9F z3p_Hf&}B#!Vp*22xW)L!T}%6#xJL -- 2.36.2 From 7fd1e9557e4ee2e6cc6048d6dadec19720f812b3 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Fri, 19 Aug 2022 17:53:29 +0200 Subject: [PATCH 07/12] =?UTF-8?q?Probl=C3=A8me=20normales?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/terrain/Terrain.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/terrain/Terrain.gd b/utils/terrain/Terrain.gd index 5ea81fa..83de061 100644 --- a/utils/terrain/Terrain.gd +++ b/utils/terrain/Terrain.gd @@ -63,6 +63,7 @@ class Triangle: var list_points = [] for edge in edges(): list_points.append(Point.new(_terrain._triangles[edge._idx], _terrain)) + list_points.invert() return list_points func triangles_adjacent(): -- 2.36.2 From c6e93b0062aef2ed0e93aaf54c3da20aa4a0d093 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Fri, 19 Aug 2022 21:41:54 +0200 Subject: [PATCH 08/12] =?UTF-8?q?am=C3=A9lioration=20du=20rendu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- world/World3d.gd | 7 +++++-- world/game.gd | 5 +++-- world/game.tscn | 2 +- world/world.material | Bin 1159 -> 1168 bytes world/world.tres | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/world/World3d.gd b/world/World3d.gd index 5626a04..0a0ded5 100644 --- a/world/World3d.gd +++ b/world/World3d.gd @@ -24,12 +24,12 @@ func draw_world(): st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor) st.add_vertex(Vector3(edge.end().point3d().x, edge.opposite_triangle().get_elevation(), edge.end().point3d().z) * factor) st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor) - + for point in triangle.points(): st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor) st.generate_normals() - st.generate_tangents() +# st.generate_tangents() st.index() # Commit to a mesh. var mesh = st.commit() @@ -42,8 +42,11 @@ func draw_world(): mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON print(mi) add_child(mi) + Global.print_debug(OS.get_ticks_msec() / 1000.0) func _on_Game_world_loaded(game_terrain): terrain = game_terrain draw_world() +# 18 - 42 +# 4 - 9 diff --git a/world/game.gd b/world/game.gd index 2550823..4fd0c80 100644 --- a/world/game.gd +++ b/world/game.gd @@ -23,7 +23,7 @@ func _ready(): noise.seed = rng.randi() noise.octaves = octaves - var terrain_name="bonjour" + var terrain_name="bonjour90" terrain = Terrain.new() print(terrain.list()) @@ -36,6 +36,7 @@ func _ready(): if terrain.is_created() or terrain.is_loaded(): init_data() add_trees() + Global.print_debug(OS.get_ticks_msec() / 1000.0) emit_signal("world_loaded", terrain) else: Global.print_debug("Pas de terrain, pas de construction ...") @@ -178,7 +179,7 @@ func triangle_find_elevation(triangle): return elevation func triangle_is_water(triangle): - if triangle.get_elevation() <= 0: + if triangle.get_elevation() < 0: return true return false diff --git a/world/game.tscn b/world/game.tscn index a1855c0..26c0e5f 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -43,7 +43,7 @@ fov = 55.0 zoom_sensibility = 1.436 [node name="DirectionalLight" type="DirectionalLight" parent="World3d"] -transform = Transform( 1, 0, 0, 0, 0.641744, 0.766919, 0, -0.766919, 0.641744, 0, 1.41623, 0 ) +transform = Transform( 0.971628, 0.168947, -0.16552, 0, 0.699825, 0.714314, 0.236516, -0.694047, 0.67997, 0, 1.41623, 14.8745 ) light_energy = 0.1 shadow_enabled = true diff --git a/world/world.material b/world/world.material index 2448577da7906540ca1bbab346bee09f2c9adfbe..ae35355256802629b9ee79a543d08aaa831609a5 100644 GIT binary patch literal 1168 zcmV;B1aJFNQ$s@n000005C8yH3IG6j1ONaiwJ-f(Rta?@0M>D*L-2Il2Dp**RCSY) z^F{*|OUnb#vVmvdLJZUXzt`m!=>xHDp|vIsthfOf_6jq4=!ij0z(J#F;GSBknj{!G z!OGVZhX9cPlmI&8J>?duhpnzq!dJ&zFK8_@hr#!Vt8^5#D|Ix<3$8W2Bksd_g3oHL z+_aPSo7B@*C$sdT1lQ7w+eELsLqF}Bam`-LRJ#p)do@q(?gm`bTQ{o34sZQUs^LjH zc^5dnbn1wAv~pq_>C7M2G`l+mcZc9s)=alt$yAdgk-IY>;O+w411FP`x{U9eOiCg} z?$%S5B>32S;PBXYs*=ZkQ^M(JD0gL!`_|E;{PkO6yM34OR__PlW#YK#VpcnvI&x0b z=I=Tycn2U41v^xoPk9PnR9i~HkD=g2Q4r=g zmu10gW2#*V-<_+*fpIcb8tiYSps98o&gN8UyiVFl!E7}9(vFjP)4cT?us7AN1L9+- zl-K-LbN=Q=gXVAkHq8{gFb&j(PNlh3=1h0oaNLxGFa};A&q}C;<*}#Wb*fZ+Ttc4| zk39upHX0M%nUY?sm;|*eOZaAN@%$i$^sE36nKs#2tmUKxI2O@hzX>!85uL&edF#2 z3b?z1O7uDdwJ&n(>ZCfUOrGA#-Oq2VVG`fryuEhu{FAkE)-5}{KlzXHacN0YRkjLe-(lX*BB7oAU!JT4gMnpuCf~1hfKmtOL zDl={pfKxflg3vHTs){Dr+VAk0ch-&d%4Gwarle_k#D|yXya;AA;t4YmsYzMn^=6Oc zP?mw~5=o3sNdm5AlSF~ZiYiRD`1MEzwJ`w-^t!FvZP_f+R`DI^p4SFv5@ z!zPjte-E_(_(R~64T0|fqUIlS+)IMs4fK-$87MkLs8Z04^7s{4j1$c@^9+%`e5qy<`^QZ&S`YQ}gT-H?O{s(!O@a=g$ i-(k#U7e+xrh*R^9A|OK;o%}SaOQ|1|LVz7oQ$s^%yDuC7 literal 1159 zcmV;21bF*WQ$s@n000005C8y83IG6a1ONaiwJ-f(O$jX{0QT^tLlAY-0TBQo#rG`56;8I|SmylGc@YTsHy(pov^kPPR?QYnqJg=SCi}$(OptCpchP&H9S^T%VDRei4rgGlTa^*fJOQP;(K%lz?bO+Z`yZOoXrtaG6Cfl1# zkyK~uN)ztMX*)gZ^qWzBUIR5g<c_L?ED7)I9XVI+<|#_$HnZ$({-is~$EAhEuM5Ux9`b-tsC-U{ zDu`t+5`9=okU-HAs#HvXKpvORO3R3V)2Pv%VrWK0BuPP17{)*XLXavmZW5qVIm?33 zFhr_~CfVBWusoN+RrAW(h6Y4Qw49SeuK64e9$I9!nc&nx7FNBvB55DX08Bzsdr=Yx z7qlcXA+VwflPxJbl1yQDfC8v)>+QA-mTODw4t>wGQ5pH-I6Zu>5IS3DNgQ`^SF+ zZ`lc)1Bf%{nB%IX1|Ogw2gt6XNTd|IRc!b${gBFL{J{%}5a$Y95xf*D&`rM*s$CpM zTm*C!ctZGUfMQ|8?h)W^vs3z7ek*a@83bwe(X$mqxsy&-_UXXixen9gBcMi);X*oO zSaUkc^#smN5GT6{aG_)epoBgqwK4yq;4`nQfYz>&oBIaOPzQ`2DrUhfK+h07>5NHb zFC2pa6Tkm99TKta Date: Fri, 19 Aug 2022 22:36:36 +0200 Subject: [PATCH 09/12] correspondance entre la map 2d et l'affichage 3d --- ui/map/map.gd | 4 ++-- world/game.gd | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ui/map/map.gd b/ui/map/map.gd index 4c72cb4..4e76e7c 100644 --- a/ui/map/map.gd +++ b/ui/map/map.gd @@ -10,9 +10,9 @@ func heightmap(): colors.add_point(0.999, Color("#9e0142")) # red colors.add_point(0.5, Color("#dc865d")) # orange colors.add_point(0.25, Color("#fbf8b0")) # yellow - colors.add_point(0, Color("#89cfa5")) # green + colors.add_point(0.0, Color("#89cfa5")) # green colors.add_point(-0.999, Color("#5e4fa2")) # blue - var color = colors.interpolate(min(triangle.get_elevation(), 0.999)) + var color = colors.interpolate(min(triangle.get_elevation()+0.001, 0.999)) if triangle.get_data("ocean"): var factor = pow((triangle.get_elevation()+1), 10) / 5.0 color = Color("#5e4fa2") + Color(factor, factor, factor, 0.0) diff --git a/world/game.gd b/world/game.gd index 4fd0c80..e4830c9 100644 --- a/world/game.gd +++ b/world/game.gd @@ -64,7 +64,6 @@ func init_data(): # triangle.set_data("elevation", triangle_find_elevation(triangle)) triangle.set_data("water", triangle_is_water(triangle)) triangle.set_data("ocean", false) - # TODO #1 : Get triangles around point for point in triangle.points(): if point.get_data("ocean"): triangle.set_data("ocean", true) -- 2.36.2 From f0a844c7cd26c4353a1adf67d41161c655190071 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Fri, 19 Aug 2022 22:37:40 +0200 Subject: [PATCH 10/12] Nettoyage --- world/World3d.gd | 1 - world/game.gd | 1 - 2 files changed, 2 deletions(-) diff --git a/world/World3d.gd b/world/World3d.gd index 0a0ded5..93d0ab8 100644 --- a/world/World3d.gd +++ b/world/World3d.gd @@ -42,7 +42,6 @@ func draw_world(): mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON print(mi) add_child(mi) - Global.print_debug(OS.get_ticks_msec() / 1000.0) func _on_Game_world_loaded(game_terrain): terrain = game_terrain diff --git a/world/game.gd b/world/game.gd index e4830c9..9e0cebb 100644 --- a/world/game.gd +++ b/world/game.gd @@ -36,7 +36,6 @@ func _ready(): if terrain.is_created() or terrain.is_loaded(): init_data() add_trees() - Global.print_debug(OS.get_ticks_msec() / 1000.0) emit_signal("world_loaded", terrain) else: Global.print_debug("Pas de terrain, pas de construction ...") -- 2.36.2 From 554057217988306d791b6e0a9cd8445c7f798470 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Fri, 19 Aug 2022 22:38:21 +0200 Subject: [PATCH 11/12] Nettoyage --- world/World3d.gd | 3 --- 1 file changed, 3 deletions(-) diff --git a/world/World3d.gd b/world/World3d.gd index 93d0ab8..0b38094 100644 --- a/world/World3d.gd +++ b/world/World3d.gd @@ -46,6 +46,3 @@ func draw_world(): func _on_Game_world_loaded(game_terrain): terrain = game_terrain draw_world() - -# 18 - 42 -# 4 - 9 -- 2.36.2 From c1efa6a72f82bedbde0a91858a081dd974008519 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Fri, 19 Aug 2022 22:39:36 +0200 Subject: [PATCH 12/12] nettoyage --- world/game.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/world/game.gd b/world/game.gd index 9e0cebb..f464858 100644 --- a/world/game.gd +++ b/world/game.gd @@ -59,7 +59,7 @@ func init_data(): # if point.get_data("river"): # set_river_path(point) for triangle in terrain.get_triangles(): - triangle.set_elevation(point_find_elevation(triangle.center2d())) + triangle.set_elevation(find_elevation(triangle.center2d())) # triangle.set_data("elevation", triangle_find_elevation(triangle)) triangle.set_data("water", triangle_is_water(triangle)) triangle.set_data("ocean", false) @@ -119,7 +119,7 @@ func set_river_path(point): # Point -func point_find_elevation(point): +func find_elevation(point): var border = border_width + rng.randf_range(-20.0, 20.0) var elevation = noise.get_noise_2d(point.x / wavelength, point.y / wavelength) -- 2.36.2