new sky and greybox materials
This commit is contained in:
105
assets/sky/GodotSkies/shader/main.gdshader
Normal file
105
assets/sky/GodotSkies/shader/main.gdshader
Normal file
@@ -0,0 +1,105 @@
|
||||
shader_type sky;
|
||||
|
||||
group_uniforms Sky;
|
||||
uniform vec4 sky_day : source_color = vec4(0.0,0.3,0.7,1.0);
|
||||
uniform vec4 horizon_day : source_color = vec4(0.75,0.85,0.85,1.0);
|
||||
uniform vec4 horizon_sunset : source_color = vec4(0.9,0.4,0.1,1.0);
|
||||
uniform vec4 sky_sunset : source_color = vec4(0.15, 0.2, 0.4, 1.0);
|
||||
uniform vec4 horizon_night : source_color = vec4(0.1, 0.15, 0.2, 1.0);
|
||||
uniform vec4 sky_night : source_color = vec4(0.05, 0.10, 0.15, 1.0);
|
||||
uniform float day_night_mix : hint_range(-1.0, 1.0, 0.1) = 0.8;
|
||||
uniform bool use_directional_light = true;
|
||||
uniform float horizon_exponent = 2.0;
|
||||
uniform float sunset_amount_exponent = 0.7;
|
||||
uniform float night_amount_exponent = 4.0;
|
||||
|
||||
group_uniforms Clouds;
|
||||
uniform sampler2D cloud_tex_01;
|
||||
uniform sampler2D cloud_tex_02;
|
||||
uniform vec4 cloud_color : source_color = vec4(0.8, 0.8, 0.8, 1.0);
|
||||
uniform vec2 cloud_tiling = vec2(1.0);
|
||||
uniform vec2 wind_speed = vec2(0.5);
|
||||
uniform float cloud_density : hint_range(0.0, 5.0, 0.1) = 0.7;
|
||||
uniform float cloud_depth = 2.0;
|
||||
uniform float cloud_shape_exponent = 2.0;
|
||||
uniform float cloud_occlude_exponent = 1.0;
|
||||
|
||||
group_uniforms Stars;
|
||||
uniform sampler2D night_noise_01;
|
||||
uniform sampler2D night_noise_02;
|
||||
|
||||
group_uniforms Sun;
|
||||
uniform float sun_scale = 0.05;
|
||||
uniform float sun_strength = 15.0;
|
||||
uniform vec4 sun_color : source_color = vec4(1.0,0.9,0.0,1.0);
|
||||
|
||||
float plane_intersection(vec3 origin, vec3 normal, vec3 ray_start, vec3 ray_dir) {
|
||||
return dot(origin - ray_start, normal) / dot(ray_dir, normal);
|
||||
}
|
||||
|
||||
float get_cloud_height(sampler2D tex, vec2 uv) {
|
||||
float height = texture(tex, uv).r;
|
||||
height = clamp((height - (1.0 - cloud_density)) / (cloud_density), 0.0, 1.0);
|
||||
return pow(height, cloud_shape_exponent);
|
||||
}
|
||||
|
||||
void sky() {
|
||||
float t = plane_intersection(vec3(0.0, 1.0, 0.0), vec3(0.0, -1.0, 0.0), vec3(0.0), EYEDIR);
|
||||
|
||||
float blend = day_night_mix;
|
||||
if(use_directional_light){
|
||||
blend = LIGHT0_DIRECTION.y;
|
||||
}
|
||||
|
||||
vec3 sky = vec3(0.0);
|
||||
vec3 horizon_color = vec3(0.0);
|
||||
vec3 sky_color = vec3(0.0);
|
||||
|
||||
float cloud_value = 0.0;
|
||||
if(t >= 0.0){
|
||||
vec3 wind = vec3(wind_speed.x, 0.0, wind_speed.y) * TIME * 0.1;
|
||||
vec3 tiling = vec3(cloud_tiling.x, 1.0, cloud_tiling.y) * 0.2;
|
||||
vec3 cloud_pos1 = EYEDIR * t * tiling + wind;
|
||||
vec3 cloud_pos2 = EYEDIR * t * tiling + (wind*0.5);
|
||||
|
||||
float height1 = get_cloud_height(cloud_tex_01, cloud_pos1.xz);
|
||||
float height2 = get_cloud_height(cloud_tex_02, cloud_pos2.xz);
|
||||
cloud_pos1 += EYEDIR * height1 * cloud_depth * 0.1;
|
||||
cloud_pos2 += EYEDIR * height2 * cloud_depth * 0.1;
|
||||
height1 = get_cloud_height(cloud_tex_01,cloud_pos1.xz);
|
||||
height2 = get_cloud_height(cloud_tex_02,cloud_pos2.xz);
|
||||
cloud_value = min(height1, height1 * height2);
|
||||
|
||||
cloud_value *= smoothstep(0.0, 0.2, EYEDIR.y);
|
||||
}
|
||||
|
||||
float sun_distance = clamp(1.0 - distance(EYEDIR, LIGHT0_DIRECTION) - pow(cloud_value,cloud_occlude_exponent),0.0,1.0);
|
||||
float sun_disc = clamp(smoothstep(1.0 - sun_scale, 1.0, sun_distance), 0.0, 1.0);
|
||||
float sun_glow = clamp(0.0, 1.0, (pow(sun_distance, 4.0)*0.07));
|
||||
vec3 sun = mix(vec3(0.0), sun_color.rgb * sun_strength, max(sun_disc, sun_glow));
|
||||
|
||||
float night_noise = texture(night_noise_02, (EYEDIR / ((1.0 - abs(t) * 0.05))).xz).r;
|
||||
float stars = smoothstep(0.9, .95, texture(night_noise_01, (EYEDIR / ((1.0 - abs(t) * 0.05))).xz).r);
|
||||
float night_blend = clamp(0.0,1.0,0.0 - blend);
|
||||
stars = clamp(clamp((stars - cloud_value * 2.0), 0.0, 1.0) * night_blend, 0.0, 1.0) + (night_noise*0.01);
|
||||
|
||||
horizon_color = mix(horizon_sunset, horizon_day, clamp(blend,0.0,1.0)).rgb;
|
||||
horizon_color = mix(horizon_night.rgb, horizon_color, pow(clamp(1.0+blend,0.0,1.0), 4.0)).rgb;
|
||||
|
||||
vec3 sky_night_mix = sky_night.rgb * (night_noise * 0.5 + 0.5);
|
||||
sky_color = mix(sky_sunset, sky_day, clamp(blend,0.0,1.0)).rgb;
|
||||
sky_color = mix(sky_night_mix, sky_color, clamp(pow(1.0+blend, 4.0),0.0,1.0)).rgb;
|
||||
|
||||
sky = mix(sky_color, horizon_color, pow(1.0 - abs(EYEDIR.y), horizon_exponent));
|
||||
sky = mix(sky, cloud_color.rgb * 1.0, pow(cloud_value, 0.8));
|
||||
|
||||
|
||||
sky += stars * 1.0;
|
||||
|
||||
sky = mix(sky, mix(sky_color * 0.5, horizon_color, EYEDIR.y + 1.0).rgb, clamp(pow(1.0 - EYEDIR.y, 2.0), 0.0, 1.0));
|
||||
if(use_directional_light) {
|
||||
sky += sun * clamp(pow(EYEDIR.y + 1.0, 16.0),0.0,1.0);
|
||||
}
|
||||
|
||||
COLOR = sky;
|
||||
}
|
||||
1
assets/sky/GodotSkies/shader/main.gdshader.uid
Normal file
1
assets/sky/GodotSkies/shader/main.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://kgjsu8n7pyom
|
||||
@@ -0,0 +1 @@
|
||||
uid://bwmexekdtkvpm
|
||||
Reference in New Issue
Block a user