shader_type sky; uniform vec3 sky_top_color : source_color = vec3(0.27, 0.57, 0.74); uniform vec3 sky_horizon_color : source_color = vec3(0.79, 0.88, 0.82); uniform vec3 ground_bottom_color : source_color = vec3(0.12, 0.17, 0.12); uniform vec3 ground_horizon_color : source_color = vec3(0.56, 0.69, 0.57); uniform float daylight : hint_range(0.0, 1.0) = 1.0; float hash21(vec2 p) { return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453); } float noise(vec2 p) { vec2 i = floor(p); vec2 f = fract(p); f = f * f * (3.0 - 2.0 * f); return mix(mix(hash21(i), hash21(i + vec2(1.0, 0.0)), f.x), mix(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(1.0)), f.x), f.y); } void sky() { float height = max(EYEDIR.y, 0.0); vec3 sky_color = mix(sky_horizon_color, sky_top_color, pow(height, 0.48)); vec2 p = EYEDIR.xz / max(0.17, height) * 1.15; float cloud = noise(p) * 0.65 + noise(p * 2.1 + 7.3) * 0.25 + noise(p * 4.3) * 0.10; float mask = smoothstep(0.55, 0.64, cloud) * smoothstep(0.02, 0.20, height); vec3 cloud_shadow = mix(vec3(0.08, 0.10, 0.19), vec3(0.70, 0.80, 0.80), daylight); vec3 cloud_light = mix(vec3(0.15, 0.18, 0.29), vec3(1.0, 0.98, 0.87), daylight); vec3 cloud_color = mix(cloud_shadow, cloud_light, smoothstep(0.61, 0.77, cloud)); sky_color = mix(sky_color, cloud_color, mask); COLOR = EYEDIR.y >= 0.0 ? sky_color : mix(ground_horizon_color, ground_bottom_color, pow(-EYEDIR.y, 0.4)); }