mirror of
https://github.com/X0nk/Bliss-Shader.git
synced 2025-06-22 00:37:35 +08:00
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:
@ -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
|
||||
|
@ -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
|
||||
|
||||
}
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user