From 461a08aa6d1e233fb2a47035cec9f14b99d5917b Mon Sep 17 00:00:00 2001 From: Matteo Sonaglioni Date: Mon, 16 Mar 2026 00:47:06 +0100 Subject: [PATCH] add fake shadow --- Assets/Meshes/gpdrays_planes.obj | 120 +++++++++++++++ Assets/Meshes/gpdrays_planes.obj.import | 25 +++ Assets/Textures/noise.tres | 1 - Materials/Fog.tres | 2 +- Materials/House.tres | 5 +- Materials/House_Emissiv.tres | 5 + Materials/Legno.tres | 3 + Materials/Treno1.tres | 6 + Materials/Treno2.tres | 6 + Materials/Treno3.tres | 6 + Materials/grass.gdshader | 142 ++++++++++++++++++ Materials/grass.gdshader.uid | 1 + Materials/grass.tres | 2 +- Materials/leaves2_mat.tres | 4 +- Scenes/Chunk_Rotaie/chunk_curva_1.tscn | 24 ++- Scenes/Chunk_Rotaie/chunk_rettilineo_1.tscn | 24 ++- .../Bordi_sentiero_Rettilineo.tscn | 4 +- .../Chunk/Campagna/Chunk_C_L_2.tscn | 36 ++++- .../Chunk/Campagna/chunk_c_f_1.tscn | 24 ++- .../Chunk/Foresta/Chunk_F_L_2.tscn | 30 +++- Scenes/Chunk_Scene/House/House_XL_4.tscn | 17 ++- Scenes/Gameplay.tscn | 89 +++++++++-- Scenes/Test/Grass_Test.tscn | 22 +-- Scenes/Test/Main_Train.tscn | 3 +- Scenes/house_test_4.gdshader | 19 +++ Scenes/house_test_4.gdshader.uid | 1 + Scenes/house_test_4.tscn | 15 ++ Scripts/CameraMove.gd | 22 +++ Scripts/Day_night_Cycle.gd | 16 +- Shaders/Grass_Test.gdshader | 121 ++++++++++----- Shaders/trunk_shader.gdshader | 24 ++- 31 files changed, 725 insertions(+), 94 deletions(-) create mode 100644 Assets/Meshes/gpdrays_planes.obj create mode 100644 Assets/Meshes/gpdrays_planes.obj.import create mode 100644 Materials/grass.gdshader create mode 100644 Materials/grass.gdshader.uid create mode 100644 Scenes/house_test_4.gdshader create mode 100644 Scenes/house_test_4.gdshader.uid diff --git a/Assets/Meshes/gpdrays_planes.obj b/Assets/Meshes/gpdrays_planes.obj new file mode 100644 index 0000000..b97545b --- /dev/null +++ b/Assets/Meshes/gpdrays_planes.obj @@ -0,0 +1,120 @@ +# Blender 4.5.3 LTS +# www.blender.org +o Plane.021 +v -5.000001 15.000000 10.000000 +v -5.000000 15.000000 -10.000000 +v -5.000000 -5.000000 10.000000 +v -4.999999 -5.000000 -10.000000 +v 9.999999 0.000000 10.000000 +v 10.000001 0.000000 -10.000000 +v -10.000000 0.000000 10.000000 +v -9.999999 0.000000 -10.000000 +v 9.999999 1.000000 10.000000 +v 10.000001 1.000000 -10.000000 +v -10.000000 1.000000 10.000000 +v -9.999999 1.000000 -10.000000 +v 9.999999 2.000000 10.000000 +v 10.000001 2.000000 -10.000000 +v -10.000000 2.000000 10.000000 +v -9.999999 2.000000 -10.000000 +v 9.999999 3.000000 10.000000 +v 10.000001 3.000000 -10.000000 +v -10.000000 3.000000 10.000000 +v -9.999999 3.000000 -10.000000 +v 9.999999 4.000000 10.000000 +v 10.000001 4.000000 -10.000000 +v -10.000000 4.000000 10.000000 +v -9.999999 4.000000 -10.000000 +v 9.999999 5.000000 10.000000 +v 10.000001 5.000000 -10.000000 +v -10.000001 5.000000 10.000000 +v -9.999999 5.000000 -10.000000 +v 9.999999 6.000000 10.000000 +v 10.000001 6.000000 -10.000000 +v -10.000000 6.000000 10.000000 +v -9.999999 6.000000 -10.000000 +v 9.999999 7.000000 10.000000 +v 10.000001 7.000000 -10.000000 +v -10.000000 7.000000 10.000000 +v -9.999999 7.000000 -10.000000 +v 9.999999 8.000000 10.000000 +v 10.000001 8.000000 -10.000000 +v -10.000000 8.000000 10.000000 +v -9.999999 8.000000 -10.000000 +v 9.999999 9.000000 10.000000 +v 10.000001 9.000000 -10.000000 +v -10.000000 9.000000 10.000000 +v -9.999999 9.000000 -10.000000 +v 9.999999 10.000000 10.000000 +v 10.000001 10.000000 -10.000000 +v -10.000000 10.000000 10.000000 +v -9.999999 10.000000 -10.000000 +v 4.999999 15.000000 10.000000 +v 5.000000 15.000000 -10.000000 +v 5.000000 -5.000000 10.000000 +v 5.000001 -5.000000 -10.000000 +v 3.999999 15.000000 10.000000 +v 4.000000 15.000000 -10.000000 +v 4.000000 -5.000000 10.000000 +v 4.000001 -5.000000 -10.000000 +v 2.999999 15.000000 10.000000 +v 3.000000 15.000000 -10.000000 +v 3.000000 -5.000000 10.000000 +v 3.000001 -5.000000 -10.000000 +v 1.999999 15.000000 10.000000 +v 2.000000 15.000000 -10.000000 +v 2.000000 -5.000000 10.000000 +v 2.000001 -5.000000 -10.000000 +v 0.999999 15.000000 10.000000 +v 1.000000 15.000000 -10.000000 +v 1.000000 -5.000000 10.000000 +v 1.000001 -5.000000 -10.000000 +v -0.000001 15.000000 10.000000 +v 0.000000 15.000000 -10.000000 +v -0.000000 -5.000000 10.000000 +v 0.000001 -5.000000 -10.000000 +v -1.000001 15.000000 10.000000 +v -1.000000 15.000000 -10.000000 +v -1.000000 -5.000000 10.000000 +v -0.999999 -5.000000 -10.000000 +v -2.000001 15.000000 10.000000 +v -2.000000 15.000000 -10.000000 +v -2.000000 -5.000000 10.000000 +v -1.999999 -5.000000 -10.000000 +v -3.000001 15.000000 10.000000 +v -3.000000 15.000000 -10.000000 +v -3.000000 -5.000000 10.000000 +v -2.999999 -5.000000 -10.000000 +v -4.000001 15.000000 10.000000 +v -4.000000 15.000000 -10.000000 +v -4.000000 -5.000000 10.000000 +v -3.999999 -5.000000 -10.000000 +vn -1.0000 -0.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +s 0 +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 5/1/2 6/2/2 8/3/2 7/4/2 +f 9/1/2 10/2/2 12/3/2 11/4/2 +f 13/1/2 14/2/2 16/3/2 15/4/2 +f 17/1/2 18/2/2 20/3/2 19/4/2 +f 21/1/2 22/2/2 24/3/2 23/4/2 +f 25/1/2 26/2/2 28/3/2 27/4/2 +f 29/1/2 30/2/2 32/3/2 31/4/2 +f 33/1/2 34/2/2 36/3/2 35/4/2 +f 37/1/2 38/2/2 40/3/2 39/4/2 +f 41/1/2 42/2/2 44/3/2 43/4/2 +f 45/1/2 46/2/2 48/3/2 47/4/2 +f 49/1/1 50/2/1 52/3/1 51/4/1 +f 53/1/1 54/2/1 56/3/1 55/4/1 +f 57/1/1 58/2/1 60/3/1 59/4/1 +f 61/1/1 62/2/1 64/3/1 63/4/1 +f 65/1/1 66/2/1 68/3/1 67/4/1 +f 69/1/1 70/2/1 72/3/1 71/4/1 +f 73/1/1 74/2/1 76/3/1 75/4/1 +f 77/1/1 78/2/1 80/3/1 79/4/1 +f 81/1/1 82/2/1 84/3/1 83/4/1 +f 85/1/1 86/2/1 88/3/1 87/4/1 diff --git a/Assets/Meshes/gpdrays_planes.obj.import b/Assets/Meshes/gpdrays_planes.obj.import new file mode 100644 index 0000000..e79f481 --- /dev/null +++ b/Assets/Meshes/gpdrays_planes.obj.import @@ -0,0 +1,25 @@ +[remap] + +importer="wavefront_obj" +importer_version=1 +type="Mesh" +uid="uid://d3m8muh7jxu7s" +path="res://.godot/imported/gpdrays_planes.obj-65ef5e30785c4d8ac9b800543201b211.mesh" + +[deps] + +files=["res://.godot/imported/gpdrays_planes.obj-65ef5e30785c4d8ac9b800543201b211.mesh"] + +source_file="res://Assets/Meshes/gpdrays_planes.obj" +dest_files=["res://.godot/imported/gpdrays_planes.obj-65ef5e30785c4d8ac9b800543201b211.mesh", "res://.godot/imported/gpdrays_planes.obj-65ef5e30785c4d8ac9b800543201b211.mesh"] + +[params] + +generate_tangents=true +generate_lods=true +generate_shadow_mesh=true +generate_lightmap_uv2=false +generate_lightmap_uv2_texel_size=0.2 +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +force_disable_mesh_compression=false diff --git a/Assets/Textures/noise.tres b/Assets/Textures/noise.tres index 9ce3798..fbb1f68 100644 --- a/Assets/Textures/noise.tres +++ b/Assets/Textures/noise.tres @@ -3,7 +3,6 @@ [sub_resource type="FastNoiseLite" id="FastNoiseLite_xa3jw"] noise_type = 3 seed = 1 -frequency = 0.005 metadata/_preview_in_3d_space_ = true [resource] diff --git a/Materials/Fog.tres b/Materials/Fog.tres index c152c43..e1115e1 100644 --- a/Materials/Fog.tres +++ b/Materials/Fog.tres @@ -16,7 +16,7 @@ shader_parameter/use_red_as_alpha = true shader_parameter/fog_color = Color(0.8, 0.85, 0.9, 0.5) shader_parameter/scroll_speed = Vector2(0.01, 0.01) shader_parameter/texture_scale = Vector2(1, 1) -shader_parameter/edge_softness_y = 0.5 +shader_parameter/edge_softness_y = 0.16400000779 shader_parameter/edge_softness_x = 0.5 shader_parameter/night_intensity = 0.0 shader_parameter/sun_color = Color(1, 1, 1, 1) diff --git a/Materials/House.tres b/Materials/House.tres index 3cee04f..f7ad607 100644 --- a/Materials/House.tres +++ b/Materials/House.tres @@ -12,11 +12,14 @@ shader_parameter/use_texture = true shader_parameter/uv_scale = Vector2(1, 1) shader_parameter/palette_shift_y = 0.0 shader_parameter/gradient_start_y = 0.0 -shader_parameter/gradient_end_y = 5.0 +shader_parameter/gradient_end_y = 10.0 shader_parameter/light_steps = 3.0 shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 20.000000475 +shader_parameter/specular_softness = 0.10000000149012 +shader_parameter/specular_intensity_multiplier = 1.0000000475 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 diff --git a/Materials/House_Emissiv.tres b/Materials/House_Emissiv.tres index 4cde496..e30eb1c 100644 --- a/Materials/House_Emissiv.tres +++ b/Materials/House_Emissiv.tres @@ -11,10 +11,15 @@ shader_parameter/albedo_texture = ExtResource("2_b63ar") shader_parameter/use_texture = true shader_parameter/uv_scale = Vector2(1, 1) shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 shader_parameter/light_steps = 3.0 shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0.63321626, 0.34243506, 0, 1) shader_parameter/emission_energy = 6.000000285 diff --git a/Materials/Legno.tres b/Materials/Legno.tres index b64d1b3..b8dd9f4 100644 --- a/Materials/Legno.tres +++ b/Materials/Legno.tres @@ -16,5 +16,8 @@ shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 diff --git a/Materials/Treno1.tres b/Materials/Treno1.tres index 8f76270..eef9aba 100644 --- a/Materials/Treno1.tres +++ b/Materials/Treno1.tres @@ -8,10 +8,16 @@ shader = ExtResource("1_i3cgb") shader_parameter/albedo_color = Color(0.16250518, 0.23871198, 0.21290374, 1) shader_parameter/use_texture = true shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 shader_parameter/light_steps = 3.0 shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 diff --git a/Materials/Treno2.tres b/Materials/Treno2.tres index 10b4606..7eeeaa7 100644 --- a/Materials/Treno2.tres +++ b/Materials/Treno2.tres @@ -8,10 +8,16 @@ shader = ExtResource("1_qkrhb") shader_parameter/albedo_color = Color(0.2520276, 0.25202766, 0.25202763, 1) shader_parameter/use_texture = true shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 shader_parameter/light_steps = 3.0 shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 diff --git a/Materials/Treno3.tres b/Materials/Treno3.tres index 6cca01f..4868370 100644 --- a/Materials/Treno3.tres +++ b/Materials/Treno3.tres @@ -8,10 +8,16 @@ shader = ExtResource("1_gtyqp") shader_parameter/albedo_color = Color(0.40934297, 0.38911393, 0.34586716, 1) shader_parameter/use_texture = true shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 5.0 shader_parameter/light_steps = 5.0 shader_parameter/step_softness = 0.00999999977648 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 diff --git a/Materials/grass.gdshader b/Materials/grass.gdshader new file mode 100644 index 0000000..f2c6da3 --- /dev/null +++ b/Materials/grass.gdshader @@ -0,0 +1,142 @@ +shader_type spatial; + +render_mode specular_disabled, cull_disabled, ambient_light_disabled; + +// --- GLOBAL UNIFORMS (Vento e Neve) --- +global uniform float wind_scale; +global uniform float wind_speed; +global uniform float wind_strength; +global uniform vec3 wind_direction; +global uniform sampler2D wind_noise : filter_linear_mipmap; +global uniform float global_snow_amount; + +// --- PARAMETRI ESTETICI --- +uniform bool billboard_enabled = true; +uniform bool wind_enabled = true; +uniform vec4 base_color : source_color = vec4(0.2, 0.6, 0.3, 1.0); +uniform sampler2D alpha_texture : source_color, filter_nearest; +uniform float leaves_scale = 1.0; +uniform float rotation_degrees = 0.0; +uniform vec2 texture_offset = vec2(0.0, 0.0); +uniform float opacity : hint_range(0.0, 1.0) = 1.0; + +// --- PARAMETRI CHIAZZE ERBA (NOISE PATCHES) --- +// Inserisci qui una texture Noise (es. FastNoiseLite in Godot) +uniform sampler2D grass_noise : hint_default_white, filter_linear_mipmap; +uniform float noise_scale = 0.05; // Più è basso, più le chiazze sono grandi +uniform vec4 patch_color : source_color = vec4(0.1, 0.35, 0.2, 1.0); // Colore scuro della chiazza +uniform float patch_threshold : hint_range(0.0, 1.0) = 0.5; // Regola quanto sono estese le chiazze +uniform float patch_smoothness : hint_range(0.01, 1.0) = 0.2; // Morbidezza sfumatura ai bordi +uniform float patch_intensity : hint_range(0.0, 1.0) = 0.85; // Quanto è forte il colore della chiazza + +uniform vec4 snow_color : source_color = vec4(0.85, 0.9, 0.95, 1.0); + +// --- CONTROLLO GRADIENTE E RANDOM --- +uniform float height_min = 0.0; +uniform float height_max = 5.0; +uniform float shadow_intensity : hint_range(0.0, 1.0) = 0.5; +uniform float highlight_intensity : hint_range(0.0, 1.0) = 0.3; +uniform float light_steps : hint_range(1.0, 10.0) = 4.0; +uniform float random_mix : hint_range(0.0, 1.0) = 0.3; + +uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6; + +varying vec3 v_final_color; +varying float v_shade_factor; + +float hash(vec3 p) { + p = fract(p * 0.1031); + p += dot(p, p.yzx + 33.33); + return fract((p.x + p.y) * p.z); +} + +void vertex() { + vec3 instance_pos = MODEL_MATRIX[3].xyz; + + // --- LOGICA VENTO --- + float total_angle = radians(rotation_degrees); + if (wind_enabled) { + float time = TIME * wind_speed; + vec2 noise_uv = (instance_pos.xz * wind_scale) + (time * wind_direction.xz * 0.5); + float noise_val = textureLod(wind_noise, noise_uv, 2.0).r; + float sway = sin(time + (noise_val * 10.0)); + total_angle += (sway * wind_strength); + } + + // --- CALCOLO COLORE BASE --- + float h_factor = clamp((instance_pos.y - height_min) / (height_max - height_min), 0.0, 1.0); + float leaf_rand = hash(instance_pos); + float combined_factor = mix(h_factor, leaf_rand, random_mix); + combined_factor = ceil(combined_factor * light_steps) / light_steps; + + v_shade_factor = combined_factor; + + vec3 dark_color = base_color.rgb * (1.0 - shadow_intensity); + vec3 light_color = base_color.rgb + (vec3(1.0) - base_color.rgb) * highlight_intensity; + vec3 base_grass_color = mix(dark_color, light_color, combined_factor); + + // ---> LOGICA CHIAZZE ERBA (NOISE) <--- + // Campioniamo il noise usando la posizione XZ del singolo ciuffo d'erba nel mondo. + // Usiamo textureLod con 0.0 perché siamo nel vertex shader. + float n_val = textureLod(grass_noise, instance_pos.xz * noise_scale, 0.0).r; + + // Creiamo la maschera per la chiazza: liscia ai bordi, solida al centro. + float patch_mask = smoothstep(patch_threshold - patch_smoothness, patch_threshold + patch_smoothness, n_val); + + // Mescoliamo il colore base dell'erba con il colore scuro della chiazza + v_final_color = mix(base_grass_color, patch_color.rgb, patch_mask * patch_intensity); + + // --- LOGICA TRASFORMAZIONE --- + if (billboard_enabled) { + vec3 view_pos_origin = (VIEW_MATRIX * vec4(instance_pos, 1.0)).xyz; + vec2 offset = (UV - 0.5) * leaves_scale; + + float c = cos(total_angle); + float s = sin(total_angle); + vec2 rotated_offset = vec2(offset.x * c - offset.y * s, offset.x * s + offset.y * c); + + vec3 final_pos = view_pos_origin + vec3(rotated_offset.x, rotated_offset.y, 0.0); + + MODELVIEW_MATRIX = mat4(1.0); + MODELVIEW_MATRIX[3].xyz = final_pos; + VERTEX = vec3(0.0); + } else { + float c = cos(total_angle); + float s = sin(total_angle); + + vec2 local_v = (VERTEX.xy) * leaves_scale; + VERTEX.x = local_v.x * c - local_v.y * s; + VERTEX.y = local_v.x * s + local_v.y * c; + } +} + +void fragment() { + vec2 shifted_uv = UV + texture_offset; + vec4 tex = texture(alpha_texture, shifted_uv); + + // Trucco utile per non renderizzare i bordi trasparenti dei piani (opzionale) + if (tex.r * opacity < 0.5) { + discard; + } + + float top_mask = 1.0 - shifted_uv.y; + float snow_mask = smoothstep(1.0 - global_snow_amount, 1.2 - global_snow_amount, top_mask); + snow_mask *= step(0.01, global_snow_amount); + + vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity); + vec3 shaded_snow = mix(dark_snow, snow_color.rgb, v_shade_factor); + + vec3 final_albedo = mix(v_final_color, shaded_snow, snow_mask); + + ALBEDO = final_albedo; + // ALPHA = tex.r * opacity; -> Disabilitato se usi 'discard' sopra. + // ALPHA_SCISSOR_THRESHOLD = 0.5; -> Idem + + ROUGHNESS = 0.02; +} + +void light() { + float shadow_factor = mix(1.0 - cast_shadow_strength, 1.0, ATTENUATION); + float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION); + DIFFUSE_LIGHT += (shadow_factor * LIGHT_COLOR) * cutoff_mask; +} \ No newline at end of file diff --git a/Materials/grass.gdshader.uid b/Materials/grass.gdshader.uid new file mode 100644 index 0000000..0769392 --- /dev/null +++ b/Materials/grass.gdshader.uid @@ -0,0 +1 @@ +uid://bpdgijwdxy7n2 diff --git a/Materials/grass.tres b/Materials/grass.tres index 2cde8e7..66fbd45 100644 --- a/Materials/grass.tres +++ b/Materials/grass.tres @@ -8,7 +8,7 @@ render_priority = 0 shader = ExtResource("1_528a5") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("2_4d6mx") shader_parameter/leaves_scale = 0.5 shader_parameter/rotation_degrees = 180.0 diff --git a/Materials/leaves2_mat.tres b/Materials/leaves2_mat.tres index 7aaaa0d..0656de0 100644 --- a/Materials/leaves2_mat.tres +++ b/Materials/leaves2_mat.tres @@ -16,8 +16,8 @@ shader_parameter/texture_offset = Vector2(0, 0) shader_parameter/opacity = 1.0 shader_parameter/snow_color = Color(0.85, 0.9, 0.95, 1) shader_parameter/height_min = 6.0 -shader_parameter/height_max = 12.0 -shader_parameter/shadow_intensity = 0.650000030875 +shader_parameter/height_max = 11.0 +shader_parameter/shadow_intensity = 0.800000038 shader_parameter/highlight_intensity = 0.0 shader_parameter/light_steps = 10.0 shader_parameter/random_mix = 0.0 diff --git a/Scenes/Chunk_Rotaie/chunk_curva_1.tscn b/Scenes/Chunk_Rotaie/chunk_curva_1.tscn index 6c7249f..81d2eff 100644 --- a/Scenes/Chunk_Rotaie/chunk_curva_1.tscn +++ b/Scenes/Chunk_Rotaie/chunk_curva_1.tscn @@ -1,8 +1,8 @@ [gd_scene format=3 uid="uid://rhehrw5oipc4"] [ext_resource type="PackedScene" uid="uid://0uakvynj7hyp" path="res://Assets/Meshes/Chunk/Rotaie/Chunk_Curva_1.fbx" id="1_rsn8b"] -[ext_resource type="Material" uid="uid://cit5uciejjoou" path="res://Materials/Grass_Chunk.tres" id="2_024mu"] [ext_resource type="Shader" uid="uid://do0tct77dfhef" path="res://Shaders/snow.gdshader" id="2_nw560"] +[ext_resource type="Shader" uid="uid://c0dy1aqj1b4q3" path="res://Shaders/trunk_shader.gdshader" id="3_nw560"] [ext_resource type="Texture2D" uid="uid://3ot7glyivagg" path="res://Assets/Textures/Texture_Sentiero.png" id="4_nw560"] [ext_resource type="PackedScene" uid="uid://jj15telqu3rp" path="res://Scenes/Test/Grass_Test.tscn" id="4_one63"] [ext_resource type="PackedScene" uid="uid://bfvtlpkcnbgke" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn" id="5_nw560"] @@ -12,6 +12,26 @@ render_priority = 0 shader = ExtResource("2_nw560") shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) +[sub_resource type="ShaderMaterial" id="ShaderMaterial_dibca"] +render_priority = 0 +shader = ExtResource("3_nw560") +shader_parameter/albedo_color = Color(0.33333334, 0.3764706, 0.1882353, 1) +shader_parameter/use_texture = true +shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 +shader_parameter/light_steps = 3.0 +shader_parameter/step_softness = 0.1 +shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) +shader_parameter/shadow_offset = 0.0 +shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 +shader_parameter/emission_color = Color(0, 0, 0, 1) +shader_parameter/emission_energy = 0.0 + [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_stvfq"] albedo_color = Color(0.9811998, 0.8347986, 0.569528, 1) albedo_texture = ExtResource("4_nw560") @@ -25,7 +45,7 @@ size = Vector3(20, 10, 20) [node name="Chunk_052" parent="." index="0" unique_id=2099348783] material_overlay = SubResource("ShaderMaterial_stvfq") -surface_material_override/0 = ExtResource("2_024mu") +surface_material_override/0 = SubResource("ShaderMaterial_dibca") surface_material_override/1 = SubResource("StandardMaterial3D_stvfq") [node name="Punto_1" type="Marker3D" parent="." index="1" unique_id=663165533] diff --git a/Scenes/Chunk_Rotaie/chunk_rettilineo_1.tscn b/Scenes/Chunk_Rotaie/chunk_rettilineo_1.tscn index d76d84f..11401fd 100644 --- a/Scenes/Chunk_Rotaie/chunk_rettilineo_1.tscn +++ b/Scenes/Chunk_Rotaie/chunk_rettilineo_1.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://cm1x7327vhq8o" path="res://Assets/Meshes/Chunk/Rotaie/Chunk_Rettilineo_1.fbx" id="1_h6p6r"] [ext_resource type="Shader" uid="uid://do0tct77dfhef" path="res://Shaders/snow.gdshader" id="2_x2uag"] -[ext_resource type="Material" uid="uid://cit5uciejjoou" path="res://Materials/Grass_Chunk.tres" id="3_x2uag"] +[ext_resource type="Shader" uid="uid://c0dy1aqj1b4q3" path="res://Shaders/trunk_shader.gdshader" id="3_x2uag"] [ext_resource type="PackedScene" uid="uid://bfvtlpkcnbgke" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn" id="4_dqurx"] [ext_resource type="Material" uid="uid://768v64kvq6ho" path="res://Materials/SentieroRotaie.tres" id="4_x2uag"] [ext_resource type="PackedScene" uid="uid://jj15telqu3rp" path="res://Scenes/Test/Grass_Test.tscn" id="5_x2uag"] @@ -12,6 +12,26 @@ render_priority = 0 shader = ExtResource("2_x2uag") shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) +[sub_resource type="ShaderMaterial" id="ShaderMaterial_egosm"] +render_priority = 0 +shader = ExtResource("3_x2uag") +shader_parameter/albedo_color = Color(0.33333334, 0.3764706, 0.1882353, 1) +shader_parameter/use_texture = true +shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 +shader_parameter/light_steps = 3.0 +shader_parameter/step_softness = 0.1 +shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) +shader_parameter/shadow_offset = 0.0 +shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 +shader_parameter/emission_color = Color(0, 0, 0, 1) +shader_parameter/emission_energy = 0.0 + [sub_resource type="BoxShape3D" id="BoxShape3D_h6p6r"] size = Vector3(20, 10, 20) @@ -19,7 +39,7 @@ size = Vector3(20, 10, 20) [node name="Chunk" parent="." index="0" unique_id=1906873929] material_overlay = SubResource("ShaderMaterial_0tij7") -surface_material_override/0 = ExtResource("3_x2uag") +surface_material_override/0 = SubResource("ShaderMaterial_egosm") surface_material_override/1 = ExtResource("4_x2uag") [node name="Punto_1" type="Marker3D" parent="." index="1" unique_id=62151851] diff --git a/Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn b/Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn index 855b661..a62d1b7 100644 --- a/Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn +++ b/Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn @@ -22,7 +22,7 @@ shader_parameter/shadow_intensity = 0.730000034675 shader_parameter/highlight_intensity = 0.0 shader_parameter/light_steps = 10.0 shader_parameter/random_mix = 0.10000000475 -shader_parameter/cast_shadow_strength = 1.0 +shader_parameter/cast_shadow_strength = 0.6 [sub_resource type="PlaneMesh" id="PlaneMesh_x5qqn"] center_offset = Vector3(-0.85, 0, 0) @@ -51,7 +51,7 @@ shader_parameter/shadow_intensity = 0.730000034675 shader_parameter/highlight_intensity = 0.0 shader_parameter/light_steps = 10.0 shader_parameter/random_mix = 0.182000008645 -shader_parameter/cast_shadow_strength = 1.0 +shader_parameter/cast_shadow_strength = 0.6 [sub_resource type="MultiMesh" id="MultiMesh_oq3do"] transform_format = 1 diff --git a/Scenes/Chunk_Scene/Chunk/Campagna/Chunk_C_L_2.tscn b/Scenes/Chunk_Scene/Chunk/Campagna/Chunk_C_L_2.tscn index 23a70ee..7ba2ef9 100644 --- a/Scenes/Chunk_Scene/Chunk/Campagna/Chunk_C_L_2.tscn +++ b/Scenes/Chunk_Scene/Chunk/Campagna/Chunk_C_L_2.tscn @@ -10,6 +10,7 @@ [ext_resource type="PackedScene" uid="uid://623itnb41wew" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_AngoloInterno.tscn" id="5_vxc6e"] [ext_resource type="Texture2D" uid="uid://32bpa4nk3av1" path="res://Assets/Textures/grass_round.png" id="5_xlq82"] [ext_resource type="PackedScene" uid="uid://sybnjir2d05" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_AngoloEsterno.tscn" id="6_8ms8u"] +[ext_resource type="Shader" uid="uid://c0dy1aqj1b4q3" path="res://Shaders/trunk_shader.gdshader" id="6_11318"] [ext_resource type="PackedScene" uid="uid://bfvtlpkcnbgke" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn" id="7_8ttth"] [ext_resource type="PackedScene" uid="uid://bhcut7ndtdo2w" path="res://Assets/Test/SK_Mannequin.FBX" id="8_mhtt3"] [ext_resource type="Shader" uid="uid://co2jw3fnyc6aa" path="res://Shaders/tree_leaves.gdshader" id="8_raxwl"] @@ -83,8 +84,25 @@ render_priority = 0 shader = ExtResource("4_11318") shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vxc6e"] -albedo_color = Color(0.22937799, 0.73066276, 0.31752524, 1) +[sub_resource type="ShaderMaterial" id="ShaderMaterial_raxwl"] +render_priority = 0 +shader = ExtResource("6_11318") +shader_parameter/albedo_color = Color(0.33333334, 0.3764706, 0.1882353, 1) +shader_parameter/use_texture = true +shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 +shader_parameter/light_steps = 3.0 +shader_parameter/step_softness = 0.1 +shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) +shader_parameter/shadow_offset = 0.0 +shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 +shader_parameter/emission_color = Color(0, 0, 0, 1) +shader_parameter/emission_energy = 0.0 [sub_resource type="ShaderMaterial" id="ShaderMaterial_hq330"] render_priority = 0 @@ -101,7 +119,7 @@ render_priority = 0 shader = ExtResource("8_raxwl") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("5_xlq82") shader_parameter/leaves_scale = 0.79 shader_parameter/rotation_degrees = 180.0 @@ -121,7 +139,7 @@ render_priority = 0 shader = ExtResource("8_raxwl") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("5_xlq82") shader_parameter/leaves_scale = 0.7 shader_parameter/rotation_degrees = 180.0 @@ -141,7 +159,7 @@ render_priority = 0 shader = ExtResource("8_raxwl") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("5_xlq82") shader_parameter/leaves_scale = 0.7 shader_parameter/rotation_degrees = 180.0 @@ -258,7 +276,7 @@ mesh = SubResource("ArrayMesh_s4u17") skeleton = NodePath("") [node name="Chunk_004" parent="." index="4" unique_id=2103650482] -material_override = SubResource("StandardMaterial3D_vxc6e") +material_override = SubResource("ShaderMaterial_raxwl") material_overlay = SubResource("ShaderMaterial_hq330") [node name="Chunk_038" parent="." index="5" unique_id=476922148] @@ -298,6 +316,12 @@ transform = Transform3D(0.6122072, 0, 0, 0, 1, 0, 0, 0, 0.6007669, -5.700036, 0. transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.18730783, 0) material_override = SubResource("ShaderMaterial_odndq") +[node name="MultiMeshInstance3D2" parent="Grass4" index="5" unique_id=135312272] +visible = false + +[node name="MultiMeshInstance3D3" parent="Grass4" index="6" unique_id=404396556] +visible = false + [node name="Grass2" parent="." index="15" unique_id=560220625 instance=ExtResource("3_eyx8o")] transform = Transform3D(0.8395087, 0, 0, 0, 1, 0, 0, 0, 0.61816335, -4.278, 0.17403081, -5.945) diff --git a/Scenes/Chunk_Scene/Chunk/Campagna/chunk_c_f_1.tscn b/Scenes/Chunk_Scene/Chunk/Campagna/chunk_c_f_1.tscn index 4e97ee8..c7fc0ab 100644 --- a/Scenes/Chunk_Scene/Chunk/Campagna/chunk_c_f_1.tscn +++ b/Scenes/Chunk_Scene/Chunk/Campagna/chunk_c_f_1.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://d3loscamahf5y" path="res://Assets/Meshes/Chunk/Bioma_C/Chunk_C_E_1.fbx" id="1_jpp2r"] [ext_resource type="Script" uid="uid://byluxssk112ca" path="res://Scripts/info_chunk.gd" id="2_02kkq"] -[ext_resource type="Material" uid="uid://cit5uciejjoou" path="res://Materials/Grass_Chunk.tres" id="3_sf2c4"] +[ext_resource type="Shader" uid="uid://c0dy1aqj1b4q3" path="res://Shaders/trunk_shader.gdshader" id="3_wr3vc"] [ext_resource type="PackedScene" uid="uid://8jtrp8ckqf1a" path="res://Scenes/Chunk_Scene/House/House_muraglione.tscn" id="4_lunjj"] [ext_resource type="PackedScene" uid="uid://5sod22d0vnip" path="res://Scenes/Chunk_Scene/House/House_XL_4.tscn" id="5_tf2ul"] [ext_resource type="PackedScene" uid="uid://birttctl11th8" path="res://Scenes/Chunk_Scene/Chunk/Campagna/chunk_c_l_1.tscn" id="6_4h5ax"] @@ -14,6 +14,26 @@ [ext_resource type="PackedScene" uid="uid://4iye3qapad4y" path="res://Scenes/Test/Colonnina_Blockout.tscn" id="11_4n1py"] [ext_resource type="PackedScene" uid="uid://bfvtlpkcnbgke" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_Rettilineo.tscn" id="12_rrcoc"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_sqcol"] +render_priority = 0 +shader = ExtResource("3_wr3vc") +shader_parameter/albedo_color = Color(0.16470589, 0.50980395, 0.21960784, 1) +shader_parameter/use_texture = true +shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 +shader_parameter/light_steps = 3.0 +shader_parameter/step_softness = 0.1 +shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) +shader_parameter/shadow_offset = 0.0 +shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 +shader_parameter/emission_color = Color(0, 0, 0, 1) +shader_parameter/emission_energy = 0.0 + [sub_resource type="ShaderMaterial" id="ShaderMaterial_fim7w"] render_priority = 0 shader = ExtResource("7_wr3vc") @@ -119,7 +139,7 @@ est = true ovest = true [node name="Chunk_026" parent="." index="0" unique_id=1559745184] -material_override = ExtResource("3_sf2c4") +material_override = SubResource("ShaderMaterial_sqcol") [node name="House_Muraglione" parent="." index="1" unique_id=1060427946 instance=ExtResource("4_lunjj")] transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 0, -0.891696) diff --git a/Scenes/Chunk_Scene/Chunk/Foresta/Chunk_F_L_2.tscn b/Scenes/Chunk_Scene/Chunk/Foresta/Chunk_F_L_2.tscn index 94b715e..804a78b 100644 --- a/Scenes/Chunk_Scene/Chunk/Foresta/Chunk_F_L_2.tscn +++ b/Scenes/Chunk_Scene/Chunk/Foresta/Chunk_F_L_2.tscn @@ -7,6 +7,7 @@ [ext_resource type="Shader" uid="uid://do0tct77dfhef" path="res://Shaders/snow.gdshader" id="4_r7got"] [ext_resource type="Material" uid="uid://cufolpn48xxmv" path="res://Materials/Treno2.tres" id="5_wgav2"] [ext_resource type="PackedScene" uid="uid://jj15telqu3rp" path="res://Scenes/Test/Grass_Test.tscn" id="6_lt21y"] +[ext_resource type="Shader" uid="uid://c0dy1aqj1b4q3" path="res://Shaders/trunk_shader.gdshader" id="6_xt73x"] [ext_resource type="Shader" uid="uid://co2jw3fnyc6aa" path="res://Shaders/tree_leaves.gdshader" id="8_r7got"] [ext_resource type="Texture2D" uid="uid://32bpa4nk3av1" path="res://Assets/Textures/grass_round.png" id="8_td1ds"] [ext_resource type="PackedScene" uid="uid://623itnb41wew" path="res://Scenes/Chunk_Scene/BordiSentiero/Bordi_sentiero_AngoloInterno.tscn" id="9_jn6md"] @@ -82,8 +83,25 @@ render_priority = 0 shader = ExtResource("4_r7got") shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vxc6e"] -albedo_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +[sub_resource type="ShaderMaterial" id="ShaderMaterial_i4sa2"] +render_priority = 0 +shader = ExtResource("6_xt73x") +shader_parameter/albedo_color = Color(0.33333334, 0.3764706, 0.1882353, 1) +shader_parameter/use_texture = true +shader_parameter/uv_scale = Vector2(1, 1) +shader_parameter/palette_shift_y = 0.0 +shader_parameter/gradient_start_y = 0.0 +shader_parameter/gradient_end_y = 10.0 +shader_parameter/light_steps = 3.0 +shader_parameter/step_softness = 0.1 +shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) +shader_parameter/shadow_offset = 0.0 +shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 +shader_parameter/emission_color = Color(0, 0, 0, 1) +shader_parameter/emission_energy = 0.0 [sub_resource type="ShaderMaterial" id="ShaderMaterial_7wsa6"] render_priority = 0 @@ -100,7 +118,7 @@ render_priority = 0 shader = ExtResource("8_r7got") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("8_td1ds") shader_parameter/leaves_scale = 0.79 shader_parameter/rotation_degrees = 180.0 @@ -120,7 +138,7 @@ render_priority = 0 shader = ExtResource("8_r7got") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("8_td1ds") shader_parameter/leaves_scale = 0.7 shader_parameter/rotation_degrees = 180.0 @@ -140,7 +158,7 @@ render_priority = 0 shader = ExtResource("8_r7got") shader_parameter/billboard_enabled = true shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.19607843, 0.6117647, 0.26666668, 1) +shader_parameter/base_color = Color(0.4862745, 0.54509807, 0.29803923, 1) shader_parameter/alpha_texture = ExtResource("8_td1ds") shader_parameter/leaves_scale = 0.7 shader_parameter/rotation_degrees = 180.0 @@ -227,7 +245,7 @@ mesh = SubResource("ArrayMesh_s4u17") skeleton = NodePath("") [node name="Chunk_004" parent="." index="4" unique_id=2103650482] -material_override = SubResource("StandardMaterial3D_vxc6e") +material_override = SubResource("ShaderMaterial_i4sa2") material_overlay = SubResource("ShaderMaterial_7wsa6") [node name="Chunk_038" parent="." index="5" unique_id=476922148] diff --git a/Scenes/Chunk_Scene/House/House_XL_4.tscn b/Scenes/Chunk_Scene/House/House_XL_4.tscn index 5071049..2906673 100644 --- a/Scenes/Chunk_Scene/House/House_XL_4.tscn +++ b/Scenes/Chunk_Scene/House/House_XL_4.tscn @@ -5,6 +5,16 @@ [ext_resource type="Shader" uid="uid://do0tct77dfhef" path="res://Shaders/snow.gdshader" id="2_wanxj"] [ext_resource type="Material" uid="uid://dbmyfi5t0yfy" path="res://Materials/House_Emissiv.tres" id="3_n3fsy"] +[sub_resource type="Gradient" id="Gradient_n4qy2"] +offsets = PackedFloat32Array(0.9980237, 1) +colors = PackedColorArray(0, 0, 0, 0.5882353, 0, 0, 0, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_wanxj"] +gradient = SubResource("Gradient_n4qy2") +fill = 2 +fill_from = Vector2(0.5, 0.5) +fill_to = Vector2(0.9017094, 0.12820514) + [sub_resource type="ShaderMaterial" id="ShaderMaterial_fprka"] render_priority = 0 shader = ExtResource("2_wanxj") @@ -12,7 +22,12 @@ shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) [node name="House_XL_4" unique_id=1350238174 instance=ExtResource("1_r3art")] -[node name="House_XL_4" parent="." index="0" unique_id=479839665] +[node name="Shadow" type="Decal" parent="." index="0" unique_id=705347391] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.15501308) +size = Vector3(9, 0.5, 9) +texture_albedo = SubResource("GradientTexture2D_wanxj") + +[node name="House_XL_4" parent="." index="1" unique_id=479839665] material_overlay = SubResource("ShaderMaterial_fprka") surface_material_override/0 = ExtResource("2_mswf7") surface_material_override/1 = ExtResource("3_n3fsy") diff --git a/Scenes/Gameplay.tscn b/Scenes/Gameplay.tscn index 1faffc2..4a58494 100644 --- a/Scenes/Gameplay.tscn +++ b/Scenes/Gameplay.tscn @@ -10,8 +10,10 @@ [ext_resource type="PackedScene" uid="uid://bvynwhkogurml" path="res://Godrays_Scene.tscn" id="5_gwrkm"] [ext_resource type="Material" uid="uid://codq5gx71rj4o" path="res://Materials/Polvere atmosferica.tres" id="5_u10x4"] [ext_resource type="FastNoiseLite" uid="uid://c0mtwrkptjcuw" path="res://Assets/Textures/Noise_Clouds.tres" id="6_00nhk"] +[ext_resource type="ArrayMesh" uid="uid://d3m8muh7jxu7s" path="res://Assets/Meshes/gpdrays_planes.obj" id="6_16mw0"] [ext_resource type="Texture2D" uid="uid://dxahudyvihk8b" path="res://Assets/Textures/Stars.png" id="6_jawsd"] [ext_resource type="Script" uid="uid://brcimd12tx3dm" path="res://Scripts/edge_detection_compositor.gd" id="7_4xv0h"] +[ext_resource type="Shader" uid="uid://dkmdtejrbks8n" path="res://Shaders/godrays.gdshader" id="7_qdxup"] [ext_resource type="Texture2D" uid="uid://dey5onb6mwp3f" path="res://Assets/Textures/leaf_particle.png" id="7_vufuq"] [ext_resource type="Script" uid="uid://c5xr1w2tvcxl1" path="res://Scripts/generatore_bioma.gd" id="8_7j5hj"] [ext_resource type="Script" uid="uid://b8x6nf7u6iopv" path="res://Scripts/CameraMove.gd" id="8_17jdd"] @@ -51,6 +53,7 @@ [ext_resource type="PackedScene" uid="uid://xebpudhewwwj" path="res://Scenes/Chunk_Scene/Chunk/Campagna/Chunk_C_L_2.tscn" id="35_n33lw"] [ext_resource type="Shader" uid="uid://bl1dwh2k06yy5" path="res://Shaders/Blur.gdshader" id="46_nonqo"] [ext_resource type="Shader" uid="uid://bttmyh64kihyr" path="res://Shaders/Nebbia2D.gdshader" id="47_7j5hj"] +[ext_resource type="PackedScene" uid="uid://deoglbhviiria" path="res://Scenes/Chunk_Scene/Chunk/Campagna/chunk_c_x_1.tscn" id="50_6k3cw"] [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_10fbe"] noise = ExtResource("6_00nhk") @@ -90,18 +93,16 @@ background_mode = 2 sky = SubResource("Sky_dhgqn") ambient_light_source = 2 tonemap_mode = 2 -tonemap_exposure = 1.2 +ssao_enabled = true ssil_enabled = true glow_enabled = true glow_intensity = 0.4 -glow_strength = 0.8 +glow_strength = 0.65 glow_bloom = 1.0 fog_enabled = true fog_mode = 1 fog_density = 0.05 fog_sky_affect = 0.0 -volumetric_fog_length = 11.38 -volumetric_fog_ambient_inject = 0.27 [sub_resource type="CompositorEffect" id="CompositorEffect_vufuq"] resource_local_to_scene = false @@ -322,6 +323,29 @@ initial_velocity_max = 6.0 gravity = Vector3(0, 0, 0) color_ramp = SubResource("GradientTexture1D_on20a") +[sub_resource type="FastNoiseLite" id="FastNoiseLite_xa3jw"] +noise_type = 3 +seed = 4 +frequency = 0.0096 +metadata/_preview_in_3d_space_ = true + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_eyx0r"] +noise = SubResource("FastNoiseLite_xa3jw") +seamless = true + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_tbvi6"] +render_priority = 0 +shader = ExtResource("7_qdxup") +shader_parameter/noise_texture = SubResource("NoiseTexture2D_eyx0r") +shader_parameter/ray_color = Color(0.99999994, 0.782454, 0.2698755, 1) +shader_parameter/base_alpha = 1.0 +shader_parameter/noise_stretching = 3.17200010317 +shader_parameter/noise_scale = 1.0 +shader_parameter/scrolling_speed = Vector2(-0.15, 0) +shader_parameter/depth_softness = 1.0 +shader_parameter/edge_fade_power = 2.0 +shader_parameter/intensity_multiplier = 0.03600000171 + [sub_resource type="Curve3D" id="Curve3D_bedag"] closed = true bake_interval = 150.82 @@ -479,6 +503,9 @@ shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 @@ -496,6 +523,9 @@ shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 @@ -613,6 +643,9 @@ shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 @@ -630,6 +663,9 @@ shader_parameter/step_softness = 0.1 shader_parameter/shadow_color = Color(0.4, 0.4, 0.6, 1) shader_parameter/shadow_offset = 0.0 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/specular_size = 60.0 +shader_parameter/specular_softness = 0.01 +shader_parameter/specular_intensity_multiplier = 0.5 shader_parameter/emission_color = Color(0, 0, 0, 1) shader_parameter/emission_energy = 0.0 @@ -749,6 +785,8 @@ script = ExtResource("1_cr3ar") color_mattina = Color(0.9342753, 0.77912414, 0.6057529, 1) color_pomeriggio = Color(0.9485261, 0.6254264, 0.38133258, 1) color_notte = Color(0.18353948, 0.18552834, 0.48496485, 1) +rotazione_sole_mattina = Vector3(-66, 85, 0) +rotazione_sole_notte = Vector3(-66, 85, 0) esposizione_mattina = 0.8 esposizione_pomeriggio = 0.7 esposizione_notte = 0.9 @@ -767,7 +805,7 @@ colore_nebbia_pomeriggio = Color(0.9627952, 0.5901167, 0.75933033, 1) densita_nebbia_mattina = 0.02 densita_nebbia_pomeriggio = 0.04 bloom_mattina = 0.4 -bloom_notte = 0.8 +bloom_notte = 0.6 energia_luce_notte = 0.6 materiale_nebbia = ExtResource("2_4xv0h") materiale_pioggia_gocce = ExtResource("3_4wepm") @@ -786,8 +824,8 @@ godray_spawn_offset = Vector3(20, 80, 20) godray_rotation_degrees = Vector3(50, 30, 0) godray_scale = Vector3(2, 25, 50) particelle_lucciole = NodePath("SubViewportContainer/SubViewport/World/Camere/CameraPivot/Lucciole") -quantita_lucciole = 400 -raggio_spawn_lucciole = 40.0 +quantita_lucciole = 550 +raggio_spawn_lucciole = 60.0 particelle_vento = NodePath("SubViewportContainer/SubViewport/World/Camere/CameraPivot/Wind") quantita_vento = 50 bottone_neve = NodePath("CanvasLayer/CheckButtonNeve") @@ -834,11 +872,14 @@ light_energy = 0.0 shadow_enabled = true [node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=789046128] -transform = Transform3D(0.4848096, 0.6108477, 0.62595904, -6.256785e-08, -0.71569276, 0.6984152, 0.8746197, -0.33859846, -0.34697473, 0, 4.540125, 24.469929) +transform = Transform3D(0.08715579, -0.91147786, 0.4020097, 0, 0.4035453, 0.91495955, -0.99619454, -0.07974404, 0.035171315, 0, 0, 0) +light_indirect_energy = 0.0 +light_volumetric_fog_energy = 0.0 shadow_enabled = true shadow_bias = 0.2 -shadow_opacity = 0.9 -shadow_blur = 0.2 +shadow_normal_bias = 0.0 +shadow_opacity = 0.97 +shadow_blur = 0.4 directional_shadow_mode = 0 directional_shadow_fade_start = 0.9 @@ -871,6 +912,7 @@ script = ExtResource("8_7j5hj") path_treno = NodePath("../Path3D") bioma_campagna = Array[PackedScene]([ExtResource("35_n33lw")]) bioma_foresta = Array[PackedScene]([ExtResource("20_00nhk")]) +raggio_visivo = 4 scala_distretti = 0.08 [node name="MainMap" parent="SubViewportContainer/SubViewport/World" unique_id=1895741703 instance=ExtResource("8_bedag")] @@ -978,13 +1020,13 @@ skeleton = NodePath("../../../../../..") surface_material_override/0 = SubResource("ShaderMaterial_xjipq") [node name="Fog" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/World/Camere/CameraPivot" unique_id=1575620825] -transform = Transform3D(-0.00869238, -0.66189253, 16.6858, 0.2884251, 28.964518, 0.89438576, -85.35571, 20.688793, -0.20234363, -30.12199, 5.3996053, 49.111935) +transform = Transform3D(-0.008675572, -0.67532605, 44.935955, 0.2878669, 29.552338, 2.4086356, -85.190544, 21.108652, -0.54492366, -47.215515, 5.399597, 49.11187) mesh = SubResource("PlaneMesh_gsfny") skeleton = NodePath("../../../../../..") surface_material_override/0 = ExtResource("2_4xv0h") [node name="Fog2" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/World/Camere/CameraPivot" unique_id=567097306] -transform = Transform3D(-0.00869238, -0.66189253, 16.6858, 0.28842452, 28.964481, 0.8943846, -85.35557, 20.688757, -0.20234334, 22.599558, 6.179737, 49.908066) +transform = Transform3D(-0.008677567, -0.6737314, 41.582806, 0.28793296, 29.482548, 2.228902, -85.2101, 21.0588, -0.50426126, 51.961967, 6.179736, 49.90806) mesh = SubResource("PlaneMesh_gsfny") skeleton = NodePath("../../../../../..") surface_material_override/0 = ExtResource("2_4xv0h") @@ -1007,12 +1049,19 @@ process_material = SubResource("ParticleProcessMaterial_6k3cw") draw_pass_1 = ExtResource("21_l1dl0") [node name="CameraIso" type="Camera3D" parent="SubViewportContainer/SubViewport/World/Camere/CameraPivot" unique_id=375499667] -transform = Transform3D(0.5778576, -0.57709634, 0.57709634, 0, 0.7071067, 0.7071067, -0.8161376, -0.408607, 0.408607, 231.45, 290, 173.79) +transform = Transform3D(0.5778576, -0.57709634, 0.5770964, 0, 0.70710677, 0.7071067, -0.8161376, -0.40860698, 0.408607, 231.45, 290, 173.79) projection = 1 size = 35.0 near = 0.001 far = 500.0 +[node name="Godrays" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/World/Camere/CameraPivot" unique_id=1427419882] +transform = Transform3D(-0.67549545, -2.1963887, -1.0475811, -0.5471906, 0.28750744, 1.6396307, -0.3011426, 4.4043226, -0.62945014, -14.547424, 12.248147, -19.129498) +visible = false +mesh = ExtResource("6_16mw0") +skeleton = NodePath("../../../../../../DirectionalLight3D") +surface_material_override/0 = SubResource("ShaderMaterial_tbvi6") + [node name="Path3D" type="Path3D" parent="SubViewportContainer/SubViewport/World" unique_id=335893914 node_paths=PackedStringArray("gruppo_camere")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7547531, 9.898563) curve = SubResource("Curve3D_bedag") @@ -20917,6 +20966,20 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.7385445, 0, 43.8387) [node name="SK_Mannequin2" parent="SubViewportContainer/SubViewport/World" unique_id=24662648 instance=ExtResource("34_3nw1o")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.9180713, 0, 29.270012) +[node name="Chunk_C_X_4" parent="SubViewportContainer/SubViewport/World" unique_id=1284797159 instance=ExtResource("50_6k3cw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -80, 5, 140) +nord = false +est = false +sud = false +ovest = false + +[node name="Chunk_C_X_2" parent="SubViewportContainer/SubViewport/World" unique_id=1326892054 instance=ExtResource("50_6k3cw")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -100, 10, 140) +nord = false +est = false +sud = false +ovest = false + [node name="ScreenEffect" type="CanvasLayer" parent="SubViewportContainer/SubViewport" unique_id=1639236585] layer = 2 diff --git a/Scenes/Test/Grass_Test.tscn b/Scenes/Test/Grass_Test.tscn index 1cd76d8..c231cdd 100644 --- a/Scenes/Test/Grass_Test.tscn +++ b/Scenes/Test/Grass_Test.tscn @@ -3,6 +3,7 @@ [ext_resource type="PackedScene" uid="uid://cqlsf7plpx1tf" path="res://Assets/Test/Tree_V1.fbx" id="1_1rhib"] [ext_resource type="Material" uid="uid://cudoptcrtgl7u" path="res://Materials/grass.tres" id="2_4v7oi"] [ext_resource type="Shader" uid="uid://co2jw3fnyc6aa" path="res://Shaders/tree_leaves.gdshader" id="3_aek5d"] +[ext_resource type="Texture2D" uid="uid://cnlnnkjsnccmx" path="res://Assets/Textures/Leaf_Test2.png" id="4_ba7vs"] [ext_resource type="Texture2D" uid="uid://32bpa4nk3av1" path="res://Assets/Textures/grass_round.png" id="4_bawi4"] [sub_resource type="QuadMesh" id="QuadMesh_rpt6v"] @@ -19,12 +20,12 @@ buffer = PackedFloat32Array(5.185896e-06, -9.267926e-05, -0.10099996, -4.4373837 render_priority = 0 shader = ExtResource("3_aek5d") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.15660453, 0.4936788, 0.21260661, 1) -shader_parameter/alpha_texture = ExtResource("4_bawi4") -shader_parameter/leaves_scale = 0.6 -shader_parameter/rotation_degrees = 180.0 -shader_parameter/texture_offset = Vector2(0, 0) +shader_parameter/wind_enabled = false +shader_parameter/base_color = Color(0.103467666, 0.34917185, 0.14285779, 1) +shader_parameter/alpha_texture = ExtResource("4_ba7vs") +shader_parameter/leaves_scale = 0.92 +shader_parameter/rotation_degrees = 0.0 +shader_parameter/texture_offset = Vector2(0, 0.19) shader_parameter/opacity = 1.0 shader_parameter/snow_color = Color(0.85, 0.9, 0.95, 1) shader_parameter/height_min = 0.0 @@ -45,12 +46,12 @@ buffer = PackedFloat32Array(-1.001, 0, 0, -2.684194, 0, 1.001, -5.966425e-08, -0 render_priority = 0 shader = ExtResource("3_aek5d") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = true -shader_parameter/base_color = Color(0.20210624, 0.6310462, 0.27384275, 1) +shader_parameter/wind_enabled = false +shader_parameter/base_color = Color(0.14700681, 0.45590013, 0.22758594, 1) shader_parameter/alpha_texture = ExtResource("4_bawi4") -shader_parameter/leaves_scale = 0.6 +shader_parameter/leaves_scale = 0.46 shader_parameter/rotation_degrees = 180.0 -shader_parameter/texture_offset = Vector2(0, 0) +shader_parameter/texture_offset = Vector2(0, 0.155) shader_parameter/opacity = 1.0 shader_parameter/snow_color = Color(0.85, 0.9, 0.95, 1) shader_parameter/height_min = 0.0 @@ -83,6 +84,7 @@ skeleton = NodePath("../MultiMeshInstance3D") [node name="Grass" type="MeshInstance3D" parent="." index="3" unique_id=1574618411] transform = Transform3D(13.14, 0, 0, 0, -5.743677e-07, 13.14, 0, -13.14, -5.743677e-07, 0, 0, 0) +visible = false transparency = 1.0 cast_shadow = 0 mesh = SubResource("QuadMesh_txdb7") diff --git a/Scenes/Test/Main_Train.tscn b/Scenes/Test/Main_Train.tscn index 053a1d2..c706874 100644 --- a/Scenes/Test/Main_Train.tscn +++ b/Scenes/Test/Main_Train.tscn @@ -15,7 +15,8 @@ shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_crne2"] emission_enabled = true -emission = Color(1, 0.75645417, 0.2204, 1) +emission = Color(0.59849787, 0.2744873, 0.018916829, 1) +emission_energy_multiplier = 14.84 [node name="Train2" unique_id=206892833 instance=ExtResource("1_8k78i")] transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0) diff --git a/Scenes/house_test_4.gdshader b/Scenes/house_test_4.gdshader new file mode 100644 index 0000000..9b31881 --- /dev/null +++ b/Scenes/house_test_4.gdshader @@ -0,0 +1,19 @@ +shader_type spatial; +// "unshaded" rende il materiale immune alle altre luci della scena +render_mode unshaded, depth_draw_opaque; + +uniform vec4 shadow_color : source_color = vec4(0.0, 0.0, 0.0, 0.6); +uniform float radius : hint_range(0.0, 1.0) = 0.45; +uniform float softness : hint_range(0.0, 1.0) = 0.1; + +void fragment() { + // Calcola la distanza del pixel dal centro del piano (UV 0.5, 0.5) + float dist = distance(UV, vec2(0.5, 0.5)); + + // smoothstep crea una transizione morbida per i bordi dell'ombra + float mask = smoothstep(radius, radius - softness, dist); + + // Applica il colore e gestisce la trasparenza usando la maschera + ALBEDO = shadow_color.rgb; + ALPHA = mask * shadow_color.a; +} \ No newline at end of file diff --git a/Scenes/house_test_4.gdshader.uid b/Scenes/house_test_4.gdshader.uid new file mode 100644 index 0000000..9d6306e --- /dev/null +++ b/Scenes/house_test_4.gdshader.uid @@ -0,0 +1 @@ +uid://cksojna7cbjpk diff --git a/Scenes/house_test_4.tscn b/Scenes/house_test_4.tscn index f56ed9a..2ceb6b1 100644 --- a/Scenes/house_test_4.tscn +++ b/Scenes/house_test_4.tscn @@ -9,8 +9,23 @@ render_priority = 0 shader = ExtResource("3_n4qy2") shader_parameter/snow_color = Color(0.95, 0.98, 1, 1) +[sub_resource type="Gradient" id="Gradient_n4qy2"] +offsets = PackedFloat32Array(0.9980237, 1) +colors = PackedColorArray(0, 0, 0, 0.5882353, 0, 0, 0, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_0x3ja"] +gradient = SubResource("Gradient_n4qy2") +fill = 2 +fill_from = Vector2(0.5, 0.5) +fill_to = Vector2(0.9017094, 0.12820514) + [node name="HouseTest_4" unique_id=462882013 instance=ExtResource("1_03u1s")] [node name="Cube_008" parent="." index="0" unique_id=2087805025] material_override = ExtResource("2_n4qy2") material_overlay = SubResource("ShaderMaterial_0x3ja") + +[node name="Shadow" type="Decal" parent="." index="1" unique_id=30846848] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.059038162, 0, 0) +size = Vector3(9, 0.5, 9) +texture_albedo = SubResource("GradientTexture2D_0x3ja") diff --git a/Scripts/CameraMove.gd b/Scripts/CameraMove.gd index 5279e06..32d5465 100644 --- a/Scripts/CameraMove.gd +++ b/Scripts/CameraMove.gd @@ -15,6 +15,14 @@ extends Node3D @export_group("Cinematic Mode") @export var tempo_cambio_camera : float = 10.0 +# --- NUOVO: Variabili per lo Zoom Cinematico --- +@export_group("Zoom Isometrico") +@export var size_normale : float = 35.0 +@export var size_zoom : float = 60.0 +@export var tempo_zoom : float = 1.2 +var is_zoomed : bool = false +var zoom_tween : Tween + var is_moving_enabled : bool = true # --- Variabili Cinematic Mode --- @@ -63,6 +71,20 @@ func _input(event): else: print("Cinematic Mode: DISATTIVATA") return + + # --- NUOVO: TASTO Z: ZOOM DOLCE CAMERA ISOMETRICA --- + if event.keycode == KEY_Z and camera_iso: + is_zoomed = !is_zoomed + var target_size = size_zoom if is_zoomed else size_normale + + # Se c'è già un'animazione in corso, fermala per evitare conflitti + if zoom_tween and zoom_tween.is_valid(): + zoom_tween.kill() + + zoom_tween = create_tween() + zoom_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + zoom_tween.tween_property(camera_iso, "size", target_size, tempo_zoom) + return # --- CONTROLLI MANUALI (1-5) --- var intervento_manuale = false diff --git a/Scripts/Day_night_Cycle.gd b/Scripts/Day_night_Cycle.gd index 173c2f7..ff83ee5 100644 --- a/Scripts/Day_night_Cycle.gd +++ b/Scripts/Day_night_Cycle.gd @@ -5,6 +5,12 @@ extends Node3D @export var color_pomeriggio: Color = Color(1.0, 0.6, 0.2, 1.0) @export var color_notte: Color = Color(0.1, 0.1, 0.3, 1.0) +# --- NUOVO: Rotazione del Sole --- +@export_group("Rotazione Sole (Gradi)") +@export var rotazione_sole_mattina: Vector3 = Vector3(-15.0, 45.0, 0.0) +@export var rotazione_sole_pomeriggio: Vector3 = Vector3(-75.0, 10.0, 0.0) +@export var rotazione_sole_notte: Vector3 = Vector3(-35.0, -120.0, 0.0) + @export_group("Esposizione Generale") @export var esposizione_mattina: float = 1.0 @export var esposizione_pomeriggio: float = 0.95 @@ -236,10 +242,11 @@ func _process(delta: float) -> void: var base_fog_color: Color var base_fog_density: float var base_bloom: float - var base_esposizione: float # <--- NUOVA VARIABILE + var base_esposizione: float var base_grad_top: Color var base_grad_bot: Color var base_grad_intensity: float + var base_rotazione_sole: Vector3 # <--- NUOVA VARIABILE var tempesta_attiva = is_raining or is_actively_snowing @@ -267,10 +274,11 @@ func _process(delta: float) -> void: base_fog_color = colore_nebbia_mattina.lerp(colore_nebbia_pomeriggio, t) base_fog_density = lerp(densita_nebbia_mattina, densita_nebbia_pomeriggio, t) base_bloom = lerp(bloom_mattina, bloom_pomeriggio, t) - base_esposizione = lerp(esposizione_mattina, esposizione_pomeriggio, t) # <--- INTERPOLAZIONE MATTINA/POM + base_esposizione = lerp(esposizione_mattina, esposizione_pomeriggio, t) base_grad_top = grad_top_mattina.lerp(grad_top_pomeriggio, t) base_grad_bot = grad_bot_mattina.lerp(grad_bot_pomeriggio, t) base_grad_intensity = lerp(intensita_grad_mattina, intensita_grad_pomeriggio, t) + base_rotazione_sole = rotazione_sole_mattina.lerp(rotazione_sole_pomeriggio, t) # <--- INTERPOLAZIONE ROTAZIONE else: var t = tempo_giorno - 2.0 base_tint = color_pomeriggio.lerp(color_notte, t) @@ -279,10 +287,11 @@ func _process(delta: float) -> void: base_fog_color = colore_nebbia_pomeriggio.lerp(colore_nebbia_notte, t) base_fog_density = lerp(densita_nebbia_pomeriggio, densita_nebbia_notte, t) base_bloom = lerp(bloom_pomeriggio, bloom_notte, t) - base_esposizione = lerp(esposizione_pomeriggio, esposizione_notte, t) # <--- INTERPOLAZIONE POM/NOTTE + base_esposizione = lerp(esposizione_pomeriggio, esposizione_notte, t) base_grad_top = grad_top_pomeriggio.lerp(grad_top_notte, t) base_grad_bot = grad_bot_pomeriggio.lerp(grad_bot_notte, t) base_grad_intensity = lerp(intensita_grad_pomeriggio, intensita_grad_notte, t) + base_rotazione_sole = rotazione_sole_pomeriggio.lerp(rotazione_sole_notte, t) # <--- INTERPOLAZIONE ROTAZIONE var final_tint = base_tint.lerp(base_tint * colore_mood_pioggia, intensita_pioggia) var final_sky_top = base_sky_top.lerp(base_sky_top * colore_mood_pioggia, intensita_pioggia) @@ -317,6 +326,7 @@ func _process(delta: float) -> void: if sole: sole.light_color = final_tint + sole.rotation_degrees = base_rotazione_sole # <--- APPLICAZIONE DELLA ROTAZIONE var target_energy = lerp(1.0, energia_luce_notte, night_val) # La luce del sole scala normalmente in base al meteo/notte (l'esposizione globale fa il resto del lavoro) sole.light_energy = lerp(target_energy, target_energy * 0.4, intensita_pioggia) diff --git a/Shaders/Grass_Test.gdshader b/Shaders/Grass_Test.gdshader index 609ced8..f2c6da3 100644 --- a/Shaders/Grass_Test.gdshader +++ b/Shaders/Grass_Test.gdshader @@ -1,21 +1,35 @@ shader_type spatial; -// Rimosso 'unshaded' per ricevere le ombre. -// Aggiunto 'ambient_light_disabled' per proteggere la tua palette dai riflessi del cielo. render_mode specular_disabled, cull_disabled, ambient_light_disabled; -// --- GLOBAL UNIFORMS (Vento) --- +// --- GLOBAL UNIFORMS (Vento e Neve) --- global uniform float wind_scale; global uniform float wind_speed; global uniform float wind_strength; global uniform vec3 wind_direction; global uniform sampler2D wind_noise : filter_linear_mipmap; +global uniform float global_snow_amount; // --- PARAMETRI ESTETICI --- +uniform bool billboard_enabled = true; +uniform bool wind_enabled = true; uniform vec4 base_color : source_color = vec4(0.2, 0.6, 0.3, 1.0); uniform sampler2D alpha_texture : source_color, filter_nearest; uniform float leaves_scale = 1.0; uniform float rotation_degrees = 0.0; +uniform vec2 texture_offset = vec2(0.0, 0.0); +uniform float opacity : hint_range(0.0, 1.0) = 1.0; + +// --- PARAMETRI CHIAZZE ERBA (NOISE PATCHES) --- +// Inserisci qui una texture Noise (es. FastNoiseLite in Godot) +uniform sampler2D grass_noise : hint_default_white, filter_linear_mipmap; +uniform float noise_scale = 0.05; // Più è basso, più le chiazze sono grandi +uniform vec4 patch_color : source_color = vec4(0.1, 0.35, 0.2, 1.0); // Colore scuro della chiazza +uniform float patch_threshold : hint_range(0.0, 1.0) = 0.5; // Regola quanto sono estese le chiazze +uniform float patch_smoothness : hint_range(0.01, 1.0) = 0.2; // Morbidezza sfumatura ai bordi +uniform float patch_intensity : hint_range(0.0, 1.0) = 0.85; // Quanto è forte il colore della chiazza + +uniform vec4 snow_color : source_color = vec4(0.85, 0.9, 0.95, 1.0); // --- CONTROLLO GRADIENTE E RANDOM --- uniform float height_min = 0.0; @@ -25,12 +39,11 @@ uniform float highlight_intensity : hint_range(0.0, 1.0) = 0.3; uniform float light_steps : hint_range(1.0, 10.0) = 4.0; uniform float random_mix : hint_range(0.0, 1.0) = 0.3; -// NUOVO: Regola quanto è scura l'ombra proiettata (es. dal tronco) sull'erba uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6; varying vec3 v_final_color; +varying float v_shade_factor; -// Funzione hash per generare casualità basata sulla posizione float hash(vec3 p) { p = fract(p * 0.1031); p += dot(p, p.yzx + 33.33); @@ -38,62 +51,92 @@ float hash(vec3 p) { } void vertex() { - // 1. POSIZIONE DELL'ISTANZA vec3 instance_pos = MODEL_MATRIX[3].xyz; - // --- 2. LOGICA VENTO --- - float time = TIME * wind_speed; - vec2 noise_uv = (instance_pos.xz * wind_scale) + (time * wind_direction.xz * 0.5); - float noise_val = textureLod(wind_noise, noise_uv, 2.0).r; - float sway = sin(time + (noise_val * 10.0)); - float total_angle = radians(rotation_degrees) + (sway * wind_strength); + // --- LOGICA VENTO --- + float total_angle = radians(rotation_degrees); + if (wind_enabled) { + float time = TIME * wind_speed; + vec2 noise_uv = (instance_pos.xz * wind_scale) + (time * wind_direction.xz * 0.5); + float noise_val = textureLod(wind_noise, noise_uv, 2.0).r; + float sway = sin(time + (noise_val * 10.0)); + total_angle += (sway * wind_strength); + } - // --- 3. CALCOLO COLORE (LOGICA MIXATA) --- + // --- CALCOLO COLORE BASE --- float h_factor = clamp((instance_pos.y - height_min) / (height_max - height_min), 0.0, 1.0); float leaf_rand = hash(instance_pos); float combined_factor = mix(h_factor, leaf_rand, random_mix); - combined_factor = ceil(combined_factor * light_steps) / light_steps; + v_shade_factor = combined_factor; + vec3 dark_color = base_color.rgb * (1.0 - shadow_intensity); vec3 light_color = base_color.rgb + (vec3(1.0) - base_color.rgb) * highlight_intensity; + vec3 base_grass_color = mix(dark_color, light_color, combined_factor); + + // ---> LOGICA CHIAZZE ERBA (NOISE) <--- + // Campioniamo il noise usando la posizione XZ del singolo ciuffo d'erba nel mondo. + // Usiamo textureLod con 0.0 perché siamo nel vertex shader. + float n_val = textureLod(grass_noise, instance_pos.xz * noise_scale, 0.0).r; - v_final_color = mix(dark_color, light_color, combined_factor); - - // --- 4. LOGICA BILLBOARD --- - vec3 view_pos_origin = (VIEW_MATRIX * vec4(instance_pos, 1.0)).xyz; - vec2 offset = (UV - 0.5) * leaves_scale; - - float c = cos(total_angle); - float s = sin(total_angle); - vec2 rotated_offset = vec2(offset.x * c - offset.y * s, offset.x * s + offset.y * c); + // Creiamo la maschera per la chiazza: liscia ai bordi, solida al centro. + float patch_mask = smoothstep(patch_threshold - patch_smoothness, patch_threshold + patch_smoothness, n_val); - vec3 final_pos = view_pos_origin + vec3(rotated_offset.x, rotated_offset.y, 0.0); + // Mescoliamo il colore base dell'erba con il colore scuro della chiazza + v_final_color = mix(base_grass_color, patch_color.rgb, patch_mask * patch_intensity); - MODELVIEW_MATRIX = mat4(1.0); - MODELVIEW_MATRIX[3].xyz = final_pos; - VERTEX = vec3(0.0); + // --- LOGICA TRASFORMAZIONE --- + if (billboard_enabled) { + vec3 view_pos_origin = (VIEW_MATRIX * vec4(instance_pos, 1.0)).xyz; + vec2 offset = (UV - 0.5) * leaves_scale; + + float c = cos(total_angle); + float s = sin(total_angle); + vec2 rotated_offset = vec2(offset.x * c - offset.y * s, offset.x * s + offset.y * c); + + vec3 final_pos = view_pos_origin + vec3(rotated_offset.x, rotated_offset.y, 0.0); + + MODELVIEW_MATRIX = mat4(1.0); + MODELVIEW_MATRIX[3].xyz = final_pos; + VERTEX = vec3(0.0); + } else { + float c = cos(total_angle); + float s = sin(total_angle); + + vec2 local_v = (VERTEX.xy) * leaves_scale; + VERTEX.x = local_v.x * c - local_v.y * s; + VERTEX.y = local_v.x * s + local_v.y * c; + } } void fragment() { - vec4 tex = texture(alpha_texture, UV); + vec2 shifted_uv = UV + texture_offset; + vec4 tex = texture(alpha_texture, shifted_uv); - ALBEDO = v_final_color; - ALPHA = tex.r; - ALPHA_SCISSOR_THRESHOLD = 0.5; + // Trucco utile per non renderizzare i bordi trasparenti dei piani (opzionale) + if (tex.r * opacity < 0.5) { + discard; + } - // --- IL TRUCCO MAGICO PER L'EDGE DETECTOR --- - // Impostiamo la roughness esattamente al 2%. - // Il Compute Shader leggerà questo valore e non disegnerà i bordi neri qui sopra! - ROUGHNESS = 0.02; + float top_mask = 1.0 - shifted_uv.y; + float snow_mask = smoothstep(1.0 - global_snow_amount, 1.2 - global_snow_amount, top_mask); + snow_mask *= step(0.01, global_snow_amount); + + vec3 dark_snow = snow_color.rgb * (1.0 - shadow_intensity); + vec3 shaded_snow = mix(dark_snow, snow_color.rgb, v_shade_factor); + + vec3 final_albedo = mix(v_final_color, shaded_snow, snow_mask); + + ALBEDO = final_albedo; + // ALPHA = tex.r * opacity; -> Disabilitato se usi 'discard' sopra. + // ALPHA_SCISSOR_THRESHOLD = 0.5; -> Idem + + ROUGHNESS = 0.02; } -// NUOVO: Calcolo luce custom che simula l'effetto "unshaded" (e ora fixa i quadrati!) void light() { float shadow_factor = mix(1.0 - cast_shadow_strength, 1.0, ATTENUATION); - - // Maschera morbida per nascondere i quadrati float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION); - DIFFUSE_LIGHT += (shadow_factor * LIGHT_COLOR) * cutoff_mask; } \ No newline at end of file diff --git a/Shaders/trunk_shader.gdshader b/Shaders/trunk_shader.gdshader index 87a19c1..6ca83c6 100644 --- a/Shaders/trunk_shader.gdshader +++ b/Shaders/trunk_shader.gdshader @@ -25,9 +25,13 @@ uniform float light_steps : hint_range(1.0, 10.0, 1.0) = 3.0; uniform float step_softness : hint_range(0.01, 1.0) = 0.1; uniform vec4 shadow_color : source_color = vec4(0.4, 0.4, 0.6, 1.0); uniform float shadow_offset : hint_range(-1.0, 1.0) = 0.0; - uniform float cast_shadow_strength : hint_range(0.0, 1.0) = 0.6; +// ---> NUOVI PARAMETRI TOON SPECULAR <--- +uniform float specular_size : hint_range(10.0, 200.0) = 60.0; // Più è alto, più il punto luce è piccolo +uniform float specular_softness : hint_range(0.0, 0.1) = 0.01; // Morbidezza del bordo del punto luce +uniform float specular_intensity_multiplier : hint_range(0.0, 2.0) = 0.5; // Forza del riflesso + group_uniforms Emission_Settings; uniform vec4 emission_color : source_color = vec4(0.0, 0.0, 0.0, 1.0); uniform float emission_energy : hint_range(0.0, 16.0) = 0.0; @@ -79,4 +83,22 @@ void light() { float cutoff_mask = smoothstep(0.0, 0.05, ATTENUATION); DIFFUSE_LIGHT += (final_toon_light * LIGHT_COLOR) * cutoff_mask; + + // ---> AGGIUNTA TOON SPECULAR (Metodo 1) <--- + // Calcoliamo la direzione a metà strada tra la vista e la luce + vec3 half_direction = normalize(VIEW + LIGHT); + float n_dot_h = max(0.0, dot(NORMAL, half_direction)); + + // Applichiamo la potenza (shininess) per definire la dimensione del punto luce + float spec_power = pow(n_dot_h, specular_size); + + // Creiamo un gradino netto (Toon) invece della sfumatura classica PBR + float toon_specular = smoothstep(0.5 - specular_softness, 0.5 + specular_softness, spec_power); + + // Moltiplichiamo il riflesso per il colore della luce (Sole o Luna) + vec3 specular_highlight = LIGHT_COLOR * toon_specular * specular_intensity_multiplier; + + // Sommiamo il punto luce finale alla diffusione, mascherandolo con "cutoff_mask" + // per evitare che il riflesso brilli anche nelle zone in ombra profonda. + DIFFUSE_LIGHT += (specular_highlight * cutoff_mask); } \ No newline at end of file