Files
2025-10-27 08:59:20 +01:00

70 lines
2.7 KiB
GLSL

vec3 GetSkyColor(vec3 lightCol, float NdotU, vec3 nViewPos, bool isReflection) {
float timeBrightnessInv = 1.0 - timeBrightness;
float timeBrightnessInv2 = timeBrightnessInv * timeBrightnessInv;
float timeBrightnessInv4 = timeBrightnessInv2 * timeBrightnessInv2;
float timeBrightnessInv8 = timeBrightnessInv4 * timeBrightnessInv4;
float NdotSp = clamp(dot(nViewPos, sunVec) * 0.5 + 0.5, 0.001, 1.0);
float NdotS = NdotSp * NdotSp;
NdotS *= NdotS;
float absNdotU = abs(NdotU);
vec3 skyColor2 = skyColor * skyColor;
vec3 sky = mix(sqrt1(skyColor) * 0.47, skyColor2 * 0.9, absNdotU);
sky = sky * (0.5 + 0.5 * sunVisibility) * skyMult;
#ifdef ONESEVEN
sky = vec3(0.812, 0.741, 0.674) * 0.5;
#endif
float horizon = 1.0 - max(NdotU + 0.1, 0.0) * (1.0 - 0.25 * NdotS * sunVisibility);
horizon = min(horizon, 0.9);
horizon *= horizon;
float lightmix = NdotS * max(1.0 - absNdotU * 2.0, 0.0) * 0.5 + horizon + 0.05;
lightmix *= sunVisibility * (1.0 - rainStrengthS) * timeBrightnessInv8;
sky *= 2.0 - 0.5 * timeBrightnessInv4;
sky *= mix(SKY_NOON, SKY_DAY, timeBrightnessInv4);
float mult = 0.1 * (1.0 + rainStrengthS) + horizon * (0.3 + 0.1 * sunVisibility);
float meFactorP = min((1.0 - min(moonBrightness, 0.6) / 0.6) * 0.115, 0.075);
float meNdotU = 1.0 - absNdotU;
float meFactor = meFactorP * meNdotU * meNdotU * 15.0 * max(timeBrightnessInv4 - rainStrengthS, 0.0);
vec3 meColor = mix(lightMorning, lightEvening, mefade);
meColor *= meColor;
meColor *= meColor;
meColor *= meFactor * meFactor * NdotS;
vec3 finalSky = mix(sky * (1.0 - pow2(lightmix)), lightCol * sqrt(lightCol), lightmix);
vec3 nightSky = ambientNight * ambientNight * (3.25 + 2.25 * max(sqrt1(NdotU), 0.0));
nightSky *= mix(SKY_NIGHT, 1.0, sunVisibility);
finalSky += nightSky;
finalSky *= max(1.0 - length(meColor) * 0.5, 0.0);
finalSky += meColor * 0.8;
if (isReflection) {
float invNdotU = max(-NdotU, 0.0);
float groundFactor = 0.5 * (11.0 * rainStrengthS + 1.0) * (-5.0 * sunVisibility + 6.0);
float ground = exp(-groundFactor / (invNdotU * 6.0));
ground = smoothstep(0.0, 1.0, ground);
mult *= (1.0 - ground);
}
//duplicate 98765
vec3 weatherSky = weatherCol * weatherCol;
weatherSky *= GetLuminance(ambientCol / (weatherSky)) * 1.4;
weatherSky *= mix(SKY_RAIN_NIGHT, SKY_RAIN_DAY, sunVisibility);
weatherSky = max(weatherSky, skyColor2 * 0.75); // Lightning Sky Color
weatherSky *= rainStrengthS;
finalSky = mix(finalSky, weatherSky, rainStrengthS) * mult;
finalSky = pow(finalSky, vec3(1.125));
return finalSky;
}