add fake shadow

This commit is contained in:
Matteo Sonaglioni
2026-03-16 00:47:06 +01:00
parent ccdfba2878
commit 461a08aa6d
31 changed files with 725 additions and 94 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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]

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

142
Materials/grass.gdshader Normal file
View File

@@ -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;
}

View File

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

View File

@@ -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

View File

@@ -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

View File

@@ -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]

View File

@@ -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]

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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]

View File

@@ -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")

View File

@@ -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

View File

@@ -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")

View File

@@ -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)

View File

@@ -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;
}

View File

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

View File

@@ -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")

View File

@@ -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

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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);
}