add env shadows; add clouds and wind parameters for sky and envshadwows
This commit is contained in:
16
core/daynight/blur.gdshader
Normal file
16
core/daynight/blur.gdshader
Normal file
@@ -0,0 +1,16 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform sampler2D screen_texture : hint_screen_texture, filter_linear_mipmap;
|
||||
|
||||
uniform float blur_amount : hint_range(0.0, 5.0) = 2.5;
|
||||
uniform float focus_size : hint_range(0.0, 1.0) = 0.4;
|
||||
uniform float transition_softness : hint_range(0.01, 1.0) = 0.3;
|
||||
|
||||
void fragment() {
|
||||
float dist_from_center = abs(SCREEN_UV.y - 0.5);
|
||||
float mask = smoothstep(focus_size / 2.0, (focus_size / 2.0) + transition_softness, dist_from_center);
|
||||
|
||||
//Apply blur
|
||||
vec4 blurred_screen = textureLod(screen_texture, SCREEN_UV, blur_amount * mask);
|
||||
COLOR = blurred_screen;
|
||||
}
|
||||
1
core/daynight/blur.gdshader.uid
Normal file
1
core/daynight/blur.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bkn6eqgbn37jx
|
||||
@@ -1,11 +1,9 @@
|
||||
class_name DayNightController
|
||||
extends Node
|
||||
|
||||
#Time duration in seconds for a day
|
||||
@export var day_duration: float = 120.0
|
||||
|
||||
#starting time
|
||||
@export_range(0.0, 1.0) var start_time: float = 0.0
|
||||
var environment_config: EnvironmentConfig
|
||||
|
||||
#Multiply for debug
|
||||
@export var time_scale: float = 1.0
|
||||
@@ -16,16 +14,23 @@ signal time_changed(time: float)
|
||||
|
||||
var current_time: float = 0.0
|
||||
|
||||
func _init(environmentconfig: EnvironmentConfig) -> void:
|
||||
environment_config = environmentconfig
|
||||
|
||||
func _ready() -> void:
|
||||
#connect events
|
||||
UIEvents.set_day_time.connect(_on_set_day_time)
|
||||
UIEvents.toggle_pause_daytime.connect(_on_toggle_pause_daytime)
|
||||
|
||||
current_time = start_time
|
||||
update_time(current_time)
|
||||
UIEvents.set_day_time.connect(_on_set_day_time)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if paused or day_duration <= 0.0:
|
||||
if paused or environment_config.day_duration <= 0.0:
|
||||
return
|
||||
|
||||
var increment: float = (delta * time_scale) / day_duration
|
||||
var increment: float = (delta * time_scale) / environment_config.day_duration
|
||||
current_time = wrapf(current_time + increment, 0.0, 1.0)
|
||||
|
||||
update_time(current_time)
|
||||
@@ -46,3 +51,6 @@ func update_time(currtime: float) -> void:
|
||||
|
||||
func _on_set_day_time(value: float) -> void:
|
||||
set_time(value)
|
||||
|
||||
func _on_toggle_pause_daytime(value: bool) -> void:
|
||||
paused = value
|
||||
|
||||
73
core/daynight/environment_dust.gdshader
Normal file
73
core/daynight/environment_dust.gdshader
Normal file
@@ -0,0 +1,73 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform sampler2D screen_texture : hint_screen_texture, filter_linear_mipmap;
|
||||
|
||||
uniform vec4 dust_color : source_color = vec4(1.0, 0.456, 0.125, 0.6);
|
||||
|
||||
//Wind -> negative x = to the left. positive y = to the bottom
|
||||
uniform vec2 wind_velocity = vec2(-0.2, 0.05);
|
||||
uniform float wind_oscillation : hint_range(0.0, 1.0) = 0.3;
|
||||
uniform float dust_speed : hint_range(0.01, 1.0) = 0.15;
|
||||
|
||||
uniform float size_min : hint_range(0.001, 0.1) = 0.02;
|
||||
uniform float size_max : hint_range(0.01, 0.5) = 0.2;
|
||||
uniform float dust_density : hint_range(0.01, 10.0) = 1.0;
|
||||
|
||||
// Softness
|
||||
// 0.0 = Sfumatura totale dal centro esatto fino al bordo.
|
||||
// 0.5 = Metà pallino è solido, l'altra metà sfuma.
|
||||
// 0.9 = Pallino dai bordi durissimi.
|
||||
uniform float solid_core : hint_range(0.0, 0.99) = 0.1;
|
||||
|
||||
vec3 hash33(vec3 p3) {
|
||||
p3 = fract(p3 * vec3(0.1031, 0.1030, 0.0973));
|
||||
p3 += dot(p3, p3.yzx + 33.33);
|
||||
return fract((p3.xxy + p3.yzz) * p3.zyx);
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec4 scene_color = texture(screen_texture, SCREEN_UV);
|
||||
float base_time = TIME * dust_speed;
|
||||
|
||||
vec2 osc = vec2(sin(TIME * 0.5), cos(TIME * 0.3)) * wind_oscillation;
|
||||
vec2 final_wind = (wind_velocity + osc) * dust_speed;
|
||||
|
||||
float final_particle_alpha = 0.0;
|
||||
|
||||
//Thresolds (near, medium, far)
|
||||
vec3 layer_scales = vec3(20.0, 50.0, 100.0) / dust_density;
|
||||
vec3 layer_thresholds = vec3(0.96, 0.98, 0.99);
|
||||
vec3 layer_speeds = vec3(1.0, 0.6, 0.3);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
float scale = layer_scales[i];
|
||||
float threshold = layer_thresholds[i];
|
||||
float speed_mult = layer_speeds[i];
|
||||
|
||||
vec2 st = (SCREEN_UV * scale) - (final_wind * speed_mult * base_time * 50.0);
|
||||
vec2 ipos = floor(st);
|
||||
vec2 fpos = fract(st);
|
||||
|
||||
vec3 rand = hash33(vec3(ipos, float(i)));
|
||||
|
||||
if (rand.z > threshold) {
|
||||
float blink = sin(TIME * (2.0 + rand.x)) * 0.5 + 0.5;
|
||||
|
||||
float d = length(fpos - vec2(0.5));
|
||||
float size = size_min + (size_max - size_min) * rand.x;
|
||||
float scaled_size = size * (0.5 + 0.5 * blink);
|
||||
|
||||
float core = scaled_size * solid_core;
|
||||
|
||||
float particle_softness = 1.0 - smoothstep(core, scaled_size, d);
|
||||
|
||||
float intensity = (rand.z - threshold) / (1.0 - threshold);
|
||||
final_particle_alpha += particle_softness * blink * intensity;
|
||||
}
|
||||
}
|
||||
|
||||
final_particle_alpha = clamp(final_particle_alpha, 0.0, 1.0);
|
||||
vec4 dust_colored_particle = dust_color * final_particle_alpha;
|
||||
|
||||
COLOR = scene_color + dust_colored_particle;
|
||||
}
|
||||
1
core/daynight/environment_dust.gdshader.uid
Normal file
1
core/daynight/environment_dust.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bwf4wjp802x8j
|
||||
14
core/daynight/environment_dust_material.tres
Normal file
14
core/daynight/environment_dust_material.tres
Normal file
@@ -0,0 +1,14 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://codq5gx71rj4o"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://bwf4wjp802x8j" path="res://core/daynight/environment_dust.gdshader" id="1_80hx2"]
|
||||
|
||||
[resource]
|
||||
shader = ExtResource("1_80hx2")
|
||||
shader_parameter/dust_color = Color(1, 0.9019608, 0.7019608, 0.6)
|
||||
shader_parameter/wind_velocity = Vector2(-1, 0.5)
|
||||
shader_parameter/wind_oscillation = 0.0150000007125
|
||||
shader_parameter/dust_speed = 0.15
|
||||
shader_parameter/size_min = 0.010000000475
|
||||
shader_parameter/size_max = 0.15000000642648
|
||||
shader_parameter/dust_density = 1.5
|
||||
shader_parameter/solid_core = 0.25
|
||||
@@ -6,14 +6,18 @@
|
||||
[ext_resource type="Shader" uid="uid://cq4vlcj8cuvge" path="res://core/daynight/fog.gdshader" id="2_r4tfj"]
|
||||
[ext_resource type="PackedScene" uid="uid://dyxvcf2l8ba5x" path="res://core/daynight/god_ray.tscn" id="5_411rw"]
|
||||
[ext_resource type="Shader" uid="uid://bb1jjwe31fl7o" path="res://core/daynight/wind.gdshader" id="5_djqkg"]
|
||||
[ext_resource type="Shader" uid="uid://b6l166fnyto24" path="res://core/daynight/fogoverlay.gdshader" id="7_i6gqj"]
|
||||
[ext_resource type="Shader" uid="uid://bwf4wjp802x8j" path="res://core/daynight/environment_dust.gdshader" id="7_ik86e"]
|
||||
[ext_resource type="Material" uid="uid://codq5gx71rj4o" path="res://core/daynight/environment_dust_material.tres" id="8_amaf0"]
|
||||
[ext_resource type="Shader" uid="uid://bkn6eqgbn37jx" path="res://core/daynight/blur.gdshader" id="9_amaf0"]
|
||||
[ext_resource type="Shader" uid="uid://b5wa82soyhsqm" path="res://core/daynight/environment_shadows.gdshader" id="10_tuauy"]
|
||||
[ext_resource type="FastNoiseLite" uid="uid://c0mtwrkptjcuw" path="res://core/daynight/environment_shadows_noise_clouds.tres" id="11_yn8v8"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ruhh7"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("2_i3hjl")
|
||||
shader_parameter/cloud_scale = 0.05
|
||||
shader_parameter/cloud_speed = 0.05
|
||||
shader_parameter/direction = Vector2(1, 0.2)
|
||||
shader_parameter/direction = Vector2(0.5, 0.2)
|
||||
shader_parameter/sun_angle = Vector2(0.5, 0.5)
|
||||
shader_parameter/cloud_density = 0.4
|
||||
shader_parameter/center_sharpness = 0.14
|
||||
@@ -179,21 +183,59 @@ material = SubResource("StandardMaterial3D_ruhh7")
|
||||
size = Vector2(0.05, 0.8)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ik86e"]
|
||||
shader = ExtResource("7_i6gqj")
|
||||
shader_parameter/fog_color = Color(0.85, 0.9, 0.95, 1)
|
||||
shader_parameter/clear_center_radius = 0.39200001862
|
||||
shader_parameter/edge_softness = 0.30900001397898
|
||||
shader_parameter/max_opacity = 0.10000000475
|
||||
shader = ExtResource("7_ik86e")
|
||||
shader_parameter/dust_color = Color(1, 0.9, 0.7, 0.6)
|
||||
shader_parameter/wind_velocity = Vector2(-0.2, 0.05)
|
||||
shader_parameter/wind_oscillation = 0.3
|
||||
shader_parameter/dust_speed = 0.15
|
||||
shader_parameter/size_min = 0.02
|
||||
shader_parameter/size_max = 0.2
|
||||
shader_parameter/dust_density = 1.0
|
||||
shader_parameter/solid_core = 0.1
|
||||
|
||||
[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "fog_overlay")]
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_kavln"]
|
||||
shader = ExtResource("9_amaf0")
|
||||
shader_parameter/blur_amount = 0.70000003325
|
||||
shader_parameter/focus_size = 0.250000011875
|
||||
shader_parameter/transition_softness = 0.40000001830148
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_sxgg7"]
|
||||
size = Vector2(2, 2)
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_0fcg4"]
|
||||
noise = ExtResource("11_yn8v8")
|
||||
seamless = true
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_oqt1s"]
|
||||
render_priority = 0
|
||||
shader = ExtResource("10_tuauy")
|
||||
shader_parameter/noise_texture = SubResource("NoiseTexture2D_0fcg4")
|
||||
shader_parameter/cloud_scale = 0.0070000003325
|
||||
shader_parameter/cloud_speed = 0.0030000001425
|
||||
shader_parameter/direction = Vector2(0.5, 0.2)
|
||||
shader_parameter/sun_angle = Vector2(0.5, 0.5)
|
||||
shader_parameter/cloud_density = 0.400000019
|
||||
shader_parameter/center_sharpness = 0.138000006555
|
||||
shader_parameter/shadow_color = Color(0, 0, 0, 1)
|
||||
shader_parameter/opacity_center = 0.90000004275
|
||||
shader_parameter/opacity_edge = 0.6000000285
|
||||
shader_parameter/fade_start = 150.0
|
||||
shader_parameter/fade_end = 800.000035625
|
||||
shader_parameter/height_fade_start = 10.0
|
||||
shader_parameter/height_fade_end = 50.0
|
||||
|
||||
[node name="EnvironmentManager" type="Node3D" unique_id=1611939731 node_paths=PackedStringArray("particles_wind", "particles_snow", "particles_fireflies", "particles_rain", "fog_overlay", "environment_dust", "blur", "environment_shadows")]
|
||||
script = ExtResource("1_wecen")
|
||||
environment_config = SubResource("Resource_r4tfj")
|
||||
godray = ExtResource("5_411rw")
|
||||
particles_wind = NodePath("Particles_Wind")
|
||||
particles_snow = NodePath("Particles_Snow")
|
||||
particles_fireflies = NodePath("Particles_Fireflies")
|
||||
particles_rain = NodePath("Particles_Rain")
|
||||
godray = ExtResource("5_411rw")
|
||||
fog_overlay = NodePath("FogOverlay")
|
||||
environment_dust = NodePath("EnvironmentDust")
|
||||
blur = NodePath("Blur")
|
||||
environment_shadows = NodePath("EnvironmentShadows")
|
||||
|
||||
[node name="Particles_Fireflies" type="GPUParticles3D" parent="." unique_id=947538133]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
|
||||
@@ -214,7 +256,6 @@ draw_pass_1 = SubResource("TubeTrailMesh_vo82p")
|
||||
|
||||
[node name="Particles_Snow" type="GPUParticles3D" parent="." unique_id=1877039876]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 30, 0)
|
||||
visible = false
|
||||
emitting = false
|
||||
amount = 2000
|
||||
lifetime = 4.0
|
||||
@@ -232,7 +273,6 @@ process_material = SubResource("ParticleProcessMaterial_b5atu")
|
||||
draw_pass_1 = SubResource("QuadMesh_cer0u")
|
||||
|
||||
[node name="FogOverlay" type="ColorRect" parent="." unique_id=1694754918]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_ik86e")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@@ -240,3 +280,26 @@ anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="EnvironmentDust" type="ColorRect" parent="." unique_id=1245348005]
|
||||
material = ExtResource("8_amaf0")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="Blur" type="ColorRect" parent="." unique_id=809010331]
|
||||
material = SubResource("ShaderMaterial_kavln")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="EnvironmentShadows" type="MeshInstance3D" parent="." unique_id=159549433]
|
||||
extra_cull_margin = 16384.0
|
||||
mesh = SubResource("QuadMesh_sxgg7")
|
||||
surface_material_override/0 = SubResource("ShaderMaterial_oqt1s")
|
||||
|
||||
@@ -13,6 +13,9 @@ extends Node3D
|
||||
@export var particles_rain: GPUParticles3D
|
||||
@export var godray: PackedScene
|
||||
@export var fog_overlay: ColorRect
|
||||
@export var environment_dust: ColorRect
|
||||
@export var blur: ColorRect
|
||||
@export var environment_shadows: MeshInstance3D
|
||||
|
||||
#environment nodes
|
||||
@onready var sun: DirectionalLight3D = $"../DirectionalLight3D"
|
||||
@@ -24,10 +27,12 @@ var weather_controller: WeatherController
|
||||
var day_tween: Tween
|
||||
var day_time: float = 0.0
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
func _ready() -> void:
|
||||
|
||||
if day_night_controller == null:
|
||||
day_night_controller = DayNightController.new()
|
||||
day_night_controller = DayNightController.new(
|
||||
environment_config
|
||||
)
|
||||
day_night_controller.name = "DayNightController"
|
||||
day_night_controller.time_changed.connect(select_day_time)
|
||||
add_child(day_night_controller)
|
||||
@@ -38,8 +43,12 @@ func _ready() -> void:
|
||||
particles_snow,
|
||||
particles_fireflies,
|
||||
particles_rain,
|
||||
godray,
|
||||
sun,
|
||||
godray,
|
||||
fog_overlay,
|
||||
environment_dust,
|
||||
blur,
|
||||
environment_shadows,
|
||||
sun,
|
||||
environment,
|
||||
environment_config,
|
||||
camera
|
||||
|
||||
75
core/daynight/environment_shadows.gdshader
Normal file
75
core/daynight/environment_shadows.gdshader
Normal file
@@ -0,0 +1,75 @@
|
||||
shader_type spatial;
|
||||
|
||||
render_mode unshaded, depth_test_disabled, cull_disabled;
|
||||
|
||||
uniform sampler2D depth_texture : hint_depth_texture, repeat_disable, filter_nearest;
|
||||
uniform sampler2D noise_texture : repeat_enable, filter_linear;
|
||||
|
||||
uniform float cloud_scale : hint_range(0.001, 0.2) = 0.05;
|
||||
uniform float cloud_speed : hint_range(0.0, 1.0) = 0.05;
|
||||
uniform vec2 direction = vec2(1.0, 0.2);
|
||||
uniform vec2 sun_angle = vec2(0.5, 0.5);
|
||||
|
||||
group_uniforms Cloud_Shape;
|
||||
uniform float cloud_density : hint_range(0.0, 1.0) = 0.5;
|
||||
uniform float center_sharpness : hint_range(0.0, 0.99) = 0.7;
|
||||
|
||||
group_uniforms Layout;
|
||||
uniform vec3 shadow_color : source_color = vec3(0.0, 0.0, 0.0);
|
||||
uniform float opacity_center : hint_range(0.0, 1.0) = 0.5;
|
||||
uniform float opacity_edge : hint_range(0.0, 1.0) = 0.2;
|
||||
|
||||
group_uniforms Fade_Distance;
|
||||
//Fade based on camera distance
|
||||
uniform float fade_start : hint_range(10.0, 1000.0) = 150.0;
|
||||
uniform float fade_end : hint_range(50.0, 2000.0) = 300.0;
|
||||
|
||||
group_uniforms Fade_Height;
|
||||
//Fade based on base height (Y) - meters
|
||||
uniform float height_fade_start : hint_range(0.0, 500.0) = 10.0; //start disappear at 10m
|
||||
uniform float height_fade_end : hint_range(0.0, 1000.0) = 50.0; //disappear over 50m
|
||||
|
||||
void vertex() {
|
||||
POSITION = vec4(VERTEX.xy, 1.0, 1.0);
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
float depth = texture(depth_texture, SCREEN_UV).x;
|
||||
|
||||
if (depth >= 0.9999) {
|
||||
ALPHA = 0.0;
|
||||
} else {
|
||||
vec3 ndc = vec3(SCREEN_UV * 2.0 - 1.0, depth);
|
||||
vec4 view_pos = INV_PROJECTION_MATRIX * vec4(ndc, 1.0);
|
||||
view_pos /= view_pos.w;
|
||||
vec4 world_pos = INV_VIEW_MATRIX * view_pos;
|
||||
|
||||
float dist = length(view_pos.xyz);
|
||||
float dist_fade = smoothstep(fade_end, fade_start, dist);
|
||||
|
||||
float height_fade = smoothstep(height_fade_end, height_fade_start, world_pos.y);
|
||||
|
||||
float final_fade = dist_fade * height_fade;
|
||||
|
||||
if (final_fade <= 0.001) {
|
||||
ALPHA = 0.0;
|
||||
} else {
|
||||
vec2 projected_xz = world_pos.xz + (world_pos.y * sun_angle);
|
||||
vec2 uv = projected_xz * cloud_scale;
|
||||
uv += TIME * cloud_speed * direction;
|
||||
|
||||
float n = texture(noise_texture, uv).r;
|
||||
|
||||
if (n < (1.0 - cloud_density)) {
|
||||
ALPHA = 0.0;
|
||||
} else {
|
||||
float internal_n = (n - (1.0 - cloud_density)) / cloud_density;
|
||||
float is_center = step(center_sharpness, internal_n);
|
||||
|
||||
ALBEDO = shadow_color;
|
||||
|
||||
ALPHA = mix(opacity_edge, opacity_center, is_center) * final_fade;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1
core/daynight/environment_shadows.gdshader.uid
Normal file
1
core/daynight/environment_shadows.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b5wa82soyhsqm
|
||||
26
core/daynight/environment_shadows.tres
Normal file
26
core/daynight/environment_shadows.tres
Normal file
@@ -0,0 +1,26 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://cknq8qhom7ral"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://c0gopfoe0ij8g" path="res://Shaders/Shadow_postProcess.gdshader" id="1_23efu"]
|
||||
[ext_resource type="FastNoiseLite" uid="uid://c0mtwrkptjcuw" path="res://Assets/Textures/Noise_Clouds.tres" id="2_n0ip8"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_5lko7"]
|
||||
noise = ExtResource("2_n0ip8")
|
||||
seamless = true
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_23efu")
|
||||
shader_parameter/noise_texture = SubResource("NoiseTexture2D_5lko7")
|
||||
shader_parameter/cloud_scale = 0.0070000003325
|
||||
shader_parameter/cloud_speed = 0.0030000001425
|
||||
shader_parameter/direction = Vector2(1, 0.2)
|
||||
shader_parameter/sun_angle = Vector2(0.5, 0.5)
|
||||
shader_parameter/cloud_density = 0.400000019
|
||||
shader_parameter/center_sharpness = 0.138000006555
|
||||
shader_parameter/shadow_color = Color(0, 0, 0, 1)
|
||||
shader_parameter/opacity_center = 0.90000004275
|
||||
shader_parameter/opacity_edge = 0.6000000285
|
||||
shader_parameter/fade_start = 150.0
|
||||
shader_parameter/fade_end = 800.000035625
|
||||
shader_parameter/height_fade_start = 10.0
|
||||
shader_parameter/height_fade_end = 50.0
|
||||
6
core/daynight/environment_shadows_noise_clouds.tres
Normal file
6
core/daynight/environment_shadows_noise_clouds.tres
Normal file
@@ -0,0 +1,6 @@
|
||||
[gd_resource type="FastNoiseLite" format=3 uid="uid://c0mtwrkptjcuw"]
|
||||
|
||||
[resource]
|
||||
fractal_lacunarity = 1.915
|
||||
fractal_gain = 0.53
|
||||
fractal_weighted_strength = 0.35
|
||||
@@ -7,6 +7,9 @@ var particles_fireflies: GPUParticles3D
|
||||
var particles_rain: GPUParticles3D
|
||||
var godray: PackedScene
|
||||
var fog_overlay: ColorRect
|
||||
var environment_dust: ColorRect
|
||||
var blur: ColorRect
|
||||
var environment_shadows: MeshInstance3D
|
||||
|
||||
var sun: DirectionalLight3D
|
||||
var environment: WorldEnvironment
|
||||
@@ -36,6 +39,7 @@ var thereare_fireflies: bool = false
|
||||
|
||||
func _init(wind: GPUParticles3D, snow: GPUParticles3D,
|
||||
fireflies: GPUParticles3D, rain: GPUParticles3D, ray: PackedScene,
|
||||
fogov: ColorRect, dust: ColorRect, blurr: ColorRect, envshadows: MeshInstance3D,
|
||||
thesun: DirectionalLight3D, theenvironment: WorldEnvironment, environmentconfig: EnvironmentConfig,
|
||||
thecamera: Camera3D = null) -> void:
|
||||
particles_wind = wind
|
||||
@@ -44,6 +48,10 @@ func _init(wind: GPUParticles3D, snow: GPUParticles3D,
|
||||
particles_rain = rain
|
||||
godray = ray
|
||||
sun = thesun
|
||||
fog_overlay = fogov
|
||||
environment_dust = dust
|
||||
blur = blurr
|
||||
environment_shadows = envshadows
|
||||
environment = theenvironment
|
||||
environment_config = environmentconfig
|
||||
camera = thecamera
|
||||
@@ -65,8 +73,13 @@ func _ready() -> void:
|
||||
UIEvents.toggle_wind.connect(toggle_wind)
|
||||
UIEvents.toggle_fireflies.connect(toggle_fireflies)
|
||||
UIEvents.toggle_storm.connect(toggle_storm)
|
||||
|
||||
UIEvents.toggle_fog_overlay.connect(toggle_fog_overlay)
|
||||
UIEvents.toggle_dust.connect(toggle_dust)
|
||||
UIEvents.toggle_blur.connect(toggle_blur)
|
||||
UIEvents.toggle_shadows.connect(toggle_shadows)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
|
||||
_follow_camera()
|
||||
|
||||
var base_tint: Color
|
||||
@@ -204,7 +217,7 @@ func _follow_camera() -> void:
|
||||
if particles_fireflies:
|
||||
particles_fireflies.global_position = Vector3(cam_pos.x, particles_fireflies.position.y, cam_pos.z)
|
||||
|
||||
#region fireflies
|
||||
#region Fireflies
|
||||
|
||||
func toggle_fireflies(value: bool):
|
||||
thereare_fireflies = value
|
||||
@@ -241,6 +254,28 @@ func set_wind():
|
||||
var proc_mat_wind = particles_wind.process_material as ParticleProcessMaterial
|
||||
if proc_mat_wind:
|
||||
proc_mat_wind.emission_box_extents = Vector3(environment_config.wind_spawn_ray, environment_config.wind_spawn_height, environment_config.wind_spawn_ray)
|
||||
|
||||
if environment_config:
|
||||
_apply_cloud_config()
|
||||
|
||||
func _apply_cloud_config() -> void:
|
||||
var dir = environment_config.wind_direction
|
||||
var cloud_scale = environment_config.cloud_scale
|
||||
var cloud_speed = environment_config.cloud_speed
|
||||
var envshadows_scale_rate = environment_config.cloud_scale_envshadows_rate
|
||||
var envshadows_speed_rate = environment_config.cloud_speed_envshadows_rate
|
||||
|
||||
if environment and environment.environment and environment.environment.sky:
|
||||
var sky_mat = environment.environment.sky.sky_material as ShaderMaterial
|
||||
if sky_mat:
|
||||
sky_mat.set_shader_parameter("cloud_direction", dir)
|
||||
sky_mat.set_shader_parameter("cloud_scale", cloud_scale)
|
||||
sky_mat.set_shader_parameter("cloud_speed", cloud_speed)
|
||||
|
||||
if environment_shadows and environment_shadows.material_override:
|
||||
environment_shadows.material_override.set_shader_parameter("direction", dir)
|
||||
environment_shadows.material_override.set_shader_parameter("cloud_scale", cloud_scale * envshadows_scale_rate)
|
||||
environment_shadows.material_override.set_shader_parameter("cloud_speed", cloud_speed * envshadows_speed_rate)
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -325,6 +360,7 @@ func start_lightning():
|
||||
|
||||
if lightning_number > 1:
|
||||
await get_tree().create_timer(randf_range(0.05, 0.15)).timeout
|
||||
|
||||
#endregion
|
||||
|
||||
#region Rain
|
||||
@@ -386,6 +422,7 @@ func spawn_single_godray() -> void:
|
||||
godray_tween.tween_interval(2.0)
|
||||
godray_tween.tween_property(ray, "scale", Vector3.ZERO, 2.0).set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_SINE)
|
||||
godray_tween.tween_callback(ray.queue_free)
|
||||
|
||||
#endregion
|
||||
|
||||
#region Snow
|
||||
@@ -446,3 +483,23 @@ func set_snow_amount(value: float):
|
||||
RenderingServer.global_shader_parameter_set("global_snow_amount", value)
|
||||
|
||||
#endregion
|
||||
|
||||
#region Post-Process
|
||||
|
||||
func toggle_fog_overlay(value: bool) -> void:
|
||||
if fog_overlay:
|
||||
fog_overlay.visible = value
|
||||
|
||||
func toggle_dust(value: bool) -> void:
|
||||
if environment_dust:
|
||||
environment_dust.visible = value
|
||||
|
||||
func toggle_blur(value: bool) -> void:
|
||||
if blur:
|
||||
blur.visible = value
|
||||
|
||||
func toggle_shadows(value: bool) -> void:
|
||||
if environment_shadows:
|
||||
environment_shadows.visible = value
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
class_name EnvironmentConfig
|
||||
extends Resource
|
||||
|
||||
#Time duration in seconds for a day
|
||||
@export_group("Day")
|
||||
@export var day_duration: float = 120.0
|
||||
|
||||
@export_group("Directional Lights and Environment")
|
||||
@export var morning_color: Color = Color(1.0, 0.9, 0.8, 1.0)
|
||||
@export var afternoon_color: Color = Color(1.0, 0.6, 0.2, 1.0)
|
||||
@@ -55,6 +59,12 @@ extends Resource
|
||||
@export var glow_afternoon: float = 0.8
|
||||
@export var glow_night: float = 2.0
|
||||
|
||||
@export_group("Post Process")
|
||||
@export var enable_fog_overlay: bool = true
|
||||
@export var enable_dust: bool = true
|
||||
@export var enable_blur: bool = true
|
||||
@export var enable_environment_shadows: bool = true
|
||||
|
||||
@export_group("Environment Materials")
|
||||
@export var material_fog: ShaderMaterial
|
||||
@export var material_drops: StandardMaterial3D
|
||||
@@ -92,6 +102,11 @@ extends Resource
|
||||
@export var wind_amount: int = 100
|
||||
@export var wind_spawn_ray: float = 25.0
|
||||
@export var wind_spawn_height: float = 5.0
|
||||
@export var wind_direction: Vector2 = Vector2(0.5, 0.2)
|
||||
@export var cloud_scale: float = 0.5
|
||||
@export var cloud_speed: float = 0.05
|
||||
@export_range(0.01, 1.0) var cloud_scale_envshadows_rate: float = 0.14
|
||||
@export_range(0.01, 1.0) var cloud_speed_envshadows_rate: float = 0.5
|
||||
|
||||
@export_group("Fireflies")
|
||||
@export var fireflies_amount: int = 60
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
extends Node
|
||||
|
||||
#weather signals
|
||||
@warning_ignore("unused_signal")
|
||||
signal toggle_rain(value: bool)
|
||||
@warning_ignore("unused_signal")
|
||||
@@ -12,3 +13,15 @@ signal toggle_fireflies(value: bool)
|
||||
signal toggle_storm(value: bool)
|
||||
@warning_ignore("unused_signal")
|
||||
signal set_day_time(value: float)
|
||||
@warning_ignore("unused_signal")
|
||||
signal toggle_fog_overlay(value: bool)
|
||||
@warning_ignore("unused_signal")
|
||||
signal toggle_dust(value: bool)
|
||||
@warning_ignore("unused_signal")
|
||||
signal toggle_blur(value: bool)
|
||||
@warning_ignore("unused_signal")
|
||||
signal toggle_shadows(value: bool)
|
||||
|
||||
#day cycle signals
|
||||
@warning_ignore("unused_signal")
|
||||
signal toggle_pause_daytime(value: bool)
|
||||
|
||||
@@ -17,3 +17,18 @@ func _on_storm_toggled(toggled_on: bool) -> void:
|
||||
|
||||
func _on_day_time_slider_value_changed(value: float) -> void:
|
||||
UIEvents.set_day_time.emit(value)
|
||||
|
||||
func _on_fog_overlay_toggled(toggled_on: bool) -> void:
|
||||
UIEvents.toggle_fog_overlay.emit(toggled_on)
|
||||
|
||||
func _on_dust_toggled(toggled_on: bool) -> void:
|
||||
UIEvents.toggle_dust.emit(toggled_on)
|
||||
|
||||
func _on_blur_toggled(toggled_on: bool) -> void:
|
||||
UIEvents.toggle_blur.emit(toggled_on)
|
||||
|
||||
func _on_pause_toggled(toggled_on: bool) -> void:
|
||||
UIEvents.toggle_pause_daytime.emit(toggled_on)
|
||||
|
||||
func _on_shadows_toggled(toggled_on: bool) -> void:
|
||||
UIEvents.toggle_shadows.emit(toggled_on)
|
||||
|
||||
@@ -113,7 +113,7 @@ directional_shadow_fade_start = 0.9
|
||||
transform = Transform3D(1, 0, 0, 0, 0.99452555, -0.10449375, 0, 0.10449375, 0.99452555, 0.48949432, 25.39013, 0)
|
||||
script = ExtResource("7_p2t1d")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1335123628]
|
||||
[node name="Terrain" type="MeshInstance3D" parent="." unique_id=1335123628]
|
||||
material_override = SubResource("StandardMaterial3D_p2t1d")
|
||||
mesh = SubResource("BoxMesh_p2t1d")
|
||||
|
||||
@@ -192,24 +192,98 @@ text = "Storm"
|
||||
[node name="DayTimeLabel" type="Label" parent="Control" unique_id=1673596218]
|
||||
layout_mode = 0
|
||||
offset_left = 26.0
|
||||
offset_top = 142.0
|
||||
offset_top = 150.0
|
||||
offset_right = 135.0
|
||||
offset_bottom = 165.0
|
||||
offset_bottom = 173.0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
text = "Day Time"
|
||||
|
||||
[node name="DayTimeSlider" type="HSlider" parent="Control" unique_id=530788076]
|
||||
layout_mode = 0
|
||||
offset_left = 26.0
|
||||
offset_top = 165.0
|
||||
offset_top = 174.0
|
||||
offset_right = 205.0
|
||||
offset_bottom = 181.0
|
||||
offset_bottom = 190.0
|
||||
max_value = 1.0
|
||||
step = 0.01
|
||||
|
||||
[node name="FogOverlay" type="CheckButton" parent="Control" unique_id=1209829342]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 222.0
|
||||
offset_right = 160.0
|
||||
offset_bottom = 253.0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_focus_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1)
|
||||
button_pressed = true
|
||||
text = "Fog Overlay"
|
||||
|
||||
[node name="Dust" type="CheckButton" parent="Control" unique_id=2023312048]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 250.0
|
||||
offset_right = 150.0
|
||||
offset_bottom = 281.0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_focus_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1)
|
||||
button_pressed = true
|
||||
text = "Dust"
|
||||
|
||||
[node name="Blur" type="CheckButton" parent="Control" unique_id=1758807681]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 278.0
|
||||
offset_right = 150.0
|
||||
offset_bottom = 309.0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_focus_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1)
|
||||
button_pressed = true
|
||||
text = "Blur"
|
||||
|
||||
[node name="Pause" type="CheckButton" parent="Control" unique_id=156986934]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 189.0
|
||||
offset_right = 158.0
|
||||
offset_bottom = 220.0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_focus_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1)
|
||||
text = "Pause Time"
|
||||
|
||||
[node name="Shadows" type="CheckButton" parent="Control" unique_id=1751516495]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 302.0
|
||||
offset_right = 150.0
|
||||
offset_bottom = 333.0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_focus_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_pressed_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_color = Color(0, 0, 0, 1)
|
||||
theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1)
|
||||
button_pressed = true
|
||||
text = "Shadows"
|
||||
|
||||
[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"]
|
||||
[connection signal="toggled" from="Control/Fireflies" to="Control" method="_on_fireflies_toggled"]
|
||||
[connection signal="toggled" from="Control/Storm" to="Control" method="_on_storm_toggled"]
|
||||
[connection signal="value_changed" from="Control/DayTimeSlider" to="Control" method="_on_day_time_slider_value_changed"]
|
||||
[connection signal="toggled" from="Control/FogOverlay" to="Control" method="_on_fog_overlay_toggled"]
|
||||
[connection signal="toggled" from="Control/Dust" to="Control" method="_on_dust_toggled"]
|
||||
[connection signal="toggled" from="Control/Blur" to="Control" method="_on_blur_toggled"]
|
||||
[connection signal="toggled" from="Control/Pause" to="Control" method="_on_pause_toggled"]
|
||||
[connection signal="toggled" from="Control/Shadows" to="Control" method="_on_shadows_toggled"]
|
||||
|
||||
Reference in New Issue
Block a user