From 211455f5da98e1c137e4fba9e768d98acb7a4f85 Mon Sep 17 00:00:00 2001 From: Overside srl Date: Fri, 24 Apr 2026 15:36:10 +0200 Subject: [PATCH] fix materials for wind and add new snow system --- core/daynight/snow_cap.gd | 114 ++++++++++++++++++ core/daynight/snow_cap.gd.uid | 1 + core/daynight/snow_cap.gdshader | 114 ++++++++++++++++++ core/daynight/snow_cap.gdshader.uid | 1 + core/daynight/weather_controller.gd | 6 + core/daynight/weather_overlay.gdshader | 91 ++++++++++++-- core/daynight/weather_overlay.tres | 14 --- core/daynight/weather_plain_shader.gdshader | 9 +- core/environment_config.gd | 10 +- project.godot | 24 ++++ .../scene/chunk_country_cross_3_02.tscn | 2 +- .../scene/chunk_country_end_01.tscn | 4 +- .../scene/chunk_country_straight_02.tscn | 6 +- tgcc/chunk/prop/flower/bush.tres | 4 +- tgcc/chunk/prop/flower/flower.tres | 2 +- tgcc/chunk/prop/grass/grass_chunk.tres | 2 +- tgcc/chunk/prop/grass/grass_chunk_weeds.tres | 2 +- tgcc/chunk/prop/grass/grass_chunk_weeds2.tres | 3 +- 18 files changed, 364 insertions(+), 45 deletions(-) create mode 100644 core/daynight/snow_cap.gd create mode 100644 core/daynight/snow_cap.gd.uid create mode 100644 core/daynight/snow_cap.gdshader create mode 100644 core/daynight/snow_cap.gdshader.uid diff --git a/core/daynight/snow_cap.gd b/core/daynight/snow_cap.gd new file mode 100644 index 0000000..0545abc --- /dev/null +++ b/core/daynight/snow_cap.gd @@ -0,0 +1,114 @@ +## Procedural snow cap geometry for flat roofs and vehicles. +extends Node3D + +enum PlacementMode { + AUTO_TARGET_AABB, + MANUAL_SURFACE, +} + +const SNOW_CAP_SHADER: Shader = preload("res://core/daynight/snow_cap.gdshader") + +@export var placement_mode: PlacementMode = PlacementMode.AUTO_TARGET_AABB +@export var target_path: NodePath +@export var size_inset: Vector2 = Vector2(0.25, 1.0) +@export var position_offset: Vector3 = Vector3(0.0, -0.08, 0.0) +@export var max_snow_height: float = 0.2 +@export_range(1, 24) var subdivide_width: int = 6 +@export_range(1, 24) var subdivide_depth: int = 18 +@export var manual_surface_center: Vector3 = Vector3.ZERO +@export var manual_surface_size: Vector2 = Vector2(2.0, 6.0) + +var _mesh_instance: MeshInstance3D + + +func _ready() -> void: + add_to_group("weather_overlay_ignore") + _ensure_mesh_instance() + _rebuild() + + +func rebuild() -> void: + _rebuild() + + +func _ensure_mesh_instance() -> void: + _mesh_instance = get_node_or_null("SnowCapMesh") as MeshInstance3D + if _mesh_instance != null: + return + + _mesh_instance = MeshInstance3D.new() + _mesh_instance.name = "SnowCapMesh" + _mesh_instance.add_to_group("weather_overlay_ignore") + add_child(_mesh_instance) + + +func _rebuild() -> void: + var cap_width: float = 0.0 + var cap_depth: float = 0.0 + var cap_surface_center := Vector3.ZERO + + if placement_mode == PlacementMode.MANUAL_SURFACE: + cap_width = manual_surface_size.x + cap_depth = manual_surface_size.y + cap_surface_center = manual_surface_center + else: + var target_mesh: MeshInstance3D = get_node_or_null(target_path) as MeshInstance3D + if target_mesh == null: + if _mesh_instance: + _mesh_instance.visible = false + return + + var target_aabb: AABB = _get_target_aabb(target_mesh) + cap_width = max(target_aabb.size.x - size_inset.x, 0.1) + cap_depth = max(target_aabb.size.z - size_inset.y, 0.1) + cap_surface_center = Vector3( + target_aabb.position.x + target_aabb.size.x * 0.5, + target_aabb.position.y + target_aabb.size.y, + target_aabb.position.z + target_aabb.size.z * 0.5 + ) + + var cap_center := cap_surface_center + Vector3(0.0, max_snow_height * 0.5, 0.0) + + var box_mesh := BoxMesh.new() + box_mesh.size = Vector3(cap_width, max_snow_height, cap_depth) + box_mesh.subdivide_width = subdivide_width + box_mesh.subdivide_depth = subdivide_depth + _mesh_instance.mesh = box_mesh + _mesh_instance.position = cap_center + position_offset + _mesh_instance.material_override = _build_material(cap_width, cap_depth) + _mesh_instance.visible = true + + +func _build_material(cap_width: float, cap_depth: float) -> ShaderMaterial: + var material := ShaderMaterial.new() + material.shader = SNOW_CAP_SHADER + material.set_shader_parameter("max_height", max_snow_height) + material.set_shader_parameter("half_width", cap_width * 0.5) + material.set_shader_parameter("half_depth", cap_depth * 0.5) + return material + + +func _get_target_aabb(target_mesh: MeshInstance3D) -> AABB: + var points: Array[Vector3] = [] + for point in _get_aabb_points(target_mesh.get_aabb()): + points.append(target_mesh.transform * point) + + var merged := AABB(points[0], Vector3.ZERO) + for point in points: + merged = merged.expand(point) + return merged + + +func _get_aabb_points(aabb: AABB) -> Array[Vector3]: + var p: Vector3 = aabb.position + var s: Vector3 = aabb.size + return [ + p, + p + Vector3(s.x, 0.0, 0.0), + p + Vector3(0.0, s.y, 0.0), + p + Vector3(0.0, 0.0, s.z), + p + Vector3(s.x, s.y, 0.0), + p + Vector3(s.x, 0.0, s.z), + p + Vector3(0.0, s.y, s.z), + p + s, + ] diff --git a/core/daynight/snow_cap.gd.uid b/core/daynight/snow_cap.gd.uid new file mode 100644 index 0000000..214944b --- /dev/null +++ b/core/daynight/snow_cap.gd.uid @@ -0,0 +1 @@ +uid://bxc6ketfgedxw diff --git a/core/daynight/snow_cap.gdshader b/core/daynight/snow_cap.gdshader new file mode 100644 index 0000000..5249728 --- /dev/null +++ b/core/daynight/snow_cap.gdshader @@ -0,0 +1,114 @@ +shader_type spatial; +render_mode blend_mix, cull_back, depth_draw_opaque; + +global uniform float global_snow_start_time = -1.0; +global uniform float global_snow_accumulation_speed = 0.1; +global uniform float global_snow_melt_time = -1.0; +global uniform float global_snow_melt_speed = 0.1; +global uniform vec4 global_snow_color = vec4(0.92, 0.96, 1.0, 1.0); + +uniform float max_height : hint_range(0.02, 1.0) = 0.2; +uniform float half_width : hint_range(0.01, 20.0) = 1.0; +uniform float half_depth : hint_range(0.01, 20.0) = 1.0; +uniform float noise_scale : hint_range(0.05, 2.0) = 0.35; +uniform float noise_strength : hint_range(0.0, 0.4) = 0.18; +uniform float edge_rounding : hint_range(0.0, 0.3) = 0.12; +uniform float side_shade : hint_range(0.2, 1.0) = 0.82; +uniform float sparkle_strength : hint_range(0.0, 0.1) = 0.03; + +varying float v_snow_amount; +varying float v_noise; + +float hash(vec2 p) { + return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123); +} + +float value_noise(vec2 p) { + vec2 i = floor(p); + vec2 f = fract(p); + vec2 u = f * f * (3.0 - 2.0 * f); + + float a = hash(i); + float b = hash(i + vec2(1.0, 0.0)); + float c = hash(i + vec2(0.0, 1.0)); + float d = hash(i + vec2(1.0, 1.0)); + + return mix(mix(a, b, u.x), mix(c, d, u.x), u.y); +} + +float fbm(vec2 p) { + float value = 0.0; + float amplitude = 0.5; + float frequency = 1.0; + + for (int i = 0; i < 4; i++) { + value += value_noise(p * frequency) * amplitude; + frequency *= 2.0; + amplitude *= 0.5; + } + + return clamp(value, 0.0, 1.0); +} + +float get_snow_amount() { + float snow_amount = 0.0; + if (global_snow_start_time >= 0.0) { + snow_amount = clamp( + (TIME - global_snow_start_time) * global_snow_accumulation_speed, + 0.0, + 1.0 + ); + } + if (global_snow_melt_time >= 0.0) { + float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0); + snow_amount *= (1.0 - melt); + } + return snow_amount; +} + +void vertex() { + vec3 base_vertex = VERTEX; + vec3 world_pos = (MODEL_MATRIX * vec4(base_vertex, 1.0)).xyz; + float snow_amount = get_snow_amount(); + float noise_val = fbm(world_pos.xz * noise_scale); + float thickness = max_height * snow_amount * mix( + 1.0 - noise_strength, + 1.0 + noise_strength, + noise_val + ); + float footprint_growth = smoothstep(0.0, 0.35, snow_amount); + + float from_bottom = clamp((base_vertex.y + max_height * 0.5) / max_height, 0.0, 1.0); + VERTEX.y = -max_height * 0.5 + thickness * from_bottom; + VERTEX.x *= mix(0.92, 1.0, footprint_growth); + VERTEX.z *= mix(0.94, 1.0, footprint_growth); + + float edge_x = abs(base_vertex.x) / max(half_width, 0.001); + float edge_z = abs(base_vertex.z) / max(half_depth, 0.001); + float edge_mask = smoothstep(0.55, 1.0, max(edge_x, edge_z)); + float top_mask = smoothstep(0.6, 1.0, from_bottom) * snow_amount; + float round_factor = edge_rounding * edge_mask * top_mask; + VERTEX.x *= 1.0 - round_factor; + VERTEX.z *= 1.0 - round_factor; + + v_snow_amount = snow_amount; + v_noise = noise_val; +} + +void fragment() { + if (v_snow_amount <= 0.001) { + ALPHA = 0.0; + ALBEDO = global_snow_color.rgb; + ROUGHNESS = 1.0; + SPECULAR = 0.0; + } else { + float facing_up = clamp(NORMAL.y, 0.0, 1.0); + float shade = mix(-sparkle_strength, sparkle_strength, v_noise); + vec3 snow_albedo = clamp(global_snow_color.rgb + vec3(shade), 0.0, 1.0); + + ALBEDO = mix(snow_albedo * side_shade, snow_albedo, facing_up); + ROUGHNESS = mix(0.95, 0.72, facing_up); + SPECULAR = 0.18; + ALPHA = smoothstep(0.0, 0.28, v_snow_amount); + } +} diff --git a/core/daynight/snow_cap.gdshader.uid b/core/daynight/snow_cap.gdshader.uid new file mode 100644 index 0000000..7473c67 --- /dev/null +++ b/core/daynight/snow_cap.gdshader.uid @@ -0,0 +1 @@ +uid://c7js7ytvewmab diff --git a/core/daynight/weather_controller.gd b/core/daynight/weather_controller.gd index c174633..870cb8b 100644 --- a/core/daynight/weather_controller.gd +++ b/core/daynight/weather_controller.gd @@ -699,6 +699,12 @@ func init_snow(value: float = 0.0): RenderingServer.global_shader_parameter_set("global_snow_color", environment_config.snow_color) RenderingServer.global_shader_parameter_set("global_snow_accumulation_speed", environment_config.snow_accumulation_speed) RenderingServer.global_shader_parameter_set("global_snow_melt_speed", environment_config.snow_melt_speed) + RenderingServer.global_shader_parameter_set("global_snow_max_accumulation", environment_config.snow_max_accumulation) + RenderingServer.global_shader_parameter_set("global_snow_cap_height", environment_config.snow_cap_height) + RenderingServer.global_shader_parameter_set("global_snow_cap_flatness_start", environment_config.snow_cap_flatness_start) + RenderingServer.global_shader_parameter_set("global_snow_cap_flatness_end", environment_config.snow_cap_flatness_end) + RenderingServer.global_shader_parameter_set("global_snow_cap_noise_scale", environment_config.snow_cap_noise_scale) + RenderingServer.global_shader_parameter_set("global_snow_cap_noise_strength", environment_config.snow_cap_noise_strength) RenderingServer.global_shader_parameter_set("global_snow_start_time", -1.0) RenderingServer.global_shader_parameter_set("global_snow_melt_time", -1.0) diff --git a/core/daynight/weather_overlay.gdshader b/core/daynight/weather_overlay.gdshader index d0b2efd..c432cfa 100644 --- a/core/daynight/weather_overlay.gdshader +++ b/core/daynight/weather_overlay.gdshader @@ -8,6 +8,12 @@ global uniform float global_snow_melt_time = -1.0; global uniform float global_snow_melt_speed = 0.1; global uniform float global_snow_threshold = 0.5; global uniform vec4 global_snow_color = vec4(0.92, 0.96, 1.0, 1.0); +global uniform float global_snow_max_accumulation = 0.72; +global uniform float global_snow_cap_height = 0.06; +global uniform float global_snow_cap_flatness_start = 0.72; +global uniform float global_snow_cap_flatness_end = 0.96; +global uniform float global_snow_cap_noise_scale = 0.22; +global uniform float global_snow_cap_noise_strength = 0.18; uniform float snow_noise_scale : hint_range(0.01, 1.0) = 0.15; uniform float snow_edge_softness : hint_range(0.01, 0.5) = 0.2; uniform float snow_roughness_variation : hint_range(0.0, 0.3) = 0.15; @@ -29,6 +35,52 @@ uniform float puddle_threshold : hint_range(0.0, 0.8) = 0.45; uniform sampler2D noise_texture : filter_linear_mipmap, repeat_enable; +varying float v_snow_amount; +varying float v_snow_cap_mask; + +float hash(vec2 p) { + return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123); +} + +float value_noise(vec2 p) { + vec2 i = floor(p); + vec2 f = fract(p); + vec2 u = f * f * (3.0 - 2.0 * f); + + float a = hash(i); + float b = hash(i + vec2(1.0, 0.0)); + float c = hash(i + vec2(0.0, 1.0)); + float d = hash(i + vec2(1.0, 1.0)); + + return mix(mix(a, b, u.x), mix(c, d, u.x), u.y); +} + +float fbm(vec2 p) { + float value = 0.0; + float amplitude = 0.5; + float frequency = 1.0; + + for (int i = 0; i < 3; i++) { + value += value_noise(p * frequency) * amplitude; + frequency *= 2.0; + amplitude *= 0.5; + } + + return clamp(value, 0.0, 1.0); +} + +float get_snow_amount() { + float snow_amount = 0.0; + if (global_snow_start_time >= 0.0) { + snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0); + } + if (global_snow_melt_time >= 0.0) { + float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0); + snow_amount *= (1.0 - melt); + } + return snow_amount * global_snow_max_accumulation; +} + float ripple_ring(vec2 uv, float time_offset) { float d = length(uv); float ring = sin(d * 30.0 - TIME * ripple_speed + time_offset) * 0.5 + 0.5; @@ -36,6 +88,26 @@ float ripple_ring(vec2 uv, float time_offset) { return ring * fade; } +void vertex() { + float snow_amount = get_snow_amount(); + vec3 world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz; + vec3 world_normal = normalize((MODEL_MATRIX * vec4(NORMAL, 0.0)).xyz); + + float flat_surface = smoothstep( + max(global_snow_threshold, global_snow_cap_flatness_start), + global_snow_cap_flatness_end, + world_normal.y + ); + float accumulation_growth = smoothstep(0.08, 0.65, snow_amount); + float cap_noise = fbm(world_pos.xz * global_snow_cap_noise_scale + vec2(11.3, 4.7)); + float cap_variation = mix(1.0 - global_snow_cap_noise_strength, 1.0 + global_snow_cap_noise_strength, cap_noise); + + v_snow_amount = snow_amount; + v_snow_cap_mask = flat_surface * accumulation_growth * cap_variation; + + VERTEX += NORMAL * (global_snow_cap_height * snow_amount * v_snow_cap_mask); +} + void fragment() { vec3 world_pos = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xyz; vec3 world_normal = normalize((INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz); @@ -43,25 +115,22 @@ void fragment() { float noise_val = texture(noise_texture, world_pos.xz * snow_noise_scale).r; //Snow - float snow_amount = 0.0; - if (global_snow_start_time >= 0.0) { - snow_amount = clamp((TIME - global_snow_start_time) * global_snow_accumulation_speed, 0.0, 1.0); - } - if (global_snow_melt_time >= 0.0) { - float melt = clamp((TIME - global_snow_melt_time) * global_snow_melt_speed, 0.0, 1.0); - snow_amount *= (1.0 - melt); - } + float snow_amount = v_snow_amount; float snow_edge = smoothstep( global_snow_threshold - snow_edge_softness, global_snow_threshold + snow_edge_softness, facing_up + (noise_val - 0.5) * 0.4 ); - float snow_coverage = smoothstep(0.0, 0.6, noise_val + snow_amount - 0.4); - float snow_factor = snow_edge * snow_coverage * snow_amount; + float flat_accumulation = smoothstep(0.0, 0.35, v_snow_cap_mask) * snow_amount; + float snow_coverage = smoothstep(0.0, 0.6, noise_val + snow_amount - 0.4 + flat_accumulation * 0.25); + float snow_factor = max(snow_edge * snow_coverage * snow_amount, flat_accumulation); + float snow_opacity = smoothstep(0.04, 0.28, snow_factor); + snow_opacity = max(snow_opacity, flat_accumulation * 0.9); float shade = mix(-snow_color_variation, snow_color_variation, noise_val); vec3 snow_albedo = clamp(global_snow_color.rgb + vec3(shade), 0.0, 1.0); + snow_albedo = mix(snow_albedo, vec3(1.0), 0.18 + snow_opacity * 0.12); float snow_rough = mix(0.15 - snow_roughness_variation, 0.15 + snow_roughness_variation, noise_val); //Rain @@ -173,7 +242,7 @@ void fragment() { ALBEDO = snow_albedo; ROUGHNESS = snow_rough; METALLIC = 0.0; - ALPHA = snow_factor; + ALPHA = snow_opacity; } else { ALBEDO = rain_albedo; ROUGHNESS = rain_rough; diff --git a/core/daynight/weather_overlay.tres b/core/daynight/weather_overlay.tres index 03906a7..8d78446 100644 --- a/core/daynight/weather_overlay.tres +++ b/core/daynight/weather_overlay.tres @@ -5,17 +5,3 @@ [resource] render_priority = 0 shader = ExtResource("1_weather") -shader_parameter/snow_noise_scale = 0.15 -shader_parameter/snow_edge_softness = 0.2 -shader_parameter/snow_roughness_variation = 0.15 -shader_parameter/snow_color_variation = 0.05 -shader_parameter/ripple_scale = 1.5 -shader_parameter/ripple_speed = 2.0 -shader_parameter/ripple_layers = 3.0 -shader_parameter/streak_scale = 2.0 -shader_parameter/streak_speed = 0.8 -shader_parameter/wetness_darkening = 0.25 -shader_parameter/wet_roughness = 0.05 -shader_parameter/rain_normal_strength = 0.4 -shader_parameter/puddle_noise_scale = 0.08 -shader_parameter/puddle_threshold = 0.45 diff --git a/core/daynight/weather_plain_shader.gdshader b/core/daynight/weather_plain_shader.gdshader index e926af0..ab4f78d 100644 --- a/core/daynight/weather_plain_shader.gdshader +++ b/core/daynight/weather_plain_shader.gdshader @@ -7,16 +7,13 @@ global uniform float global_snow_accumulation_speed; global uniform float global_snow_melt_time; global uniform float global_snow_melt_speed; global uniform vec4 global_snow_color; - -// Rain globals -global uniform float global_rain_intensity; -global uniform float global_rain_puddle_amount; - -// Snow parameters uniform float snow_edge_softness : hint_range(0.01, 0.5) = 0.15; uniform float snow_color_variation : hint_range(0.0, 0.15) = 0.05; + // Rain wetness parameters +global uniform float global_rain_intensity; +global uniform float global_rain_puddle_amount; uniform float ripple_scale : hint_range(0.1, 5.0) = 1.5; uniform float ripple_speed : hint_range(0.5, 5.0) = 2.0; uniform float ripple_layers : hint_range(1.0, 4.0) = 3.0; diff --git a/core/environment_config.gd b/core/environment_config.gd index adc4235..9bf167a 100644 --- a/core/environment_config.gd +++ b/core/environment_config.gd @@ -139,9 +139,15 @@ extends Resource @export var snow_transaction_time: float = 10.0 #Seconds for snow shader to fully transition in/out @export var snow_fade_time: float = 5.0 #Seconds for snow particles to fade in/out @export var snow_threshold: float = 0.4 #Normal Y threshold for snow accumulation on surfaces -@export var snow_accumulation_speed: float = 0.02 #Accumulation speed: 0.1 -> 10s, 0.05 -> 20s, 0.02 -> 50s, 0.2 -> 5s +@export var snow_accumulation_speed: float = 0.018 #Accumulation speed: 0.1 -> 10s, 0.05 -> 20s, 0.02 -> 50s, 0.012 -> ~83s @export var snow_melt_speed: float = 0.05 #Speed at which accumulated snow melts away +@export var snow_max_accumulation: float = 0.3 #Maximum accumulated snow factor applied to coverage and thickness @export var snow_color: Color = Color(0.9, 0.95, 1.0) #Albedo color of snow on surfaces +@export var snow_cap_height: float = 0.03 #Maximum snow thickness extruded on flat surfaces +@export var snow_cap_flatness_start: float = 0.85 #Surface normal Y where cap buildup starts +@export var snow_cap_flatness_end: float = 0.96 #Surface normal Y where cap buildup reaches full effect +@export var snow_cap_noise_scale: float = 0.22 #Noise scale used to vary the snow cap silhouette +@export var snow_cap_noise_strength: float = 0.12 #How much the cap noise changes the accumulated thickness @export var snow_mode_color: Color = Color(0.556, 0.62, 0.683, 1.0) #Sky/light darkening color during snow #Wind settings @@ -152,7 +158,7 @@ extends Resource @export var wind_direction: Vector2 = Vector2(0.5, 0.4) #Global wind direction (XZ) @export var wind_speed: float = 0.2 #Global wind animation speed @export var wind_scale: float = 0.025 #Global wind noise scale -@export var wind_strength: float = 0.6 #Global wind displacement strength +@export var wind_strength: float = 0.3 #Global wind displacement strength @export var cloud_scale: float = 0.5 #Cloud noise scale in sky shader @export var cloud_speed: float = 0.05 #Cloud movement speed in sky shader @export_range(0.01, 1.0) var cloud_scale_envshadows_rate: float = 0.01 #Cloud scale multiplier for environment shadows diff --git a/project.godot b/project.godot index a4cf5d8..368d02b 100644 --- a/project.godot +++ b/project.godot @@ -112,3 +112,27 @@ global_wind_fade={ "type": "float", "value": 1.2 } +global_snow_cap_height={ +"type": "float", +"value": 0.0 +} +global_snow_cap_flatness_start={ +"type": "float", +"value": 0.0 +} +global_snow_cap_flatness_end={ +"type": "float", +"value": 0.0 +} +global_snow_cap_noise_scale={ +"type": "float", +"value": 0.0 +} +global_snow_cap_noise_strength={ +"type": "float", +"value": 0.0 +} +global_snow_max_accumulation={ +"type": "float", +"value": 0.0 +} diff --git a/tgcc/chunk/countryside/scene/chunk_country_cross_3_02.tscn b/tgcc/chunk/countryside/scene/chunk_country_cross_3_02.tscn index a278266..5617bac 100644 --- a/tgcc/chunk/countryside/scene/chunk_country_cross_3_02.tscn +++ b/tgcc/chunk/countryside/scene/chunk_country_cross_3_02.tscn @@ -103,7 +103,7 @@ surface_material_override/1 = ExtResource("4_yg4ko") [node name="MSH_Staccioanta_1_007" parent="." index="8" unique_id=166305032] surface_material_override/0 = ExtResource("6_k52wx") -[node name="PaliLuci_003" parent="." index="9" unique_id=718749193] +[node name="PaliLuci_003" parent="." index="9" unique_id=718749193 groups=["weather_node"]] surface_material_override/0 = ExtResource("7_yg4ko") surface_material_override/1 = ExtResource("7_yg4ko") diff --git a/tgcc/chunk/countryside/scene/chunk_country_end_01.tscn b/tgcc/chunk/countryside/scene/chunk_country_end_01.tscn index 20fdad4..b018675 100644 --- a/tgcc/chunk/countryside/scene/chunk_country_end_01.tscn +++ b/tgcc/chunk/countryside/scene/chunk_country_end_01.tscn @@ -91,7 +91,7 @@ visible = false [node name="FlowerG_003" parent="." index="5" unique_id=65871813 groups=["weather_node", "wind_node"]] visible = false -[node name="Grass_008" parent="." index="6" unique_id=1853173495 groups=["weather_vegetables_node", "wind_node"]] +[node name="Grass_008" parent="." index="6" unique_id=1853173495] surface_material_override/0 = ExtResource("2_cltnj") [node name="House_M_3" parent="." index="7" unique_id=155596536 groups=["weather_node"]] @@ -111,7 +111,7 @@ surface_material_override/0 = ExtResource("8_hmdr4") surface_material_override/0 = ExtResource("3_aj7xj") surface_material_override/1 = ExtResource("3_aj7xj") -[node name="Panchina_002" parent="." index="11" unique_id=876085859] +[node name="Panchina_002" parent="." index="11" unique_id=876085859 groups=["weather_node"]] surface_material_override/0 = ExtResource("8_hmdr4") [node name="Strada_006" parent="." index="12" unique_id=76888486 groups=["weather_node"]] diff --git a/tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn b/tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn index 5ff1099..229c3c2 100644 --- a/tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn +++ b/tgcc/chunk/countryside/scene/chunk_country_straight_02.tscn @@ -154,7 +154,7 @@ south = true [node name="Argini_005" parent="." index="0" unique_id=255857931] surface_material_override/0 = ExtResource("2_t65ww") -[node name="Bags" parent="." index="1" unique_id=2117673123 groups=["weather_node"]] +[node name="Bags" parent="." index="1" unique_id=2117673123] surface_material_override/0 = SubResource("ShaderMaterial_q2s76") [node name="Cart" parent="." index="2" unique_id=884973125] @@ -191,14 +191,14 @@ surface_material_override/0 = ExtResource("5_sy58u") surface_material_override/1 = ExtResource("5_sy58u") surface_material_override/2 = ExtResource("6_eev23") -[node name="Statue" parent="." index="11" unique_id=1814801509 groups=["weather_node"]] +[node name="Statue" parent="." index="11" unique_id=1814801509] surface_material_override/0 = ExtResource("5_sy58u") surface_material_override/1 = ExtResource("7_q2s76") [node name="Water_006" parent="." index="12" unique_id=1352334701] surface_material_override/0 = ExtResource("10_r4bww") -[node name="WoodPile" parent="." index="13" unique_id=1088104699 groups=["weather_node"]] +[node name="WoodPile" parent="." index="13" unique_id=1088104699] surface_material_override/0 = ExtResource("11_iulsg") surface_material_override/1 = ExtResource("12_ytk0o") surface_material_override/2 = SubResource("ShaderMaterial_ytk0o") diff --git a/tgcc/chunk/prop/flower/bush.tres b/tgcc/chunk/prop/flower/bush.tres index 6a0f496..e81730e 100644 --- a/tgcc/chunk/prop/flower/bush.tres +++ b/tgcc/chunk/prop/flower/bush.tres @@ -2,13 +2,13 @@ [ext_resource type="Shader" uid="uid://8l8glwvvs7fb" path="res://core/daynight/grass_leaves.gdshader" id="1_yw70r"] [ext_resource type="Texture2D" uid="uid://bm0roy74xo3ce" path="res://tgcc/chunk/prop/flower/bush_alpha.png" id="2_rv6bf"] -[ext_resource type="Texture2D" path="res://tgcc/chunk/prop/flower/bush_colornoise.tres" id="3_t3pfi"] +[ext_resource type="Texture2D" uid="uid://bkuv31yvqmqr2" path="res://tgcc/chunk/prop/flower/bush_colornoise.tres" id="3_t3pfi"] [resource] render_priority = 0 shader = ExtResource("1_yw70r") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = false +shader_parameter/wind_enabled = true shader_parameter/base_color = Color(0.2509804, 0.44705883, 0.20392157, 1) shader_parameter/alpha_texture = ExtResource("2_rv6bf") shader_parameter/leaves_scale = 0.65 diff --git a/tgcc/chunk/prop/flower/flower.tres b/tgcc/chunk/prop/flower/flower.tres index 4476254..9e1f542 100644 --- a/tgcc/chunk/prop/flower/flower.tres +++ b/tgcc/chunk/prop/flower/flower.tres @@ -8,7 +8,7 @@ render_priority = 0 shader = ExtResource("1_28e45") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = false +shader_parameter/wind_enabled = true shader_parameter/base_color = Color(0, 0.42745098, 0.9843137, 1) shader_parameter/alpha_texture = ExtResource("2_4kf4f") shader_parameter/leaves_scale = 0.365 diff --git a/tgcc/chunk/prop/grass/grass_chunk.tres b/tgcc/chunk/prop/grass/grass_chunk.tres index 619b979..0cebce2 100644 --- a/tgcc/chunk/prop/grass/grass_chunk.tres +++ b/tgcc/chunk/prop/grass/grass_chunk.tres @@ -16,7 +16,7 @@ seamless = true render_priority = 0 shader = ExtResource("1_a5yde") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = false +shader_parameter/wind_enabled = true shader_parameter/base_color = Color(0.3882353, 0.52156866, 0.20784314, 1) shader_parameter/alpha_texture = ExtResource("2_4hc02") shader_parameter/leaves_scale = 0.65 diff --git a/tgcc/chunk/prop/grass/grass_chunk_weeds.tres b/tgcc/chunk/prop/grass/grass_chunk_weeds.tres index d1809fb..800ba99 100644 --- a/tgcc/chunk/prop/grass/grass_chunk_weeds.tres +++ b/tgcc/chunk/prop/grass/grass_chunk_weeds.tres @@ -7,7 +7,7 @@ render_priority = 0 shader = ExtResource("1_0cuwq") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = false +shader_parameter/wind_enabled = true shader_parameter/base_color = Color(0.103467666, 0.34917185, 0.14285779, 1) shader_parameter/alpha_texture = ExtResource("2_ldsj3") shader_parameter/leaves_scale = 0.92 diff --git a/tgcc/chunk/prop/grass/grass_chunk_weeds2.tres b/tgcc/chunk/prop/grass/grass_chunk_weeds2.tres index a8c0a9c..2451015 100644 --- a/tgcc/chunk/prop/grass/grass_chunk_weeds2.tres +++ b/tgcc/chunk/prop/grass/grass_chunk_weeds2.tres @@ -7,7 +7,7 @@ render_priority = 0 shader = ExtResource("1_vpd27") shader_parameter/billboard_enabled = true -shader_parameter/wind_enabled = false +shader_parameter/wind_enabled = true shader_parameter/base_color = Color(0.14700681, 0.45590013, 0.22758594, 1) shader_parameter/alpha_texture = ExtResource("2_wl0p2") shader_parameter/leaves_scale = 0.46 @@ -21,3 +21,4 @@ shader_parameter/highlight_intensity = 0.0 shader_parameter/light_steps = 10.0 shader_parameter/random_mix = 0.010000000475 shader_parameter/cast_shadow_strength = 0.6 +shader_parameter/wetness_darkening = 0.25