Skip to content

Commit 453eda7

Browse files
refactor: update the sky shaders
1 parent 0598929 commit 453eda7

File tree

4 files changed

+145
-21
lines changed

4 files changed

+145
-21
lines changed

.reuse/dep5

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@ Copyright: 2023-present Hugo Locurcio and contributors
2424
License: MIT
2525
Source: https://github.com/godot-extended-libraries/godot-debug-menu
2626

27-
Files: addons/gpsx/*
28-
Copyright: 2021 Uneven Prankster
29-
License: MIT
30-
Source: https://github.com/GithubPrankster/gpsx
31-
3227
Files: addons/goat/*
3328
Copyright: 2019-2020 Miskatonic Studio
3429
License: MIT
@@ -156,9 +151,13 @@ Copyright: 2010 qubodup
156151
License: CC0-1.0
157152
Source: https://opengameart.org/content/door-open-door-close-set
158153

159-
160154
# Shaders
161155

156+
Files: shaders/panoramic_textured_sky_with_clouds.gdshader
157+
Copyright: 2023 Gyrth
158+
License: CC0-1.0
159+
Source: https://godotshaders.com/shader/panoramic-textured-sky-with-clouds/
160+
162161
Files: shaders/psx_model.gdshader
163162
Copyright: 2023 Grau
164163
License: CC0-1.0

plug.gd

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@ func _plugging():
1111
"include": ["addons/goat/images"]
1212
}
1313
)
14-
plug("GithubPrankster/gpsx", {
15-
"commit": "64b1c5f83daa4df3c714a65a8fd2f1294575dce3",
16-
"install_root": "addons/gpsx",
17-
"include": ["example/materials/shaders"]
18-
}
19-
)
2014
plug("samclee/EZ-Sfx-and-Music", {"commit": "ac2b77c0336ff6edf6b26aa9342628d2ad63f359"})
2115
plug("HolonProduction/godot_kanban_tasks", {
2216
"commit": "cfc914caa1dabd085024ff196bcb8578eaee1e67",

resources/fog_env.tres

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,36 @@
1-
[gd_resource type="Environment" load_steps=5 format=3 uid="uid://dtgnbg8pmfbjy"]
1+
[gd_resource type="Environment" load_steps=7 format=3 uid="uid://dtgnbg8pmfbjy"]
22

3-
[ext_resource type="Shader" path="res://addons/gpsx/example/materials/shaders/misc/gpsx_sky.gdshader" id="1_g6wkn"]
4-
[ext_resource type="Texture2D" uid="uid://dxmmrih8af3qb" path="res://assets/textures/nightsky.hdr" id="2_6xap7"]
3+
[ext_resource type="Shader" path="res://shaders/panoramic_textured_sky_with_clouds.gdshader" id="1_akepw"]
4+
[ext_resource type="Texture2D" uid="uid://dxmmrih8af3qb" path="res://assets/textures/nightsky.hdr" id="2_711um"]
5+
6+
[sub_resource type="FastNoiseLite" id="FastNoiseLite_vqi2a"]
7+
noise_type = 4
8+
frequency = 0.05
9+
fractal_type = 3
10+
fractal_gain = 0.0
11+
12+
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_l5wex"]
13+
width = 128
14+
height = 128
15+
generate_mipmaps = false
16+
seamless = true
17+
noise = SubResource("FastNoiseLite_vqi2a")
518

619
[sub_resource type="ShaderMaterial" id="ShaderMaterial_mvojt"]
7-
shader = ExtResource("1_g6wkn")
8-
shader_parameter/mixer = Color(0.290196, 0.282353, 1, 1)
9-
shader_parameter/tex = ExtResource("2_6xap7")
10-
shader_parameter/dithering = true
11-
shader_parameter/banding = true
20+
shader = ExtResource("1_akepw")
21+
shader_parameter/add_clouds = true
22+
shader_parameter/clouds_below = false
23+
shader_parameter/cloud_scale = 0.25
24+
shader_parameter/speed = 0.002
25+
shader_parameter/cloud_dark = 0.5
26+
shader_parameter/cloud_light = 0.3
27+
shader_parameter/cloud_cover = 0.2
28+
shader_parameter/cloud_alpha = 8.0
29+
shader_parameter/sky_tint = 0.5
30+
shader_parameter/height_offset = 0.0
31+
shader_parameter/sky_contribution = 0.5
32+
shader_parameter/source_panorama = ExtResource("2_711um")
33+
shader_parameter/noise_texture = SubResource("NoiseTexture2D_l5wex")
1234

1335
[sub_resource type="Sky" id="Sky_85p4l"]
1436
sky_material = SubResource("ShaderMaterial_mvojt")
@@ -19,11 +41,11 @@ sky = SubResource("Sky_85p4l")
1941
ambient_light_source = 3
2042
ambient_light_color = Color(0.388235, 0, 0.392157, 1)
2143
ambient_light_energy = 16.0
22-
tonemap_mode = 2
2344
glow_intensity = 2.0
2445
glow_bloom = 1.0
2546
fog_enabled = true
2647
fog_light_color = Color(0.0117647, 0, 0.239216, 1)
2748
fog_light_energy = 0.5
49+
fog_sky_affect = 0.75
2850
volumetric_fog_emission = Color(0.0352941, 0.0352941, 0.0352941, 1)
2951
volumetric_fog_sky_affect = 0.3
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
shader_type sky;
2+
3+
render_mode use_half_res_pass;
4+
5+
uniform sampler2D source_panorama : filter_linear,
6+
source_color,
7+
hint_default_black;
8+
uniform bool add_clouds = true;
9+
uniform bool clouds_below = false;
10+
uniform float cloud_scale : hint_range(0.0, 1.0, 0.01) = 0.25;
11+
uniform float speed : hint_range(0.0, 0.25, 0.001) = 0.002;
12+
uniform float cloud_dark : hint_range(0.0, 1.0, 0.01) = 0.5;
13+
uniform float cloud_light : hint_range(0.0, 1.0, 0.01) = 0.3;
14+
uniform float cloud_cover : hint_range(0.0, 1.0, 0.01) = 0.2;
15+
uniform float cloud_alpha : hint_range(0.0, 10.0, 0.01) = 8.0;
16+
uniform float sky_tint : hint_range(0.0, 1.0, 0.001) = 0.5;
17+
uniform float height_offset : hint_range(0.0, 1.0, 0.001) = 0.2;
18+
uniform float sky_contribution : hint_range(0.0, 1.0, 0.1) = 0.5;
19+
uniform sampler2D noise_texture : filter_linear,
20+
source_color,
21+
hint_default_black;
22+
23+
const mat2 m = mat2(vec2(1.6, 1.2), vec2(-1.2, 1.6));
24+
25+
vec2 hash(vec2 p) {
26+
p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3)));
27+
return -1.0 + 2.0 * fract(sin(p) * 43758.5453123);
28+
}
29+
30+
float noise(in vec2 p) { return texture(noise_texture, p).r; }
31+
32+
float fbm(vec2 n) {
33+
float total = 0.0, amplitude = 0.1;
34+
total += noise(n) * amplitude;
35+
n = m * n;
36+
amplitude *= 0.4;
37+
return total;
38+
}
39+
40+
void sky() {
41+
COLOR = texture(source_panorama, SKY_COORDS).rgb;
42+
if (AT_CUBEMAP_PASS) {
43+
COLOR *= sky_contribution;
44+
} else if (add_clouds) {
45+
vec3 normal = normalize(EYEDIR);
46+
vec3 plane_intersect = normal / (normal.y + height_offset);
47+
48+
if (clouds_below) {
49+
plane_intersect = normal / -(normal.y - height_offset);
50+
}
51+
52+
vec2 p = plane_intersect.xz;
53+
p.y *= -1.0;
54+
vec2 uv = p;
55+
56+
float time = TIME * speed;
57+
float q = fbm(uv * cloud_scale * 0.5);
58+
59+
// ridged noise shape
60+
float r = 0.0;
61+
uv *= cloud_scale;
62+
uv -= q - time;
63+
float weight = 0.8;
64+
r += abs(weight * noise(uv));
65+
uv = m * uv + time;
66+
weight *= 0.7;
67+
68+
// noise shape
69+
float f = 0.0;
70+
uv = p;
71+
uv *= cloud_scale;
72+
uv -= q - time;
73+
weight = 0.7;
74+
f += weight * noise(uv);
75+
uv = m * uv + time;
76+
weight *= 0.6;
77+
78+
f *= r + f;
79+
80+
// noise colour
81+
float c = 0.0;
82+
time = TIME * speed * 2.0;
83+
uv = p;
84+
uv *= cloud_scale * 2.0;
85+
uv -= q - time;
86+
weight = 0.4;
87+
c += weight * noise(uv);
88+
uv = m * uv + time;
89+
weight *= 0.6;
90+
91+
vec3 skycolour = COLOR;
92+
vec3 cloudcolour =
93+
vec3(1.1, 1.1, 0.9) * clamp((cloud_dark + cloud_light * c), 0.0, 1.0);
94+
float horizon_fall_off = max(normal.y, 0.0);
95+
96+
if (clouds_below) {
97+
horizon_fall_off = max(-normal.y, 0.0);
98+
}
99+
100+
f = cloud_cover + cloud_alpha * f * r;
101+
102+
vec3 result =
103+
mix(skycolour, clamp(sky_tint * skycolour + cloudcolour, 0.0, 1.0),
104+
clamp(f + c, 0.0, 1.0) * horizon_fall_off);
105+
106+
// Convert the color to black and white.
107+
COLOR = vec3((result.r + result.g + result.b) / 3.0);
108+
}
109+
}

0 commit comments

Comments
 (0)