2021-07-26 12:10:58 +02:00
|
|
|
#version 330 core
|
|
|
|
|
2023-02-19 16:47:55 +01:00
|
|
|
out vec4 fragColor;
|
2021-07-26 12:10:58 +02:00
|
|
|
|
|
|
|
in vec2 texCoord;
|
|
|
|
|
2021-07-28 09:40:04 +02:00
|
|
|
uniform sampler2D transmittance_lut;
|
2021-08-19 12:50:01 +02:00
|
|
|
uniform float fg_SunZenithCosTheta;
|
|
|
|
uniform float fg_CameraDistanceToEarthCenter;
|
|
|
|
|
2023-02-19 16:47:55 +01:00
|
|
|
const float PI = 3.14159265358979323846;
|
|
|
|
const int SKY_STEPS = 32;
|
2021-07-26 12:10:58 +02:00
|
|
|
|
2023-02-19 16:47:55 +01:00
|
|
|
// atmos-include.frag
|
|
|
|
vec4 compute_inscattering(in vec3 ray_origin,
|
|
|
|
in vec3 ray_dir,
|
|
|
|
in float t_max,
|
|
|
|
in vec3 sun_dir,
|
|
|
|
in int steps,
|
|
|
|
in sampler2D transmittance_lut,
|
|
|
|
out vec4 transmittance);
|
2021-07-26 12:10:58 +02:00
|
|
|
|
|
|
|
void main()
|
|
|
|
{
|
2023-02-19 16:47:55 +01:00
|
|
|
// Always leave the Sun right in the middle of the sky texture.
|
|
|
|
// The skydome model implemented in SimGear already takes care of rotating
|
|
|
|
// the Sun for us.
|
|
|
|
vec3 sun_dir = vec3(
|
|
|
|
-sqrt(1.0 - fg_SunZenithCosTheta*fg_SunZenithCosTheta),
|
|
|
|
0.0,
|
|
|
|
fg_SunZenithCosTheta);
|
2021-07-26 12:10:58 +02:00
|
|
|
|
|
|
|
float azimuth = 2.0 * PI * texCoord.x; // [0, 2pi]
|
|
|
|
// Apply a non-linear transformation to the elevation to dedicate more
|
2023-02-19 16:47:55 +01:00
|
|
|
// texels to the horizon, where having more detail matters.
|
2021-07-26 12:10:58 +02:00
|
|
|
float l = texCoord.y * 2.0 - 1.0;
|
|
|
|
float elev = l*l * sign(l) * PI * 0.5; // [-pi/2, pi/2]
|
2021-07-28 09:40:04 +02:00
|
|
|
|
2023-02-19 16:47:55 +01:00
|
|
|
vec3 ray_dir = vec3(cos(elev) * cos(azimuth),
|
|
|
|
cos(elev) * sin(azimuth),
|
|
|
|
sin(elev));
|
2021-07-28 09:40:04 +02:00
|
|
|
|
2023-02-19 16:47:55 +01:00
|
|
|
vec3 ray_origin = vec3(0.0, 0.0, fg_CameraDistanceToEarthCenter);
|
2021-07-28 09:40:04 +02:00
|
|
|
|
2023-02-19 16:47:55 +01:00
|
|
|
vec4 transmittance;
|
|
|
|
vec4 L = compute_inscattering(ray_origin,
|
|
|
|
ray_dir,
|
|
|
|
1e7,
|
|
|
|
sun_dir,
|
|
|
|
SKY_STEPS,
|
|
|
|
transmittance_lut,
|
|
|
|
transmittance);
|
2021-07-28 09:40:04 +02:00
|
|
|
fragColor = L;
|
2021-07-26 12:10:58 +02:00
|
|
|
}
|