diff --git a/core/daynight/environment_management.tscn b/core/daynight/environment_management.tscn index fce3e3a..2040821 100644 --- a/core/daynight/environment_management.tscn +++ b/core/daynight/environment_management.tscn @@ -56,16 +56,15 @@ rain_exposure_morning = 0.3 rain_exposure_afternoon = 0.4 rain_exposure_night = 1.8 storm_exposure_night = 1.8 -sky_top_morning = Color(0.11764706, 0.35686275, 0.5411765, 1) -sky_top_afternoon = Color(0.7019608, 0.4509804, 0.2, 1) -sky_top_night = Color(0.050980393, 0.050980393, 0.14901961, 1) -sky_horizon_morning = Color(0.4627451, 0.6745098, 0.8627451, 1) -sky_horizon_afternoon = Color(0.93333334, 0.6, 0.8039216, 1) -sky_horizon_night = Color(0.14901961, 0.101960786, 0.2509804, 1) +sky_top_morning = Color(0.3176695, 0.43165123, 0.8895605, 1) +sky_top_afternoon = Color(0.42314696, 0.32907307, 0.74664044, 1) +sky_top_night = Color(0.20675227, 0.20655477, 0.4437065, 1) +sky_horizon_afternoon = Color(0.96335155, 0.3563425, 0.1952039, 1) +sky_horizon_night = Color(0.13534775, 0.09013713, 0.2303626, 1) grad_top_morning = Color(0.7921569, 0.8784314, 0.95686275, 1) grad_top_afternoon = Color(0.8627451, 0.24313726, 0.5411765, 1) grad_top_night = Color(0.16470589, 0.16470589, 0.26666668, 1) -grad_bot_morning = Color(0.05882353, 0.078431375, 0.21568628, 1) +grad_bot_morning = Color(0.64469576, 0.7045768, 0.9350398, 1) grad_bot_afternoon = Color(0.2509804, 0.019607844, 0.043137256, 1) grad_intensity_morning = 0.05 grad_intensity_afternoon = 0.1 diff --git a/tgcc/chunk/prop/cloud/cloud1.fbx b/tgcc/chunk/prop/cloud/cloud1.fbx new file mode 100644 index 0000000..e72f6a9 Binary files /dev/null and b/tgcc/chunk/prop/cloud/cloud1.fbx differ diff --git a/tgcc/chunk/prop/cloud/cloud1.fbx.import b/tgcc/chunk/prop/cloud/cloud1.fbx.import new file mode 100644 index 0000000..9016a10 --- /dev/null +++ b/tgcc/chunk/prop/cloud/cloud1.fbx.import @@ -0,0 +1,44 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://bio6eds43i7rt" +path="res://.godot/imported/cloud1.fbx-17a222b854adef5625cf45abfe9e12f7.scn" + +[deps] + +source_file="res://tgcc/chunk/prop/cloud/cloud1.fbx" +dest_files=["res://.godot/imported/cloud1.fbx-17a222b854adef5625cf45abfe9e12f7.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=true +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +fbx/importer=0 +fbx/allow_geometry_helper_nodes=false +fbx/embedded_image_handling=1 +fbx/naming_version=2 diff --git a/tgcc/chunk/prop/cloud/cloud3d.gdshader b/tgcc/chunk/prop/cloud/cloud3d.gdshader new file mode 100644 index 0000000..d18dd4a --- /dev/null +++ b/tgcc/chunk/prop/cloud/cloud3d.gdshader @@ -0,0 +1,39 @@ +shader_type spatial; +// Corretto: rimosso ambient_sink che mandava in errore il compilatore +render_mode diffuse_toon, specular_disabled; + +uniform vec3 cloud_color : source_color = vec3(0.95, 0.95, 0.98); +uniform vec3 shadow_color : source_color = vec3(0.4, 0.45, 0.65); +uniform vec3 rim_color : source_color = vec3(1.0, 0.6, 0.4); + +group_uniforms Cel_Shading_Control; +uniform float shadow_threshold : hint_range(-1.0, 1.0) = -0.1; +uniform float shadow_softness : hint_range(0.001, 1.0) = 0.05; + +group_uniforms Rim_Light_Control; +uniform float rim_size : hint_range(0.0, 1.0) = 0.35; +uniform float rim_softness : hint_range(0.001, 1.0) = 0.1; + +void fragment() { + ALBEDO = cloud_color; +} + +void light() { + // 1. Calcolo del Cel Shading (Luce vs Ombra) + float NdotL = dot(NORMAL, LIGHT); + float shadow_mask = smoothstep(shadow_threshold, shadow_threshold + shadow_softness, NdotL); + + vec3 base_lighting = mix(shadow_color, cloud_color, shadow_mask); + + // 2. Calcolo del Rim Light (Il sole che illumina i bordi da dietro) + float VdotL = dot(VIEW, LIGHT); + float rim_dot = 1.0 - dot(NORMAL, VIEW); + + float rim_mask = smoothstep(1.0 - rim_size, (1.0 - rim_size) + rim_softness, rim_dot); + rim_mask *= smoothstep(-0.3, 0.3, -VdotL); + + // 3. Composizione Finale + vec3 final_color = mix(base_lighting, rim_color, rim_mask * shadow_mask) * LIGHT_COLOR; + + DIFFUSE_LIGHT += final_color * ATTENUATION; +} \ No newline at end of file diff --git a/tgcc/chunk/prop/cloud/cloud3d.gdshader.uid b/tgcc/chunk/prop/cloud/cloud3d.gdshader.uid new file mode 100644 index 0000000..b8a9b25 --- /dev/null +++ b/tgcc/chunk/prop/cloud/cloud3d.gdshader.uid @@ -0,0 +1 @@ +uid://cpgtj8mhjklb8 diff --git a/tgcc/chunk/prop/cloud/cloud_1.tscn b/tgcc/chunk/prop/cloud/cloud_1.tscn new file mode 100644 index 0000000..208335b --- /dev/null +++ b/tgcc/chunk/prop/cloud/cloud_1.tscn @@ -0,0 +1,20 @@ +[gd_scene format=3 uid="uid://hvr66x101a0v"] + +[ext_resource type="PackedScene" uid="uid://bio6eds43i7rt" path="res://tgcc/chunk/prop/cloud/cloud1.fbx" id="1_nnqat"] +[ext_resource type="Shader" uid="uid://cpgtj8mhjklb8" path="res://tgcc/chunk/prop/cloud/cloud3d.gdshader" id="2_j3pha"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_uam3e"] +render_priority = 0 +shader = ExtResource("2_j3pha") +shader_parameter/cloud_color = Color(0.95, 0.95, 0.98, 1) +shader_parameter/shadow_color = Color(0.4, 0.45, 0.65, 1) +shader_parameter/rim_color = Color(1, 0.6, 0.4, 1) +shader_parameter/shadow_threshold = -0.1 +shader_parameter/shadow_softness = 0.05 +shader_parameter/rim_size = 0.4810000228475 +shader_parameter/rim_softness = 0.07200000342 + +[node name="cloud1" unique_id=1538081576 instance=ExtResource("1_nnqat")] + +[node name="Cube" parent="." index="0" unique_id=918471000] +surface_material_override/0 = SubResource("ShaderMaterial_uam3e") diff --git a/tgcc/main menu/main_menu_test.tscn b/tgcc/main menu/main_menu_test.tscn index 61136d6..319d06a 100644 --- a/tgcc/main menu/main_menu_test.tscn +++ b/tgcc/main menu/main_menu_test.tscn @@ -2,8 +2,8 @@ [ext_resource type="PackedScene" uid="uid://cmuvmmp7xam4o" path="res://core/daynight/environment_management.tscn" id="1_2o8pc"] [ext_resource type="PackedScene" uid="uid://bmwmdsdyfxfc1" path="res://tgcc/map/map_1/map_menu.tscn" id="2_wbrya"] +[ext_resource type="Shader" uid="uid://bneue3fq71vp8" path="res://tgcc/main menu/sky_test.gdshader" id="3_5p27e"] [ext_resource type="Script" uid="uid://cx2tlvxhvatj5" path="res://docs/museums/daynight/control.gd" id="3_wbrya"] -[ext_resource type="Shader" uid="uid://bneoex8xpmcm8" path="res://core/daynight/sky.gdshader" id="4_h3o38"] [ext_resource type="Texture2D" uid="uid://dest0qa7vaid0" path="res://core/daynight/stars_albedo.png" id="5_25h5j"] [ext_resource type="Script" uid="uid://brcimd12tx3dm" path="res://core/daynight/edge_detection_compositor.gd" id="6_4flsv"] [ext_resource type="Script" uid="uid://dboerd4a6dwj7" path="res://core/biome_generator/rails.gd" id="7_5p27e"] @@ -11,31 +11,15 @@ [ext_resource type="Resource" uid="uid://bjnytgwt8tmf4" path="res://core/biome_generator/wagon_pool.tres" id="9_wcae3"] [ext_resource type="PackedScene" uid="uid://0kgjaqijaqku" path="res://docs/museums/biome_generator/rails.tscn" id="10_00nq7"] [ext_resource type="PackedScene" uid="uid://dn1btv0e0ses7" path="res://core/fireworks.tscn" id="11_aylkj"] - -[sub_resource type="FastNoiseLite" id="FastNoiseLite_1nm1b"] -fractal_lacunarity = 1.915 -fractal_gain = 0.53 -fractal_weighted_strength = 0.35 - -[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_abyor"] -noise = SubResource("FastNoiseLite_1nm1b") -seamless = true +[ext_resource type="PackedScene" uid="uid://hvr66x101a0v" path="res://tgcc/chunk/prop/cloud/cloud_1.tscn" id="12_ljvyb"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_nbjr8"] -shader = ExtResource("4_h3o38") +shader = ExtResource("3_5p27e") shader_parameter/sky_top_color = Color(0.36438444, 0.6417803, 0.8712311, 1) shader_parameter/sky_horizon_color = Color(0.75821966, 0.8417803, 0.92534095, 1) shader_parameter/night_intensity = 0.0 -shader_parameter/cloud_noise = SubResource("NoiseTexture2D_abyor") -shader_parameter/sun_color = Color(1, 0.88767046, 0.775341, 1) -shader_parameter/cloud_center_color = Color(1, 1, 1, 1) -shader_parameter/cloud_edge_color = Color(0.8, 0.85, 0.9, 1) -shader_parameter/cloud_direction = Vector2(0.5, 0.2) -shader_parameter/cloud_speed = 0.1 -shader_parameter/cloud_scale = 0.5 -shader_parameter/cloud_threshold = 0.5 -shader_parameter/cloud_edge_thickness = 0.406000019285 -shader_parameter/cloud_edge_softness = 0.0 +shader_parameter/horizon_height = 0.066000003135 +shader_parameter/horizon_blur = 0.4 shader_parameter/star_density = 1500.0 shader_parameter/star_rarity = 2500.0 shader_parameter/star_scale_variation = 0.5 @@ -368,6 +352,39 @@ fireworks_scene = ExtResource("11_aylkj") [node name="MainMap" parent="." unique_id=1895741703 instance=ExtResource("2_wbrya")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 63.837585, 0, -4.743943e-06) +[node name="cloud1" parent="." unique_id=1538081576 instance=ExtResource("12_ljvyb")] +transform = Transform3D(-3.0750962e-07, 0, 7.035, 0, 7.035, 0, -7.035, 0, -3.0750962e-07, 203.62189, 53.997868, 215.32469) + +[node name="cloud2" parent="." unique_id=953705227 instance=ExtResource("12_ljvyb")] +transform = Transform3D(1.6706831e-07, 1.1604034e-06, 32.595, 32.052925, -3.165528, 0, 3.8220775, 26.546934, -1.4247728e-06, 391.87766, 43.10347, 332.97614) + +[node name="cloud6" parent="." unique_id=141140018 instance=ExtResource("12_ljvyb")] +transform = Transform3D(1.6706831e-07, 1.1604034e-06, 32.595, 32.052925, -3.165528, 0, 3.8220775, 26.546934, -1.4247728e-06, 391.87766, -65.08275, 173.45769) + +[node name="cloud7" parent="." unique_id=329542413 instance=ExtResource("12_ljvyb")] +transform = Transform3D(1.6706831e-07, 1.1604034e-06, 32.595, 32.052925, -3.165528, 0, 3.8220775, 26.546934, -1.4247728e-06, 391.87766, 178.66306, 202.5226) + +[node name="cloud8" parent="." unique_id=1444868324 instance=ExtResource("12_ljvyb")] +transform = Transform3D(-3.0750962e-07, 0, 7.035, 0, 7.035, 0, -7.035, 0, -3.0750962e-07, 46.042877, 53.997868, 215.32469) + +[node name="cloud9" parent="." unique_id=468105212 instance=ExtResource("12_ljvyb")] +transform = Transform3D(1.6706831e-07, 1.1604034e-06, 32.595, 32.052925, -3.165528, 0, 3.8220775, 26.546934, -1.4247728e-06, -338.22726, 43.10347, 332.97617) + +[node name="cloud10" parent="." unique_id=1831290273 instance=ExtResource("12_ljvyb")] +transform = Transform3D(1.6706831e-07, 1.1604034e-06, 32.595, 32.052925, -3.165528, 0, 3.8220775, 26.546934, -1.4247728e-06, -338.22726, -65.08275, 173.45772) + +[node name="cloud11" parent="." unique_id=358903943 instance=ExtResource("12_ljvyb")] +transform = Transform3D(1.6706831e-07, 1.1604034e-06, 32.595, 32.052925, -3.165528, 0, 3.8220775, 26.546934, -1.4247728e-06, -338.22726, 178.66306, 202.52263) + +[node name="cloud3" parent="." unique_id=624295053 instance=ExtResource("12_ljvyb")] +transform = Transform3D(-4.9415723e-07, 0, 11.305, 0, 11.305, 0, -11.305, 0, -4.9415723e-07, -214.15395, 53.997868, 215.32469) + +[node name="cloud4" parent="." unique_id=1608207264 instance=ExtResource("12_ljvyb")] +transform = Transform3D(6.5393685e-08, 5.484083e-07, 12.635, 12.54612, -1.4960332, 0, 1.4960332, 12.54612, -5.522934e-07, -244.47647, 64.2054, 242.8301) + +[node name="cloud5" parent="." unique_id=9405030 instance=ExtResource("12_ljvyb")] +transform = Transform3D(-7.8421215e-07, -4.957583e-07, 21.225, -11.341628, 17.940683, 0, -17.940683, -11.341628, -9.2777424e-07, -309.56183, 75.29676, 291.66757) + [connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"] [connection signal="toggled" from="Control/Rain" to="Control" method="_on_rain_toggled"] [connection signal="toggled" from="Control/Wind" to="Control" method="_on_wind_toggled"] diff --git a/tgcc/main menu/sky_test.gdshader b/tgcc/main menu/sky_test.gdshader new file mode 100644 index 0000000..7c1e5b9 --- /dev/null +++ b/tgcc/main menu/sky_test.gdshader @@ -0,0 +1,125 @@ +shader_type sky; + +uniform vec3 sky_top_color : source_color; +uniform vec3 sky_horizon_color : source_color; +uniform float night_intensity : hint_range(0.0, 1.0) = 0.0; + +group_uniforms Sky_Gradient_Control; +// Controlla l'altezza massima a cui arriva il colore del tramonto (0.0 = solo orizzonte, 1.0 = tutto il cielo) +uniform float horizon_height : hint_range(0.0, 1.0) = 0.1; +// Controlla la morbidezza della sfumatura tra tramonto e cielo scuro +uniform float horizon_blur : hint_range(0.0, 1.0) = 0.4; + +group_uniforms Fixed_Stars; +uniform float star_density : hint_range(0.0, 2000.0) = 1500.0; +uniform float star_rarity : hint_range(100.0, 5000.0) = 2500.0; +uniform float star_scale_variation : hint_range(0.0, 1.0) = 0.5; + +group_uniforms Shooting_Stars; +uniform sampler2D shooting_star_texture : hint_default_black, filter_linear_mipmap; +uniform vec4 shooting_star_color : source_color = vec4(1.0, 0.9, 0.7, 1.0); +uniform float shooting_star_density : hint_range(0.0, 1.0) = 0.3; +uniform float shooting_star_speed : hint_range(0.1, 3.0) = 1.0; +uniform float shooting_star_scale : hint_range(0.1, 20.0) = 5.0; +uniform float shooting_star_lifetime : hint_range(0.1, 1.0) = 0.5; +uniform float shooting_star_travel_dist : hint_range(1.0, 30.0) = 15.0; + + +// Utility di hashing per la generazione procedurale delle stelle +float hash(vec3 p) { + p = fract(p * 0.1031); + p += dot(p, p.yzx + 33.33); + return fract((p.x + p.y) * p.z); +} + +vec2 hash2(vec3 p) { + float h1 = hash(p); + float h2 = hash(p + vec3(57.1, 13.7, 9.3)); + return vec2(h1, h2); +} + +vec3 hash3(float seed) { + vec3 p = fract(vec3(seed) * vec3(0.1031, 0.1030, 0.0973)); + p += dot(p, p.yzx + 33.33); + return fract((p.xxy + p.yzz) * p.zyx); +} + +void sky() { + float sky_v = clamp(EYEDIR.y, 0.0, 1.0); + + // Applichiamo la compressione non lineare al gradiente dell'orizzonte + float gradient_high = clamp(horizon_height + horizon_blur, 0.001, 1.0); + float adjusted_sky_v = smoothstep(horizon_height, gradient_high, sky_v); + + // Mix dei colori del cielo basato sul nuovo gradiente compresso + vec3 final_sky = mix(sky_horizon_color, sky_top_color, adjusted_sky_v); + + // --- STELLE FISSE E CADENTI (Comparsa graduale con la notte) --- + float star_fade = smoothstep(0.3, 0.8, night_intensity); + + if (star_fade > 0.0) { + + // Fixed Stars + vec3 star_pos = EYEDIR * star_density; + vec2 rnd = hash2(star_pos); + float star_shape = pow(rnd.x, star_rarity); + float scale_factor = mix(1.0, (rnd.y * 0.8 + 0.2), star_scale_variation); + star_shape *= scale_factor; + star_shape *= pow(sky_v, 2.0); // Le stelle si concentrano in alto lontano dall'orizzonte + + float twinkle_speed = TIME * (1.0 + rnd.y * 5.0); + float twinkle_phase = rnd.x * 100.0; + float twinkle = sin(twinkle_speed + twinkle_phase) * 0.25 + 0.75; + star_shape *= twinkle; + + final_sky += star_shape * star_fade; + + // Shooting Stars + if (shooting_star_density > 0.001) { + float time_scaled = TIME * shooting_star_speed; + float time_seed = floor(time_scaled); + float time_progress = fract(time_scaled); + vec3 shoot_rnd = hash3(time_seed); + + if (shoot_rnd.z < shooting_star_density * star_fade) { + vec3 center = normalize(vec3(shoot_rnd.x * 2.0 - 1.0, shoot_rnd.y * 0.6 + 0.4, shoot_rnd.z * 2.0 - 1.0)); + vec3 up = vec3(0.0, 1.0, 0.0); + vec3 tangent = normalize(cross(up, center)); + vec3 bitangent = cross(center, tangent); + + float random_angle = hash(vec3(time_seed)) * 6.28318; + float s = sin(random_angle); + float c = cos(random_angle); + + vec3 flight_axis = tangent * c - bitangent * s; + vec3 side_axis = tangent * s + bitangent * c; + + flight_axis.y *= 0.15; + flight_axis = normalize(flight_axis); + side_axis = normalize(cross(flight_axis, center)); + + float proj_x = dot(EYEDIR, side_axis); + float proj_y = dot(EYEDIR, flight_axis); + float proj_z = dot(EYEDIR, center); + + if (proj_z > 0.0) { + vec2 uv = vec2(proj_x, -proj_y) * shooting_star_scale; + uv.y += (time_progress - (shooting_star_lifetime * 0.5)) * shooting_star_travel_dist; + uv.x += 0.5; + + float bounds = step(0.0, uv.x) * step(uv.x, 1.0) * step(0.0, uv.y) * step(uv.y, 1.0); + + if (bounds > 0.5) { + float star_tex = texture(shooting_star_texture, uv).r; + float f_in = smoothstep(0.0, shooting_star_lifetime * 0.2, time_progress); + float f_out = 1.0 - smoothstep(shooting_star_lifetime * 0.7, shooting_star_lifetime, time_progress); + float fade = f_in * f_out; + final_sky += star_tex * shooting_star_color.rgb * star_fade * fade; + } + } + } + } + } + + COLOR = final_sky; +} \ No newline at end of file diff --git a/tgcc/main menu/sky_test.gdshader.uid b/tgcc/main menu/sky_test.gdshader.uid new file mode 100644 index 0000000..6fedaea --- /dev/null +++ b/tgcc/main menu/sky_test.gdshader.uid @@ -0,0 +1 @@ +uid://bneue3fq71vp8