66 lines
2.0 KiB
GLSL
66 lines
2.0 KiB
GLSL
// MinecraftPT — Sky_Overworld_FS
|
|
// Renders the sky into the background (colortex12) where no geometry was drawn.
|
|
|
|
#include "/Lib/Settings.glsl"
|
|
#include "/Lib/Utilities.glsl"
|
|
#include "/Lib/BasicFunctions/LightingConstants.glsl"
|
|
#include "/Lib/BasicFunctions/PrecomputedAtmosphere.glsl"
|
|
#include "/Lib/IndividualFunctions/EndSky.glsl"
|
|
#include "/Lib/IndividualFunctions/PlanarClouds.glsl"
|
|
#include "/Lib/IndividualFunctions/CloudShadow.glsl"
|
|
|
|
uniform sampler2D depthtex0;
|
|
|
|
layout(location = 0) out vec4 colorOut;
|
|
|
|
void main(){
|
|
ivec2 texelCoord = ivec2(gl_FragCoord.xy);
|
|
|
|
float depth = texelFetch(depthtex0, texelCoord, 0).r;
|
|
if (depth < 1.0){
|
|
// Not sky — preserve scene
|
|
discard;
|
|
}
|
|
|
|
// Reconstruct view ray
|
|
vec4 viewPos = gbufferProjectionInverse * vec4(vec2(texelCoord) / screenSize * 2.0 - 1.0, 1.0, 1.0);
|
|
vec3 viewDir = normalize(viewPos.xyz / viewPos.w);
|
|
vec3 worldDir = normalize(mat3(gbufferModelViewInverse) * viewDir);
|
|
|
|
vec3 sunDir = GetSunDirWorld();
|
|
|
|
// Sky radiance
|
|
vec3 color = GetSkyRadiance(worldDir, sunDir);
|
|
|
|
#ifdef DIMENSION_END
|
|
color = GetEndSky(worldDir, sunDir);
|
|
#elif defined DIMENSION_NETHER
|
|
// Nether: dark smoky red-brown atmosphere
|
|
color = vec3(0.18, 0.06, 0.03) * 1.2;
|
|
color += vec3(0.5, 0.2, 0.1) * 0.3 * (1.0 - abs(worldDir.y) * 0.5);
|
|
#endif
|
|
|
|
// Planar clouds
|
|
#ifdef PLANAR_CLOUDS
|
|
if (PLANAR_CLOUDS > 0){
|
|
// Ray-plane intersection with cloud layer
|
|
float cloudAlt = mix(PC_ALTITUDE, CLOUD_CLEAR_ALTITUDE, wetness * 0.5);
|
|
if (worldDir.y > 0.001){
|
|
float t = (cloudAlt - cameraPosition.y) / worldDir.y;
|
|
if (t > 0.0){
|
|
vec3 cloudPos = cameraPosition + worldDir * t;
|
|
vec3 cloudColor;
|
|
float cloudDensity = GetPlanarCloudDensity(cloudPos.xz, frameTimeCounter * CLOUD_SPEED, cloudColor);
|
|
|
|
if (cloudDensity > 0.01){
|
|
// Soft cloud edge
|
|
vec3 cloudLight = mix(GetCloudAtmoIrradiance(), GetCloudSunIrradiance(), 0.8);
|
|
color = mix(color, cloudLight, cloudDensity * 0.8);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
colorOut = vec4(color, 1.0);
|
|
} |