add moon
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user