Files
Trinittu/dynamic-sky/environment.tres
Overside srl b158a646c3 revert
2026-02-17 08:37:55 +01:00

137 lines
4.3 KiB
Plaintext

[gd_resource type="Environment" format=3 uid="uid://dq64sos14f8hu"]
[ext_resource type="Texture2D" uid="uid://crrj260kiyoy" path="res://dynamic-sky/sky_44_2k.png" id="1_vd8dq"]
[sub_resource type="Shader" id="Shader_porxs"]
code = "
shader_type sky;
uniform sampler2D skybox_texture : source_color, filter_linear_mipmap, repeat_enable;
uniform bool skybox_enabled = false;
uniform float skybox_blend = 1.0;
uniform vec4 sky_top_color : source_color = vec4(0.2, 0.4, 0.8, 1.0);
uniform vec4 sky_horizon_color : source_color = vec4(0.6, 0.7, 0.9, 1.0);
uniform vec4 sky_bottom_color : source_color = vec4(0.4, 0.5, 0.6, 1.0);
uniform float gradient_intensity = 1.0;
uniform float horizon_blend = 0.5;
uniform bool sun_glow_enabled = true;
uniform vec3 sun_direction = vec3(0.0, 1.0, 0.0);
uniform vec4 sun_glow_color : source_color = vec4(1.0, 0.95, 0.8, 1.0);
uniform float sun_glow_intensity = 0.5;
uniform float sun_glow_size = 0.2;
uniform float sun_glow_falloff = 2.0;
uniform bool dawn_dusk_enabled = true;
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 float stars_visibility = 0.0;
uniform vec4 stars_tint : source_color = vec4(1.0);
float hash(vec2 p) {
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453);
}
float stars(vec3 dir) {
vec2 uv = dir.xz / (abs(dir.y) + 0.001) * 50.0;
vec2 cell = floor(uv);
vec2 local = fract(uv) - 0.5;
float star = 0.0;
float h = hash(cell);
if (h > 0.97) {
float dist = length(local);
star = smoothstep(0.1, 0.0, dist) * (h - 0.97) / 0.03;
star *= step(0.0, dir.y);
}
return star;
}
vec2 pano_uv(vec3 dir) {
dir = normalize(dir);
float u = atan(dir.x, dir.z) / (2.0 * PI) + 0.5;
float v = acos(clamp(dir.y, -1.0, 1.0)) / PI;
return vec2(u, v);
}
void sky() {
vec3 dir = EYEDIR;
float y = dir.y;
vec3 color;
if (y > 0.0) {
float t = pow(y, horizon_blend);
color = mix(sky_horizon_color.rgb, sky_top_color.rgb, t);
} else {
float t = pow(-y, horizon_blend);
color = mix(sky_horizon_color.rgb, sky_bottom_color.rgb, t);
}
color = mix(vec3(0.5), color, gradient_intensity);
if (skybox_enabled) {
vec3 pano_color = texture(skybox_texture, pano_uv(dir)).rgb;
color = mix(color, pano_color, skybox_blend);
}
if (sun_glow_enabled && sun_direction.y > -0.2) {
float sun_dot = max(0.0, dot(dir, normalize(sun_direction)));
float glow = pow(sun_dot, 1.0 / max(0.001, sun_glow_size));
glow = pow(glow, sun_glow_falloff);
color += sun_glow_color.rgb * glow * sun_glow_intensity;
}
if (dawn_dusk_enabled && dawn_dusk_blend > 0.0) {
float horizon_factor = 1.0 - abs(y);
horizon_factor = pow(horizon_factor, 2.0);
color = mix(color, dawn_dusk_color.rgb, horizon_factor * dawn_dusk_intensity * dawn_dusk_blend);
}
if (stars_visibility > 0.0 && y > 0.0) {
float star_value = stars(dir) * stars_visibility;
color += stars_tint.rgb * star_value;
}
COLOR = color;
}
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jmmec"]
shader = SubResource("Shader_porxs")
shader_parameter/skybox_texture = ExtResource("1_vd8dq")
shader_parameter/skybox_enabled = true
shader_parameter/skybox_blend = 1.0
shader_parameter/sky_top_color = Color(0.2, 0.4, 0.85, 1)
shader_parameter/sky_horizon_color = Color(0.6, 0.75, 0.95, 1)
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.8560367, 0.48015037, 0.19145952)
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
shader_parameter/sun_glow_falloff = 2.0
shader_parameter/dawn_dusk_enabled = true
shader_parameter/dawn_dusk_color = Color(1, 0.6, 0.4, 1)
shader_parameter/dawn_dusk_intensity = 0.5
shader_parameter/dawn_dusk_blend = 0.0
shader_parameter/stars_visibility = 0.0
shader_parameter/stars_tint = Color(1, 1, 1, 1)
[sub_resource type="Sky" id="Sky_ssi15"]
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
fog_enabled = true
fog_light_color = Color(0.7, 0.8, 0.95, 1)
fog_density = 0.005
fog_height_density = 0.1