diff --git a/shaders/dimensions/all_solid.fsh b/shaders/dimensions/all_solid.fsh index 2454073..37a1fed 100644 --- a/shaders/dimensions/all_solid.fsh +++ b/shaders/dimensions/all_solid.fsh @@ -4,6 +4,7 @@ #include "/lib/blocks.glsl" #include "/lib/entities.glsl" #include "/lib/items.glsl" +#include "/lib/bayer_matrix.glsl" flat varying int NameTags; @@ -442,9 +443,22 @@ void main() { //////////////////////////////// //////////////////////////////// //////////////////////////////// ALBEDO //////////////////////////////// //////////////////////////////// //////////////////////////////// + float textureLOD = bias(); - vec4 Albedo = texture2D_POMSwitch(texture, adjustedTexCoord.xy, vec4(dcdx,dcdy), ifPOM, textureLOD) * color; - + #ifdef DH_CHUNK_FADING + #if defined DISTANT_HORIZONS + float viewDist = length(playerpos); + float ditherFade = smoothstep(0.96*far, far, viewDist); + + vec4 Albedo; + Albedo.rgb = texture2D_POMSwitch(texture, adjustedTexCoord.xy, vec4(dcdx,dcdy), ifPOM, textureLOD).rgb * color.rgb; + Albedo.a = texture2D_POMSwitch(texture, adjustedTexCoord.xy, vec4(dcdx,dcdy), ifPOM, textureLOD).a * color.a * step(ditherFade, bayerDither()); + #else + vec4 Albedo = texture2D_POMSwitch(texture, adjustedTexCoord.xy, vec4(dcdx,dcdy), ifPOM, textureLOD) * color; + #endif + #else + vec4 Albedo = texture2D_POMSwitch(texture, adjustedTexCoord.xy, vec4(dcdx,dcdy), ifPOM, textureLOD) * color; + #endif #if defined HAND if (Albedo.a < 0.1) discard; diff --git a/shaders/dimensions/all_translucent.fsh b/shaders/dimensions/all_translucent.fsh index b8b2b36..b5b0ce6 100644 --- a/shaders/dimensions/all_translucent.fsh +++ b/shaders/dimensions/all_translucent.fsh @@ -1,4 +1,5 @@ #include "/lib/settings.glsl" +#include "/lib/bayer_matrix.glsl" #undef FLASHLIGHT_BOUNCED_INDIRECT @@ -434,6 +435,10 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) /////////////////////////////////// ALBEDO ///////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// + // DH FADING // + float viewDist = length((mat3(gbufferModelViewInverse) * viewPos + gbufferModelViewInverse[3].xyz)); + float ditherFade = smoothstep(0.96*far, 0.97*far, viewDist); + gl_FragData[0] = texture2D(texture, lmtexcoord.xy, Texture_MipMap_Bias) * color; float UnchangedAlpha = gl_FragData[0].a; @@ -452,6 +457,11 @@ if (gl_FragCoord.x * texelSize.x < 1.0 && gl_FragCoord.y * texelSize.y < 1.0 ) if (isWater){ Albedo = vec3(0.0); gl_FragData[0].a = 1.0/255.0; + + if (step(ditherFade, bayerDither()) == 0.0) { + discard; + } + gl_FragData[0].a = 0.0; } #endif #endif diff --git a/shaders/lib/bayer_matrix.glsl b/shaders/lib/bayer_matrix.glsl new file mode 100644 index 0000000..81df7a4 --- /dev/null +++ b/shaders/lib/bayer_matrix.glsl @@ -0,0 +1,14 @@ +float bayerDither() { + const float bayer[16] = float[16]( + 0.0 / 16.0, 8.0 / 16.0, 2.0 / 16.0, 10.0 / 16.0, + 12.0 / 16.0, 4.0 / 16.0, 14.0 / 16.0, 6.0 / 16.0, + 3.0 / 16.0, 11.0 / 16.0, 1.0 / 16.0, 9.0 / 16.0, + 15.0 / 16.0, 7.0 / 16.0, 13.0 / 16.0, 5.0 / 16.0 + ); + + int x = int(mod(gl_FragCoord.x, 4.0)); + int y = int(mod(gl_FragCoord.y, 4.0)); + int index = x + y * 4; + + return bayer[index]; +} \ No newline at end of file diff --git a/shaders/lib/settings.glsl b/shaders/lib/settings.glsl index 78a5e8c..4f3e7da 100644 --- a/shaders/lib/settings.glsl +++ b/shaders/lib/settings.glsl @@ -769,6 +769,7 @@ const vec3 aerochrome_color = mix(vec3(1.0, 0.0, 0.0), vec3(0.715, 0.303, 0.631) // #define PLANET_CURVATURE #define CURVATURE_AMOUNT 1.0 // [-10.0 -9.0 -8.0 -7.0 -6.0 -5.0 -4.0 -3.0 -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0] +#define DH_CHUNK_FADING // #define OLD_INDIRECT_SSS /////////////////////////////////////////// diff --git a/shaders/shaders.properties b/shaders/shaders.properties index 4a77e2f..657933f 100644 --- a/shaders/shaders.properties +++ b/shaders/shaders.properties @@ -339,7 +339,7 @@ SHADER_VERSION_LABEL \ screen.Mod_support = [DISTANT_HORIZONS_SETTINGS] [PHYSICS_MOD_OCEAN] screen.DISTANT_HORIZONS_SETTINGS.columns = 1 - screen.DISTANT_HORIZONS_SETTINGS = DH_OVERDRAW_PREVENTION OVERDRAW_MAX_DISTANCE DH_AMBIENT_OCCLUSION DH_SUBSURFACE_SCATTERING DH_SCREENSPACE_REFLECTIONS DH_TAA_JITTER DH_NOISE_TEXTURE NOISE_RESOLUTION NOISE_INTENSITY NOISE_DROPOFF DISTANT_HORIZONS_SHADOWMAP shadowDistance shadowMapResolution TOGGLE_VL_FOG VOLUMETRIC_CLOUDS + screen.DISTANT_HORIZONS_SETTINGS = DH_OVERDRAW_PREVENTION OVERDRAW_MAX_DISTANCE DH_CHUNK_FADING DH_AMBIENT_OCCLUSION DH_SUBSURFACE_SCATTERING DH_SCREENSPACE_REFLECTIONS DH_TAA_JITTER DH_NOISE_TEXTURE NOISE_RESOLUTION NOISE_INTENSITY NOISE_DROPOFF DISTANT_HORIZONS_SHADOWMAP shadowDistance shadowMapResolution TOGGLE_VL_FOG VOLUMETRIC_CLOUDS ######## MISC SETTINGS