From f99a3c33b5adebf0bf26d86d2fa843b5196f0ecb Mon Sep 17 00:00:00 2001 From: Xonk Date: Mon, 12 Feb 2024 17:54:00 -0500 Subject: [PATCH] add DH overdraw prevention toggle. --- shaders/dimensions/DH_solid.fsh | 13 +++++++----- shaders/dimensions/DH_translucent.fsh | 19 ++++++++++------- shaders/lib/climate_settings.glsl | 30 +++++++++++++++++++++++++++ shaders/lib/settings.glsl | 1 + shaders/shaders.properties | 2 +- 5 files changed, 51 insertions(+), 14 deletions(-) diff --git a/shaders/dimensions/DH_solid.fsh b/shaders/dimensions/DH_solid.fsh index ed7b76a..012a192 100644 --- a/shaders/dimensions/DH_solid.fsh +++ b/shaders/dimensions/DH_solid.fsh @@ -93,11 +93,14 @@ uniform vec3 cameraPosition; /* RENDERTARGETS:1,7,8 */ void main() { - // overdraw prevention - if(clamp(1.0-length(pos.xyz)/max(far - 16.0,0.0),0.0,1.0) > 0.0 ){ - discard; - return; - } + + #ifdef DH_OVERDRAW_PREVENTION + // overdraw prevention + if(clamp(1.0-length(pos.xyz)/max(far - 16.0,0.0),0.0,1.0) > 0.0 ){ + discard; + return; + } + #endif vec3 normals = viewToWorld(normals_and_materials.xyz); float materials = normals_and_materials.a; diff --git a/shaders/dimensions/DH_translucent.fsh b/shaders/dimensions/DH_translucent.fsh index aa852fb..bcb699e 100644 --- a/shaders/dimensions/DH_translucent.fsh +++ b/shaders/dimensions/DH_translucent.fsh @@ -348,15 +348,18 @@ void main() { gl_FragData[0].rgb = mix(gl_FragData[0].rgb, skyReflection, fresnel) + sunReflection ; gl_FragData[0].a = mix(gl_FragData[0].a, 1.0, fresnel); #endif - float distancefade = min(max(1.0 - length(pos.xz)/far,0.0)*2.0,1.0); - gl_FragData[0].a = mix(gl_FragData[0].a, 0.0, distancefade); - - float material = distancefade < 1.0 ? 1.0 : 0.0; - if(texture2D(depthtex1, gl_FragCoord.xy*texelSize).x < 1.0){ - gl_FragData[0].a = 0.0; - material = 0.0; - } + float material = 1.0; + #ifdef DH_OVERDRAW_PREVENTION + float distancefade = min(max(1.0 - length(pos.xz)/far,0.0)*2.0,1.0); + gl_FragData[0].a = mix(gl_FragData[0].a, 0.0, distancefade); + material = distancefade < 1.0 ? 1.0 : 0.0; + + if(texture2D(depthtex1, gl_FragCoord.xy*texelSize).x < 1.0){ + gl_FragData[0].a = 0.0; + material = 0.0; + } + #endif #if DEBUG_VIEW == debug_DH_WATER_BLENDING if(gl_FragCoord.x*texelSize.x > 0.53) gl_FragData[0] = vec4(0.0); diff --git a/shaders/lib/climate_settings.glsl b/shaders/lib/climate_settings.glsl index 1307bca..87715de 100644 --- a/shaders/lib/climate_settings.glsl +++ b/shaders/lib/climate_settings.glsl @@ -80,6 +80,36 @@ #endif #endif + vec3 getSeasonColor( int worldDay ){ + + // length of each season in minecraft days + // for example, at 1, a season is 1 day long + int SeasonLength = 1; + + // loop the year. multiply the season length by the 4 seasons to create a years time. + float YearLoop = mod(worldDay + SeasonLength, SeasonLength * 4); + + // the time schedule for each season + float SummerTime = clamp(YearLoop ,0, SeasonLength) / SeasonLength; + float AutumnTime = clamp(YearLoop - SeasonLength ,0, SeasonLength) / SeasonLength; + float WinterTime = clamp(YearLoop - SeasonLength*2 ,0, SeasonLength) / SeasonLength; + float SpringTime = clamp(YearLoop - SeasonLength*3 ,0, SeasonLength) / SeasonLength; + + // colors for things + vec3 SummerCol = vec3(Summer_R, Summer_G, Summer_B); + vec3 AutumnCol = vec3(Fall_R, Fall_G, Fall_B); + vec3 WinterCol = vec3(Winter_R, Winter_G, Winter_B); + vec3 SpringCol = vec3(Spring_R, Spring_G, Spring_B); + + // lerp all season colors together + vec3 SummerToFall = mix(SummerCol, AutumnCol, SummerTime); + vec3 FallToWinter = mix(SummerToFall, WinterCol, AutumnTime); + vec3 WinterToSpring = mix(FallToWinter, SpringCol, WinterTime); + vec3 SpringToSummer = mix(WinterToSpring, SummerCol, SpringTime); + + // return the final color of the year, because it contains all the other colors, at some point. + return SpringToSummer; + } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// ////////////////////////////// DAILY WEATHER ////////////////////////////////// diff --git a/shaders/lib/settings.glsl b/shaders/lib/settings.glsl index 2b9e9c9..e5d7b52 100644 --- a/shaders/lib/settings.glsl +++ b/shaders/lib/settings.glsl @@ -654,6 +654,7 @@ uniform int moonPhase; // #define ORIGINAL_CHOCAPIC_SKY // #define CLOUDS_INFRONT_OF_WORLD +#define DH_OVERDRAW_PREVENTION #define DH_KNOWN_ISSUES 0 // [0 1 2 3 4 5] // fix settings diff --git a/shaders/shaders.properties b/shaders/shaders.properties index d2538de..fcde651 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -295,7 +295,7 @@ BLISS_SHADERS \ screen.the_orb = THE_ORB ORB_X ORB_Y ORB_Z ORB_ColMult ORB_R ORB_G ORB_B screen.DISTANT_HORIZONS_SETTINGS.columns = 1 - screen.DISTANT_HORIZONS_SETTINGS = DH_KNOWN_ISSUES DISTANT_HORIZONS_SHADOWMAP shadowDistance shadowMapResolution TOGGLE_VL_FOG VOLUMETRIC_CLOUDS + screen.DISTANT_HORIZONS_SETTINGS = DH_KNOWN_ISSUES DISTANT_HORIZONS_SHADOWMAP shadowDistance shadowMapResolution DH_OVERDRAW_PREVENTION TOGGLE_VL_FOG VOLUMETRIC_CLOUDS screen.DAILY_WEATHER.columns = 2 screen.DAILY_WEATHER = Daily_Weather \