This commit is contained in:
Overside srl
2026-02-17 17:15:13 +01:00
parent c7d2ae14b3
commit 8b2ea22f0c
6 changed files with 99 additions and 41 deletions

View File

@@ -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;
}
"""
@@ -255,6 +272,11 @@ func _update_sky_material() -> void:
_sky_material.set_shader_parameter("dawn_dusk_enabled", dawn_dusk_enabled and effects_enabled)
_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:
@@ -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)