38 lines
959 B
GLSL
38 lines
959 B
GLSL
#version 450
|
|
#extension GL_GOOGLE_include_directive : enable
|
|
|
|
#include "lib/common.glsl"
|
|
#include "lib/lighting.glsl"
|
|
#include "lib/forward_fragment.glsl"
|
|
|
|
CAMERA(0, camera)
|
|
STORAGE_BUFFER(1, Object, objects)
|
|
LIGHT_BUFFER(2, lights)
|
|
SAMPLER_ARRAY(3, textures)
|
|
|
|
float arc(vec3 a, vec3 b, float threshold) {
|
|
return max(0, dot(a, b) - threshold) / (1 - threshold);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
vec3 sky_angle = normalize(in_world_position - camera.Eye.xyz);
|
|
|
|
vec3 sun_angle = normalize(vec3(0, 1, -1));
|
|
vec3 sun_color = vec3(1, 0.8, 0.4);
|
|
float sun_intensity = 16;
|
|
float sun_halo = sun_intensity * 0.007;
|
|
|
|
vec3 top = vec3(0.53, 0.69, 0.85);
|
|
vec3 horizon = vec3(0.06, 0.18, 0.49);
|
|
|
|
float frac = max(0, dot(sky_angle, vec3(0,1,0)));
|
|
|
|
vec3 sky_color = mix(top, horizon, frac) +
|
|
asin(arc(sun_angle, sky_angle, 0.9985)) * sun_intensity * sun_color +
|
|
asin(arc(sun_angle, sky_angle, 0.99)) * sun_halo * sun_color;
|
|
|
|
out_diffuse = vec4(sky_color, in_color.a);
|
|
}
|
|
|