make daily weather fully functional (No defaults yet). fix damage effects from randomly happening. fix AO strength slider not function when SSAO is on.

This commit is contained in:
Xonk
2024-05-22 00:01:17 -04:00
parent 044d690a52
commit dcce8e5358
26 changed files with 278 additions and 265 deletions

View File

@ -118,66 +118,6 @@
// return the final color of the year, because it contains all the other colors, at some point.
return SpringToSummer;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
////////////////////////////// DAILY WEATHER //////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#ifdef WEATHERCLOUDS
uniform float Cumulus_Cov;
float DailyWeather_Cumulus(
float Coverage
){
#ifdef Daily_Weather
Coverage += mix(Cumulus_Cov, Rain_coverage, rainStrength);
#else
Coverage += mix(CloudLayer0_coverage, Rain_coverage, rainStrength);
#endif
return Coverage;
}
uniform float Alto_Cov;
uniform float Alto_Den;
void DailyWeather_Alto(
inout float Coverage,
inout float Density
){
#ifdef Daily_Weather
Coverage = Alto_Cov;
Density = Alto_Den;
#else
Coverage = CloudLayer2_coverage;
Density = CloudLayer2_density;
#endif
}
#endif
#ifdef Daily_Weather
uniform float Uniform_Den;
uniform float Cloudy_Den;
void DailyWeather_FogDensity(
inout vec4 UniformDensity,
inout vec4 CloudyDensity
){
// set fog Profiles for each of the 8 days in the cycle.
// U = uniform fog || C = cloudy fog
// vec4( morning, noon, evening, night )
UniformDensity.rgb += vec3(Uniform_Den);
CloudyDensity.rgb += vec3(Cloudy_Den);
}
#endif
///////////////////////////////////////////////////////////////////////////////
///////////////////////////// BIOME SPECIFICS /////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
@ -273,10 +213,10 @@
#ifdef TIMEOFDAYFOG
// uniform int worldTime;
void TimeOfDayFog(
inout float Uniform, inout float Cloudy, float maxDistance
inout float Uniform, inout float Cloudy, float maxDistance, float DailyWeather_UniformFogDensity, float DailyWeather_CloudyFogDensity
) {
float Time = worldTime%24000;
float Time = worldTime%24000;
// set schedules for fog to appear at specific ranges of time in the day.
float Morning = clamp((Time-22000)/2000,0,1) + clamp((2000-Time)/2000,0,1);
@ -288,9 +228,11 @@
vec4 UniformDensity = TOD_Fog_mult * vec4(Morning_Uniform_Fog, Noon_Uniform_Fog, Evening_Uniform_Fog, Night_Uniform_Fog);
vec4 CloudyDensity = TOD_Fog_mult * vec4(Morning_Cloudy_Fog, Noon_Cloudy_Fog, Evening_Cloudy_Fog, Night_Cloudy_Fog);
#ifdef Daily_Weather
DailyWeather_FogDensity(UniformDensity, CloudyDensity); // let daily weather influence fog densities.
// let daily weather influence fog densities.
UniformDensity = max(UniformDensity, DailyWeather_UniformFogDensity * 50.0);
CloudyDensity = max(CloudyDensity, DailyWeather_CloudyFogDensity * 50.0);
// DailyWeather_FogDensity(UniformDensity, CloudyDensity);
#endif
#ifdef PER_BIOME_ENVIRONMENT

View File

@ -11,6 +11,7 @@
#endif
uniform float exitWater;
// uniform float exitPowderSnow;
uniform int isEyeInWater;
// uniform float currentPlayerHunger;
@ -65,10 +66,10 @@ void applyGameplayEffects(inout vec3 color, in vec2 texcoord, float noise){
scale.xy = (isEyeInWater == 1 ? vec2(0.3) : vec2(0.5, 0.25 + (exitWater*exitWater)*0.25 ) ) * vec2(aspectRatio,1.0);
scale.z = isEyeInWater == 1 ? 0.0 : exitWater;
float waterDrops = texture2D(noisetex, (texcoord - vec2(0.0, scale.z)) * scale.xy).r;
float waterDrops = texture2D(noisetex, (texcoord - vec2(0.0, scale.z)) * scale.xy).r ;
if(isEyeInWater == 1) waterDrops = waterDrops*waterDrops * 0.3;
if(isEyeInWater == 0) waterDrops = sqrt(min(max(waterDrops - (1.0-sqrt(exitWater))*0.7,0.0) * (1.0 + exitWater),1.0)) * 0.3;
if(isEyeInWater == 0 && exitWater > 0.0) waterDrops = sqrt(min(max(waterDrops - (1.0-sqrt(exitWater))*0.7,0.0) * (1.0 + exitWater),1.0)) * 0.3;
// apply distortion effects for exiting water and under water
distortmask = max(distortmask, waterDrops);
@ -80,6 +81,14 @@ void applyGameplayEffects(inout vec3 color, in vec2 texcoord, float noise){
vec2 zoomUV = 0.5 + (texcoord - 0.5) * (1.0 - distortmask);
vec3 distortedColor = texture2D(colortex7, zoomUV).rgb;
#ifdef TONE_CURVE
distortedColor = toneCurve(distortedColor);
#endif
#ifdef COLOR_GRADING_ENABLED
distortedColor = colorGrading(distortedColor);
#endif
applyContrast(distortedColor, CONTRAST);
#ifdef WATER_ON_CAMERA_EFFECT
// apply the distorted water color to the scene, but revert back to before when it ends
if(exitWater > 0.01) color = distortedColor;
@ -105,4 +114,5 @@ void applyGameplayEffects(inout vec3 color, in vec2 texcoord, float noise){
if(isDead) color = distortedColorLuma * 0.3;
#endif
}

View File

@ -1,6 +1,5 @@
uniform float noPuddleAreas;
float densityAtPosFog(in vec3 pos){
pos /= 18.;
pos.xz *= 0.5;
@ -40,7 +39,7 @@ float cloudVol(in vec3 pos, float maxDistance ){
if(sandStorm > 0 || snowStorm > 0) CloudyFog = mix(CloudyFog, max(densityAtPosFog((samplePos2 - vec3(frameTimeCounter,0,frameTimeCounter)*10) * 100.0 ) - 0.2,0.0) * heightlimit, sandStorm+snowStorm);
#endif
TimeOfDayFog(UniformFog, CloudyFog, maxDistance);
TimeOfDayFog(UniformFog, CloudyFog, maxDistance, dailyWeatherParams0.a, dailyWeatherParams1.a);
float noise = densityAtPosFog(samplePos * 12.0);
float erosion = 1.0-densityAtPosFog(samplePos2 * (125 - (1-pow(1-noise,5))*25));

View File

@ -407,7 +407,9 @@ uniform int moonPhase;
#define HQ_CLOUDS
// #define Daily_Weather
// #define CHOOSE_RANDOM_WEATHER_PROFILE
#ifdef Daily_Weather
// DAY 0 WEATHER PARAMETERS
#define DAY0_l0_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY0_l1_coverage 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
@ -498,7 +500,7 @@ uniform int moonPhase;
#define DAY9_l1_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY9_l2_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#define DAY9_cfog_density 0.0 // [0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0]
#endif
//////////////////////////////////////
@ -590,6 +592,7 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
//#define BICUBIC_UPSCALING
// #define CAMERA_GRIDLINES
///////////////////////////////////////////////////////
// ----- GAMEPLAY POST EFFECT RELATED SETTINGS ----- //
@ -603,6 +606,7 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631)
#endif
#define WATER_ON_CAMERA_EFFECT
#define POWDERSNOW_FROST_CAMERA_EFFECT
#ifdef LOW_HEALTH_EFFECT
#endif

View File

@ -1,36 +1,27 @@
#ifdef HQ_CLOUDS
int maxIT_clouds = minRayMarchSteps;
int maxIT = maxRayMarchSteps;
#else
int maxIT_clouds = minRayMarchStepsLQ;
int maxIT = maxRayMarchStepsLQ;
#endif
#ifdef HQ_CLOUDS
const int cloudLoD = cloud_LevelOfDetail;
const int cloudShadowLoD = cloud_ShadowLevelOfDetail;
#else
int maxIT_clouds = minRayMarchStepsLQ;
int maxIT = maxRayMarchStepsLQ;
const int cloudLoD = cloud_LevelOfDetailLQ;
const int cloudShadowLoD = cloud_ShadowLevelOfDetailLQ;
#endif
// uniform float viewHeight;
// uniform float viewWidth;
uniform int worldTime;
#define WEATHERCLOUDS
#include "/lib/climate_settings.glsl"
#ifdef Daily_Weather
#ifndef USE_WEATHER_PARAMS
vec3 dailyWeatherParams0 = vec3(CloudLayer0_coverage, CloudLayer1_coverage, CloudLayer2_coverage);
vec3 dailyWeatherParams1 = vec3(CloudLayer0_density, CloudLayer1_density, CloudLayer2_density);
#endif
#if defined Daily_Weather
flat varying vec4 dailyWeatherParams0;
flat varying vec4 dailyWeatherParams1;
#else
vec3 dailyWeatherParams0 = vec3(CloudLayer0_coverage, CloudLayer1_coverage, CloudLayer2_coverage);
vec3 dailyWeatherParams1 = vec3(CloudLayer0_density, CloudLayer1_density, CloudLayer2_density);
vec4 dailyWeatherParams0 = vec4(CloudLayer0_coverage, CloudLayer1_coverage, CloudLayer2_coverage, 0.0);
vec4 dailyWeatherParams1 = vec4(CloudLayer0_density, CloudLayer1_density, CloudLayer2_density, 0.0);
#endif
float LAYER0_minHEIGHT = CloudLayer0_height;
@ -50,10 +41,9 @@ float LAYER1_DENSITY = dailyWeatherParams1.y;
float LAYER2_DENSITY = dailyWeatherParams1.z;
float rainCloudwetness = rainStrength;
// float cloud_movement = frameTimeCounter * Cloud_Speed ;
// float cloud_movement = abs((12000 - worldTime) * Cloud_Speed ) * 0.05;
// float cloud_movement = (worldTime / 24.0) * Cloud_Speed;
uniform int worldDay;
float cloud_movement = (worldTime + mod(worldDay,100)*24000.0) / 24.0 * Cloud_Speed;
//3D noise from 2d texture
@ -75,7 +65,6 @@ float densityAtPos(in vec3 pos){
float GetAltostratusDensity(vec3 pos){
float Coverage; float Density;
// DailyWeather_Alto(Coverage, Density);
float large = texture2D(noisetex, (pos.xz + cloud_movement)/100000. ).b;
float small = texture2D(noisetex, (pos.xz - cloud_movement)/10000. - vec2(-large,1-large)/5).b;
@ -610,7 +599,6 @@ vec4 renderClouds(
float GetCloudShadow(vec3 feetPlayerPos){
#ifdef CLOUDS_SHADOWS
vec3 playerPos = feetPlayerPos + cameraPosition;
float shadow = 0.0;
@ -618,15 +606,15 @@ float GetCloudShadow(vec3 feetPlayerPos){
// assume a flat layer of cloud, and stretch the sampled density along the sunvector, starting from some vertical layer in the cloud.
#ifdef CloudLayer0
vec3 lowShadowStart = playerPos + (WsunVec / max(abs(WsunVec.y),0.0)) * max((CloudLayer0_height + 30) - playerPos.y,0.0) ;
shadow += GetCumulusDensity(0, lowShadowStart, 0, CloudLayer0_height, CloudLayer0_height+100)*LAYER0_DENSITY;
shadow += GetCumulusDensity(0, lowShadowStart, 0, CloudLayer0_height, CloudLayer0_height+100)*dailyWeatherParams1.x;
#endif
#ifdef CloudLayer1
vec3 higherShadowStart = playerPos + (WsunVec / max(abs(WsunVec.y),0.0)) * max((CloudLayer1_height + 50) - playerPos.y,0.0) ;
shadow += GetCumulusDensity(1, higherShadowStart, 0, CloudLayer1_height, CloudLayer1_height+100)*LAYER1_DENSITY;
shadow += GetCumulusDensity(1, higherShadowStart, 0, CloudLayer1_height, CloudLayer1_height+100)*dailyWeatherParams1.y;
#endif
#ifdef CloudLayer2
vec3 highShadowStart = playerPos + (WsunVec / max(abs(WsunVec.y),0.0)) * max(CloudLayer2_height - playerPos.y,0.0);
shadow += GetAltostratusDensity(highShadowStart) * LAYER2_DENSITY;
shadow += GetAltostratusDensity(highShadowStart) * dailyWeatherParams1.z;
#endif
shadow = clamp(shadow,0.0,1.0);
@ -648,15 +636,15 @@ float GetCloudShadow_VLFOG(vec3 WorldPos, vec3 WorldSpace_sunVec){
#ifdef CloudLayer0
vec3 lowShadowStart = WorldPos + (WorldSpace_sunVec / max(abs(WorldSpace_sunVec.y),0.0)) * max((CloudLayer0_height + 30) - WorldPos.y,0.0) ;
shadow += max(GetCumulusDensity(0, lowShadowStart, 0, CloudLayer0_height,CloudLayer0_height+100),0.0)*LAYER0_DENSITY;
shadow += max(GetCumulusDensity(0, lowShadowStart, 0, CloudLayer0_height, CloudLayer0_height+100),0.0)*dailyWeatherParams1.x;
#endif
#ifdef CloudLayer1
vec3 higherShadowStart = WorldPos + (WorldSpace_sunVec / max(abs(WorldSpace_sunVec.y),0.0)) * max((CloudLayer1_height + 30) - WorldPos.y,0.0) ;
shadow += max(GetCumulusDensity(1,higherShadowStart, 0, CloudLayer1_height,CloudLayer1_height+100) ,0.0)*LAYER1_DENSITY;
shadow += max(GetCumulusDensity(1,higherShadowStart, 0, CloudLayer1_height,CloudLayer1_height+100) ,0.0)*dailyWeatherParams1.y;
#endif
#ifdef CloudLayer2
vec3 highShadowStart = WorldPos + (WorldSpace_sunVec / max(abs(WorldSpace_sunVec.y),0.0)) * max(CloudLayer2_height - WorldPos.y,0.0);
shadow += GetAltostratusDensity(highShadowStart)*LAYER2_DENSITY * 0.5;
shadow += GetAltostratusDensity(highShadowStart)*dailyWeatherParams1.z * 0.5;
#endif
shadow = clamp(shadow,0.0,1.0);