add moon
This commit is contained in:
@@ -197,6 +197,18 @@ colors = PackedColorArray(0.05, 0.06, 0.1, 1, 0.6, 0.65, 0.75, 1, 0.7, 0.75, 0.8
|
||||
_data = [Vector2(0, 0.02), 0.0, 0.0, 0, 0, Vector2(0.25, 0.015), 0.0, 0.0, 0, 0, Vector2(0.5, 0.01), 0.0, 0.0, 0, 0, Vector2(0.75, 0.015), 0.0, 0.0, 0, 0, Vector2(1, 0.02), 0.0, 0.0, 0, 0]
|
||||
point_count = 5
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_2w5ig"]
|
||||
offsets = PackedFloat32Array(0, 0.2, 0.3, 0.5, 0.75, 0.85, 1)
|
||||
colors = PackedColorArray(0.01, 0.01, 0.04, 1, 0.01, 0.01, 0.04, 1, 0.18, 0.35, 0.8, 1, 0.15, 0.35, 0.82, 1, 0.12, 0.15, 0.4, 1, 0.02, 0.02, 0.06, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_cnx2n"]
|
||||
offsets = PackedFloat32Array(0, 0.2, 0.25, 0.35, 0.5, 0.75, 0.85, 1)
|
||||
colors = PackedColorArray(0.03, 0.04, 0.08, 1, 0.03, 0.04, 0.08, 1, 0.85, 0.55, 0.45, 1, 0.45, 0.6, 0.85, 1, 0.5, 0.65, 0.88, 1, 0.95, 0.45, 0.25, 1, 0.06, 0.06, 0.1, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_djhca"]
|
||||
offsets = PackedFloat32Array(0, 0.2, 0.3, 0.5, 0.75, 0.85, 1)
|
||||
colors = PackedColorArray(0.02, 0.02, 0.05, 1, 0.02, 0.02, 0.05, 1, 0.35, 0.45, 0.55, 1, 0.35, 0.45, 0.55, 1, 0.3, 0.2, 0.2, 1, 0.03, 0.03, 0.06, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="Curve" id="Curve_ta3fj"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.2, 0.8), 0.0, 0.0, 0, 0, Vector2(0.3, 0), 0.0, 0.0, 0, 0, Vector2(0.7, 0), 0.0, 0.0, 0, 0, Vector2(0.85, 0.8), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||
point_count = 6
|
||||
@@ -310,7 +322,7 @@ flow_speed = 0.015
|
||||
|
||||
[sub_resource type="Compositor" id="Compositor_ssi15"]
|
||||
|
||||
[node name="DynamicSky" type="Node3D" unique_id=516593260 node_paths=PackedStringArray("preset_library", "day_night_controller", "weather_controller", "cloud_system", "post_process_controller", "vfx_controller", "shadow_proxy_system", "world_environment", "sun_light", "moon_light")]
|
||||
[node name="DynamicSky" type="Node3D" unique_id=516593260 node_paths=PackedStringArray("preset_library", "day_night_controller", "weather_controller", "cloud_system", "post_process_controller", "vfx_controller", "shadow_proxy_system", "weather_vfx", "world_environment", "sun_light", "moon_light")]
|
||||
script = ExtResource("1_dynamic_sky")
|
||||
preset_library = NodePath("PresetLibrary")
|
||||
day_night_controller = NodePath("DayNightController")
|
||||
@@ -319,6 +331,7 @@ cloud_system = NodePath("CloudSystem")
|
||||
post_process_controller = NodePath("PostProcessController")
|
||||
vfx_controller = NodePath("VFXController")
|
||||
shadow_proxy_system = NodePath("ShadowProxySystem")
|
||||
weather_vfx = NodePath("WeatherVFX")
|
||||
world_environment = NodePath("WorldEnvironment")
|
||||
sun_light = NodePath("SunLight")
|
||||
moon_light = NodePath("MoonLight")
|
||||
@@ -331,7 +344,7 @@ presets = Array[ExtResource("3_c6jpa")]([SubResource("Resource_ajt3x"), SubResou
|
||||
|
||||
[node name="DayNightController" type="Node" parent="." unique_id=1083149574]
|
||||
script = ExtResource("3_day_night")
|
||||
time_of_day = 0.3159409316050229
|
||||
time_of_day = 0.6330777230246745
|
||||
current_day = 4
|
||||
sun_color_curve = SubResource("Gradient_sxvon")
|
||||
sun_intensity_curve = SubResource("Curve_fm80q")
|
||||
@@ -341,6 +354,9 @@ ambient_color_curve = SubResource("Gradient_bq8yq")
|
||||
ambient_intensity_curve = SubResource("Curve_x6xf2")
|
||||
fog_color_curve = SubResource("Gradient_tn5up")
|
||||
fog_density_curve = SubResource("Curve_ej5u1")
|
||||
sky_top_color_curve = SubResource("Gradient_2w5ig")
|
||||
sky_horizon_color_curve = SubResource("Gradient_cnx2n")
|
||||
sky_bottom_color_curve = SubResource("Gradient_djhca")
|
||||
stars_visibility_curve = SubResource("Curve_ta3fj")
|
||||
|
||||
[node name="WeatherController" type="Node" parent="." unique_id=1440281936]
|
||||
@@ -353,10 +369,11 @@ script = ExtResource("5_clouds")
|
||||
layer_configs = Array[ExtResource("4_ssi15")]([SubResource("Resource_xh4oc"), SubResource("Resource_ahi10"), SubResource("Resource_a5xai"), SubResource("Resource_uxs4q")])
|
||||
global_coverage = 0.2
|
||||
global_wind_speed = 0.5
|
||||
sun_direction = Vector3(0.9038672, 0.39738584, 0.15845723)
|
||||
sun_color = Color(1, 0.63184845, 0.471403, 1)
|
||||
sun_intensity = 0.80360174
|
||||
moon_direction = Vector3(0.91050637, -0.40030476, -0.10360649)
|
||||
sun_direction = Vector3(-0.71683276, 0.6476549, 0.25825176)
|
||||
sun_color = Color(1, 0.95, 0.85, 1)
|
||||
sun_intensity = 1.2
|
||||
moon_direction = Vector3(-0.7310799, -0.6605271, -0.17095698)
|
||||
moon_color = Color(0.8, 0.85, 1, 1)
|
||||
moon_intensity = 0.0
|
||||
|
||||
[node name="PostProcessController" type="Node" parent="." unique_id=186747041]
|
||||
@@ -367,11 +384,11 @@ sky_top_color = Color(0.2, 0.4, 0.85, 1)
|
||||
sky_horizon_color = Color(0.6, 0.75, 0.95, 1)
|
||||
sky_bottom_color = Color(0.5, 0.6, 0.7, 1)
|
||||
skybox_texture = ExtResource("6_ssi15")
|
||||
fog_color = Color(0.25821814, 0.28612906, 0.371403, 1)
|
||||
fog_density = 0.014140322
|
||||
sun_glow_intensity = 0.40180087
|
||||
sun_glow_color = Color(1, 0.63184845, 0.471403, 1)
|
||||
sun_direction = Vector3(0.9038672, 0.39738584, 0.15845723)
|
||||
fog_color = Color(0.7, 0.64355034, 0.6637131, 1)
|
||||
fog_density = 0.012741526
|
||||
sun_glow_intensity = 0.3
|
||||
sun_glow_color = Color(1, 0.95, 0.85, 1)
|
||||
sun_direction = Vector3(-0.71683276, 0.6476549, 0.25825176)
|
||||
|
||||
[node name="VFXController" type="Node3D" parent="." unique_id=207251300]
|
||||
script = ExtResource("7_vfx")
|
||||
@@ -386,13 +403,14 @@ environment = ExtResource("13_2w5ig")
|
||||
compositor = SubResource("Compositor_ssi15")
|
||||
|
||||
[node name="SunLight" type="DirectionalLight3D" parent="." unique_id=1278065589]
|
||||
transform = Transform3D(0.17267685, -0.9848151, 0.017930198, 0, 0.018203637, 0.99983454, -0.98497826, -0.17264825, 0.0031433487, 0, 50, 0)
|
||||
light_color = Color(1, 0.63184845, 0.471403, 1)
|
||||
light_energy = 0.80360174
|
||||
transform = Transform3D(0.33894238, 0.9407005, -0.014151112, 0, 0.015041453, 0.9998871, 0.9408068, -0.33890405, 0.0050981897, 0, 50, 0)
|
||||
light_color = Color(1, 0.84032553, 0.65726346, 1)
|
||||
light_energy = 0.58916044
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="MoonLight" type="DirectionalLight3D" parent="." unique_id=52072807]
|
||||
transform = Transform3D(-0.11306036, -0.9934189, 0.018351724, 0, 0.018470151, 0.99982965, -0.9935881, 0.11304111, -0.0020882422, 0, 50, 0)
|
||||
transform = Transform3D(-0.22769909, 0.9736189, -0.014815218, 0, 0.015214887, 0.9998845, 0.9737314, 0.22767279, -0.0034644168, 0, 50, 0)
|
||||
visible = false
|
||||
light_color = Color(0.7, 0.8, 1, 1)
|
||||
light_energy = 0.0
|
||||
light_indirect_energy = 1.979
|
||||
|
||||
@@ -110,7 +110,7 @@ shader_parameter/sky_bottom_color = Color(0.5, 0.6, 0.7, 1)
|
||||
shader_parameter/gradient_intensity = 1.0
|
||||
shader_parameter/horizon_blend = 0.5
|
||||
shader_parameter/sun_glow_enabled = true
|
||||
shader_parameter/sun_direction = Vector3(-0.92782164, 0.34649342, 0.13816392)
|
||||
shader_parameter/sun_direction = Vector3(-0.71683276, 0.6476549, 0.25825176)
|
||||
shader_parameter/sun_glow_color = Color(1, 0.95, 0.85, 1)
|
||||
shader_parameter/sun_glow_intensity = 0.3
|
||||
shader_parameter/sun_glow_size = 0.2
|
||||
@@ -128,9 +128,9 @@ sky_material = SubResource("ShaderMaterial_jmmec")
|
||||
[resource]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_ssi15")
|
||||
ambient_light_color = Color(0.5, 0.6, 0.8, 1)
|
||||
ambient_light_energy = 0.6
|
||||
ambient_light_color = Color(0.5733876, 0.5701628, 0.64355034, 1)
|
||||
ambient_light_energy = 0.52610695
|
||||
fog_enabled = true
|
||||
fog_light_color = Color(0.7, 0.8, 0.95, 1)
|
||||
fog_density = 0.005
|
||||
fog_light_color = Color(0.7, 0.64355034, 0.6637131, 1)
|
||||
fog_density = 0.012741526
|
||||
fog_height_density = 0.1
|
||||
|
||||
@@ -9,8 +9,8 @@ extends Resource
|
||||
|
||||
@export_group("Moon Settings")
|
||||
@export var moon_color: Color = Color(0.8, 0.85, 1.0)
|
||||
@export var moon_intensity: float = 0.3
|
||||
@export var moon_size: float = 0.03
|
||||
@export var moon_intensity: float = 0.8
|
||||
@export var moon_size: float = 0.3
|
||||
|
||||
@export_group("Ambient Settings")
|
||||
@export var ambient_color: Color = Color(0.4, 0.5, 0.6)
|
||||
|
||||
@@ -21,6 +21,10 @@ signal preset_changed(preset: SkyPreset)
|
||||
@export var sun_light: DirectionalLight3D
|
||||
@export var moon_light: DirectionalLight3D
|
||||
|
||||
@export_group("Moon Visual")
|
||||
@export var moon_size: float = 0.045
|
||||
@export var moon_height: float = 45.0
|
||||
|
||||
@export_group("Global Settings")
|
||||
@export var auto_create_controllers: bool = true
|
||||
@export var deterministic_seed: int = 0:
|
||||
@@ -209,25 +213,17 @@ func _sync_sun_moon() -> void:
|
||||
var ambient_color: Color
|
||||
var ambient_energy: float
|
||||
|
||||
if _current_config:
|
||||
sun_color = _current_config.sun_color
|
||||
sun_energy = _current_config.sun_intensity
|
||||
moon_color = _current_config.moon_color
|
||||
moon_energy = _current_config.moon_intensity
|
||||
ambient_color = _current_config.ambient_color
|
||||
ambient_energy = _current_config.ambient_intensity
|
||||
else:
|
||||
sun_color = day_night_controller.get_sun_color()
|
||||
sun_energy = day_night_controller.get_sun_intensity()
|
||||
moon_color = day_night_controller.get_moon_color()
|
||||
moon_energy = day_night_controller.get_moon_intensity()
|
||||
ambient_color = day_night_controller.get_ambient_color()
|
||||
ambient_energy = day_night_controller.get_ambient_intensity()
|
||||
if weather_controller:
|
||||
var wp := weather_controller.get_current_profile()
|
||||
if wp:
|
||||
ambient_color *= wp.ambient_color_multiplier
|
||||
ambient_energy *= wp.ambient_intensity_multiplier
|
||||
sun_color = day_night_controller.get_sun_color()
|
||||
sun_energy = day_night_controller.get_sun_intensity()
|
||||
moon_color = day_night_controller.get_moon_color()
|
||||
moon_energy = day_night_controller.get_moon_intensity()
|
||||
ambient_color = day_night_controller.get_ambient_color()
|
||||
ambient_energy = day_night_controller.get_ambient_intensity()
|
||||
if weather_controller:
|
||||
var wp := weather_controller.get_current_profile()
|
||||
if wp:
|
||||
ambient_color *= wp.ambient_color_multiplier
|
||||
ambient_energy *= wp.ambient_intensity_multiplier
|
||||
|
||||
if sun_light:
|
||||
sun_light.look_at(global_position - sun_dir, Vector3.UP)
|
||||
@@ -342,6 +338,19 @@ func _sync_post_process() -> void:
|
||||
day_night_controller.get_sky_bottom_color()
|
||||
)
|
||||
|
||||
var moon_energy := day_night_controller.get_moon_intensity()
|
||||
var visual_intensity := moon_energy * 4.0
|
||||
var mh: float = moon_height if moon_height > 0.0 else 45.0
|
||||
var ms: float = moon_size if moon_size > 0.0 else 0.045
|
||||
var moon_angle := (day_night_controller.time_of_day + 0.25) * TAU
|
||||
var elevation := sin(moon_angle) * deg_to_rad(mh)
|
||||
var moon_visual_dir := Vector3(
|
||||
cos(moon_angle + PI),
|
||||
sin(elevation) * 2.0,
|
||||
sin(moon_angle) * 0.3
|
||||
).normalized()
|
||||
post_process_controller.set_moon(moon_visual_dir, Color.WHITE, visual_intensity, ms)
|
||||
|
||||
|
||||
func _apply_preset_assets(preset: SkyPreset) -> void:
|
||||
if preset == null:
|
||||
|
||||
@@ -54,6 +54,10 @@ extends Node
|
||||
|
||||
var _sky_material: ShaderMaterial
|
||||
var _post_process_quad: MeshInstance3D
|
||||
var _moon_direction: Vector3 = Vector3(0.0, -1.0, 0.0)
|
||||
var _moon_color: Color = Color(0.9, 0.92, 1.0)
|
||||
var _moon_intensity: float = 0.0
|
||||
var _moon_size: float = 0.03
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -155,6 +159,11 @@ uniform vec4 dawn_dusk_color : source_color = vec4(1.0, 0.6, 0.4, 1.0);
|
||||
uniform float dawn_dusk_intensity = 0.5;
|
||||
uniform float dawn_dusk_blend = 0.0;
|
||||
|
||||
uniform vec3 moon_direction = vec3(0.0, -1.0, 0.0);
|
||||
uniform vec4 moon_color : source_color = vec4(0.9, 0.92, 1.0, 1.0);
|
||||
uniform float moon_intensity = 0.0;
|
||||
uniform float moon_size = 0.03;
|
||||
|
||||
uniform float stars_visibility = 0.0;
|
||||
uniform vec4 stars_tint : source_color = vec4(1.0);
|
||||
|
||||
@@ -222,6 +231,14 @@ void sky() {
|
||||
color += stars_tint.rgb * star_value;
|
||||
}
|
||||
|
||||
if (moon_intensity > 0.0 && moon_direction.y > 0.0) {
|
||||
vec3 moon_dir = normalize(moon_direction);
|
||||
float moon_dot = dot(dir, moon_dir);
|
||||
float disc = smoothstep(1.0 - moon_size, 1.0 - moon_size * 0.6, moon_dot);
|
||||
float glow = pow(max(0.0, moon_dot), 32.0) * 0.15;
|
||||
color += moon_color.rgb * disc * moon_intensity + moon_color.rgb * glow * moon_intensity * 0.5;
|
||||
}
|
||||
|
||||
COLOR = color;
|
||||
}
|
||||
"""
|
||||
@@ -256,6 +273,11 @@ func _update_sky_material() -> void:
|
||||
_sky_material.set_shader_parameter("dawn_dusk_blend", dawn_dusk_blend)
|
||||
_sky_material.set_shader_parameter("dawn_dusk_intensity", dawn_dusk_intensity)
|
||||
|
||||
_sky_material.set_shader_parameter("moon_direction", _moon_direction)
|
||||
_sky_material.set_shader_parameter("moon_color", _moon_color)
|
||||
_sky_material.set_shader_parameter("moon_intensity", _moon_intensity)
|
||||
_sky_material.set_shader_parameter("moon_size", _moon_size)
|
||||
|
||||
|
||||
func set_sky_colors(top: Color, horizon: Color, bottom: Color) -> void:
|
||||
sky_top_color = top
|
||||
@@ -283,6 +305,14 @@ func set_dawn_dusk_blend(blend: float) -> void:
|
||||
_update_sky_material()
|
||||
|
||||
|
||||
func set_moon(direction: Vector3, color: Color, intensity: float, size: float = 0.03) -> void:
|
||||
_moon_direction = direction.normalized()
|
||||
_moon_color = color
|
||||
_moon_intensity = intensity
|
||||
_moon_size = size
|
||||
_update_sky_material()
|
||||
|
||||
|
||||
func set_stars_visibility(visibility: float, tint: Color = Color.WHITE) -> void:
|
||||
if _sky_material:
|
||||
_sky_material.set_shader_parameter("stars_visibility", visibility)
|
||||
|
||||
@@ -43,6 +43,7 @@ main_scene = ExtResource("2_7fone")
|
||||
|
||||
[node name="DynamicSky" parent="." unique_id=516593260 node_paths=PackedStringArray("weather_vfx") instance=ExtResource("3_7brvr")]
|
||||
weather_vfx = NodePath("WeatherVFX")
|
||||
moon_height = 45.0
|
||||
|
||||
[node name="TrackGenerator" type="Node3D" parent="." unique_id=1804102656]
|
||||
script = ExtResource("2_j07ug")
|
||||
|
||||
Reference in New Issue
Block a user