Celestial Shader

A quite simple sky shader I’ve made for my YT channel

Shader code
shader_type sky;

uniform sampler2D sky_texture;
uniform float power = 0.5;
uniform float scale = 0.5;
uniform float speed = 0.1;
uniform float density = 0.1;

uniform vec3 sky_color_a : source_color = vec3(0.5, 0.8, 1.0);
uniform vec3 sky_color_b : source_color = vec3(0.3, 0.5, 1.0);

uniform vec3 ground_color_a : source_color = vec3(1.0, 0.8, 0.5);
uniform vec3 ground_color_b : source_color = vec3(1.0, 0.5, 0.3);

vec3 do_ceil(vec3 eye) {
	return mix(sky_color_a, sky_color_b, eye.y);
}

vec3 do_floor(vec3 eye) {
	return mix(ground_color_a, ground_color_b, -eye.y);
}

void sky() {
	float fade = pow(abs(EYEDIR.y), power);
	vec3 clouds = texture(sky_texture, (EYEDIR.xz / EYEDIR.y) * scale + vec2(TIME * speed)).rgb * fade;
	vec3 sky_back = EYEDIR.y > 0.0 ? do_ceil(EYEDIR) : vec3(0.0);
	float dens = smoothstep(density, 1.0, clouds.r);
	
	COLOR = vec3(0.0);
	COLOR = EYEDIR.y > 0.0 ? mix(sky_back, clouds, dens) : COLOR;
	COLOR += EYEDIR.y < 0.0 ? do_floor(EYEDIR) : vec3(0.0);
}
Tags
clouds, simple, sky
The shader code and all code snippets in this post are under MIT license and can be used freely. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.

More from ProfesorShader

Related shaders

guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments