custommods
This commit is contained in:
@@ -0,0 +1,442 @@
|
||||
#if defined SHADOWS && ((defined PROJECTED_CAUSTICS && !defined GBUFFERS_WATER) || defined COLORED_SHADOWS) && defined OVERWORLD
|
||||
uniform sampler2DShadow shadowtex1;
|
||||
#endif
|
||||
|
||||
#if (defined OVERWORLD || defined END || defined SEVEN) && defined SHADOWS
|
||||
#include "/lib/lighting/shadows.glsl"
|
||||
|
||||
vec3 DistortShadow(inout vec3 worldPos, float distortFactor) {
|
||||
worldPos.xy /= distortFactor;
|
||||
worldPos.z *= 0.2;
|
||||
return worldPos * 0.5 + 0.5;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined WATER_CAUSTICS && defined OVERWORLD
|
||||
#include "/lib/lighting/caustics.glsl"
|
||||
#endif
|
||||
|
||||
float GetFakeShadow(float skyLight) {
|
||||
float fakeShadow = 0.0;
|
||||
|
||||
#ifndef END
|
||||
if (isEyeInWater == 0) skyLight = pow(skyLight, 30.0);
|
||||
fakeShadow = skyLight;
|
||||
#else
|
||||
#ifdef SHADOWS
|
||||
fakeShadow = 1.0;
|
||||
#else
|
||||
fakeShadow = 0.0;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return fakeShadow;
|
||||
}
|
||||
|
||||
void GetLighting(inout vec3 albedo, inout vec3 shadow, inout vec3 lightAlbedo, vec3 viewPos, float lViewPos, vec3 worldPos,
|
||||
vec2 lightmap, float smoothLighting, float NdotL, float quarterNdotU,
|
||||
float parallaxShadow, float emissive, float subsurface, float leaves, float materialAO) {
|
||||
vec3 fullShadow = vec3(0.0);
|
||||
float fullShadow1 = 0.0;
|
||||
float fakeShadow = 0.0;
|
||||
float shadowMult = 1.0;
|
||||
float shadowTime = 1.0;
|
||||
float water = 0.0;
|
||||
|
||||
#if PIXEL_SHADOWS > 0 && !defined GBUFFERS_HAND
|
||||
worldPos = floor((worldPos + cameraPosition) * PIXEL_SHADOWS + 0.001) / PIXEL_SHADOWS - cameraPosition + 0.5 / PIXEL_SHADOWS;
|
||||
#endif
|
||||
|
||||
#if defined OVERWORLD || defined END || defined SEVEN
|
||||
#ifdef SHADOWS
|
||||
shadow = vec3(1.0);
|
||||
if ((NdotL > 0.0 || subsurface > 0.001)) {
|
||||
float shadowLength = shadowDistance * 0.9166667 - length(vec4(worldPos.x, worldPos.y, worldPos.y, worldPos.z));
|
||||
//shadowDistance * 0.9166667 is shadowDistance - shadowDistance / 12.0
|
||||
|
||||
#if (defined OVERWORLD || defined SEVEN) && defined LIGHT_LEAK_FIX
|
||||
if (isEyeInWater == 0) shadowLength *= float(lightmap.y > 0.001);
|
||||
#endif
|
||||
|
||||
#ifdef TEST_12312
|
||||
vec3 shadowPos = WorldToShadow(worldPos);
|
||||
float distb = sqrt(shadowPos.x * shadowPos.x + shadowPos.y * shadowPos.y);
|
||||
float distortFactor = distb * shadowMapBias + (1.0 - shadowMapBias);
|
||||
shadowPos = DistortShadow(shadowPos, distortFactor);
|
||||
|
||||
bool doShadow = min2(shadowPos.xy) > 0.0
|
||||
&& max2(shadowPos.xy) < 1.0;
|
||||
if (!doShadow || shadowLength < 0.000001) albedo.rgb = vec3(1.0, 0.0, 1.0);
|
||||
shadowLength = 999999.0;
|
||||
#endif
|
||||
|
||||
if (shadowLength > 0.000001) {
|
||||
#ifndef TEST_12312
|
||||
vec3 shadowPos = WorldToShadow(worldPos);
|
||||
float distb = sqrt(shadowPos.x * shadowPos.x + shadowPos.y * shadowPos.y);
|
||||
float distortFactor = distb * shadowMapBias + (1.0 - shadowMapBias);
|
||||
shadowPos = DistortShadow(shadowPos, distortFactor);
|
||||
#endif
|
||||
|
||||
#ifdef NORMAL_MAPPING
|
||||
float NdotLm = clamp(dot(normal, lightVec) * 1.01 - 0.01, 0.0, 1.0) * 0.99 + 0.01;
|
||||
NdotL = min(NdotL, NdotLm);
|
||||
#else
|
||||
float NdotLm = NdotL * 0.99 + 0.01;
|
||||
#endif
|
||||
|
||||
float dotWorldPos = dot(worldPos.xyz, worldPos.xyz);
|
||||
|
||||
float biasFactor = sqrt(1.0 - NdotLm * NdotLm) / NdotLm;
|
||||
float distortBias = distortFactor * shadowDistance / 256.0;
|
||||
distortBias *= 8.0 * distortBias;
|
||||
|
||||
float bias = (distortBias * biasFactor + dotWorldPos * 0.000005 + 0.05) / shadowMapResolution;
|
||||
float offset = 1.0 / shadowMapResolution;
|
||||
|
||||
int doSubsurface = 0;
|
||||
if (subsurface > 0.001) {
|
||||
if (leaves < 0.5) {
|
||||
float UdotLm = clamp(dot(upVec, lightVec) * 1.01 - 0.01, 0.0, 1.0) * 0.99 + 0.01;
|
||||
float biasFactorF = sqrt(1.0 - UdotLm * UdotLm) / UdotLm;
|
||||
bias = (distortBias * biasFactorF + 0.05) / shadowMapResolution * 1.3;
|
||||
} else bias = 0.0002;
|
||||
offset = 0.002;
|
||||
#if SHADOW_SUBSURFACE > 2
|
||||
doSubsurface = 14;
|
||||
#endif
|
||||
}
|
||||
if (isEyeInWater == 1) offset *= 5.0;
|
||||
|
||||
#if PIXEL_SHADOWS > 0 && !defined GBUFFERS_HAND
|
||||
bias += 0.0025 / PIXEL_SHADOWS * (1.0 + subsurface);
|
||||
#endif
|
||||
|
||||
shadowPos.z -= bias;
|
||||
shadow = GetShadow(shadowPos, offset, water, doSubsurface);
|
||||
|
||||
float extraSideLight = 1.0;
|
||||
shadow *= (1.0 + extraSideLight) - extraSideLight * quarterNdotU;
|
||||
|
||||
#if defined PROJECTED_CAUSTICS && defined WATER_CAUSTICS && defined OVERWORLD && !defined GBUFFERS_WATER
|
||||
if (isEyeInWater == 0) {
|
||||
water = float(water > 0.99);
|
||||
water *= sqrt2(NdotL);
|
||||
float shadowSum = (shadow.r + shadow.g + shadow.b) / 3.0;
|
||||
water *= pow2(1.0 - shadowSum);
|
||||
}
|
||||
#ifdef GBUFFERS_ENTITIES
|
||||
if (entityId == 1089) { // Boats
|
||||
water = 0.0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
float shadowSmooth = 16.0;
|
||||
if (shadowLength < shadowSmooth) {
|
||||
float shadowLengthDecider = max(shadowLength / shadowSmooth, 0.0);
|
||||
float skyLightShadow = GetFakeShadow(lightmap.y);
|
||||
shadow = mix(vec3(skyLightShadow), shadow, shadowLengthDecider);
|
||||
subsurface *= mix(subsurface * 0.5, subsurface, shadowLengthDecider);
|
||||
fakeShadow = mix(1.0, fakeShadow, shadowLengthDecider);
|
||||
fakeShadow = 1.0 - fakeShadow;
|
||||
fakeShadow *= fakeShadow;
|
||||
fakeShadow = 1.0 - fakeShadow;
|
||||
}
|
||||
|
||||
#ifdef TEST_12312
|
||||
if (shadow.r < 0.1 && albedo.r + albedo.b < 1.9) {
|
||||
float timeThing1 = abs(fract(frameTimeCounter * 1.35) - 0.5) * 2.0;
|
||||
float timeThing2 = abs(fract(frameTimeCounter * 1.15) - 0.5) * 2.0;
|
||||
float timeThing3 = abs(fract(frameTimeCounter * 1.55) - 0.5) * 2.0;
|
||||
albedo.rgb = 3.0 * pow(vec3(timeThing1, timeThing2, timeThing3), vec3(3.2));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
shadow = vec3(GetFakeShadow(lightmap.y));
|
||||
#endif
|
||||
|
||||
#if defined CLOUD_SHADOW && defined OVERWORLD
|
||||
float cloudSize = 0.000025;
|
||||
vec2 wind = vec2(frametime, 0.0) * CLOUD_SPEED * 6.0;
|
||||
float cloudShadow = texture2D(noisetex, cloudSize * (wind + (worldPos.xz + cameraPosition.xz))).r;
|
||||
cloudShadow += texture2D(noisetex, cloudSize * (vec2(1000.0) + wind + (worldPos.xz + cameraPosition.xz))).r;
|
||||
cloudShadow = clamp(cloudShadow, 0.0, 1.0);
|
||||
cloudShadow *= cloudShadow;
|
||||
cloudShadow *= cloudShadow;
|
||||
shadow *= cloudShadow;
|
||||
#endif
|
||||
|
||||
#ifdef ADV_MAT
|
||||
#ifdef SELF_SHADOW
|
||||
float shadowNdotL = min(NdotL + 0.5, 1.0);
|
||||
shadowNdotL *= shadowNdotL;
|
||||
shadow *= mix(1.0, parallaxShadow, shadowNdotL);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
fullShadow = shadow * max(NdotL, subsurface * (1.0 - max(rainStrengthS, (1.0 - sunVisibility)) * 0.40));
|
||||
|
||||
fullShadow1 = (fullShadow.r + fullShadow.g + fullShadow.b) / 3.0;
|
||||
|
||||
#ifdef ADV_MAT
|
||||
shadow *= float(fullShadow1 > 0.01);
|
||||
#endif
|
||||
|
||||
#if defined OVERWORLD && !defined TWO
|
||||
shadowMult = 1.0 * (1.0 - 0.95 * rainStrengthS);
|
||||
|
||||
shadowTime = abs(sunVisibility - 0.5) * 2.0;
|
||||
shadowTime *= shadowTime;
|
||||
shadowMult *= shadowTime * shadowTime;
|
||||
|
||||
#ifndef LIGHT_LEAK_FIX
|
||||
ambientCol *= pow(lightmap.y, 2.5);
|
||||
#else
|
||||
if (isEyeInWater == 1) ambientCol *= pow(lightmap.y, 2.5);
|
||||
#endif
|
||||
|
||||
vec3 lightingCol = pow(lightCol, vec3(1.0 + sunVisibility * 1.5 - 0.5 * timeBrightness));
|
||||
#ifdef SHADOWS
|
||||
lightingCol *= (1.0 + 0.5 * leaves);
|
||||
#else
|
||||
lightingCol *= (1.0 + 0.4 * leaves);
|
||||
#endif
|
||||
vec3 shadowDecider = fullShadow * shadowMult;
|
||||
if (isEyeInWater == 1) shadowDecider *= pow(min(lightmap.y * 1.03, 1.0), 200.0);
|
||||
ambientCol *= AMBIENT_GROUND;
|
||||
lightingCol *= LIGHT_GROUND;
|
||||
vec3 sceneLighting = mix(ambientCol, lightingCol, shadowDecider);
|
||||
|
||||
#ifdef LIGHT_LEAK_FIX
|
||||
if (isEyeInWater == 0) sceneLighting *= pow(lightmap.y, 2.5);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef END
|
||||
vec3 ambientEnd = endCol * 0.07;
|
||||
vec3 lightEnd = endCol * 0.17;
|
||||
vec3 shadowDecider = fullShadow;
|
||||
vec3 sceneLighting = mix(ambientEnd, lightEnd, shadowDecider);
|
||||
sceneLighting *= END_I * (0.7 + 0.4 * vsBrightness);
|
||||
#endif
|
||||
|
||||
#ifdef TWO
|
||||
#ifndef ABYSS
|
||||
vec3 sceneLighting = vec3(0.0003, 0.0004, 0.002) * 10.0;
|
||||
#else
|
||||
vec3 sceneLighting = pow(fogColor, vec3(0.2)) * 0.125;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined SEVEN && !defined SEVEN_2
|
||||
sceneLighting = vec3(0.005, 0.006, 0.018) * 133 * (0.3 * fullShadow + 0.025);
|
||||
#endif
|
||||
#ifdef SEVEN_2
|
||||
vec3 sceneLighting = vec3(0.005, 0.006, 0.018) * 33 * (1.0 * fullShadow + 0.025);
|
||||
#endif
|
||||
#if defined SEVEN || defined SEVEN_2
|
||||
sceneLighting *= lightmap.y * lightmap.y;
|
||||
#endif
|
||||
|
||||
#if defined SHADOWS && defined OVERWORLD
|
||||
if (subsurface > 0.001) {
|
||||
float VdotL = clamp(dot(normalize(viewPos.xyz), lightVec), 0.0, 1.0);
|
||||
|
||||
vec3 subsurfaceGlow = (5.5 + 8.0 * leaves) * (1.0 - fakeShadow) * shadowTime * fullShadow * pow(VdotL, 10.0);
|
||||
subsurfaceGlow *= 1.0 - rainStrengthS * 0.68;
|
||||
albedo.rgb += max(albedo.g * normalize(sqrt((albedo.rgb + vec3(0.001)) * lightCol)) * subsurfaceGlow, vec3(0.0));
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#ifdef NETHER
|
||||
#if MC_VERSION >= 11600
|
||||
if (quarterNdotU < 0.5625) quarterNdotU = 0.5625 + (0.4 - quarterNdotU * 0.7111111111111111);
|
||||
#endif
|
||||
|
||||
#if MC_VERSION >= 11600
|
||||
vec3 sceneLighting = normalize(sqrt(max(fogColor, vec3(0.001)))) * 0.0385 * NETHER_I * (vsBrightness*0.5 + 0.6);
|
||||
#else
|
||||
vec3 sceneLighting = normalize(netherCol) * 0.0385 * NETHER_I * (vsBrightness*0.5 + 0.6);
|
||||
#endif
|
||||
#else
|
||||
vec3 sceneLighting = vec3(0.0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef DYNAMIC_SHADER_LIGHT
|
||||
float handLight = min(float(heldBlockLightValue2 + heldBlockLightValue), 15.0) / 15.0;
|
||||
|
||||
float handLightFactor = 1.0 - min(DYNAMIC_LIGHT_DISTANCE * handLight, lViewPos) / (DYNAMIC_LIGHT_DISTANCE * handLight);
|
||||
#ifdef GBUFFERS_WATER
|
||||
if (mat > 0.05) handLight *= 0.9;
|
||||
#endif
|
||||
#ifdef GBUFFERS_HAND
|
||||
handLight = min(handLight, 0.95);
|
||||
#endif
|
||||
float finalHandLight = handLight * handLightFactor;
|
||||
lightmap.x = max(finalHandLight * 0.95, lightmap.x);
|
||||
#endif
|
||||
|
||||
float lightmapX2 = lightmap.x * lightmap.x;
|
||||
float lightmapXM1 = pow2(pow2(lightmapX2)) * lightmapX2;
|
||||
float lightmapXM2 = max((lightmap.x - 0.05) * 0.925, 0.0);
|
||||
float newLightmap = mix(lightmapXM1 * 5.0 + lightmapXM2, lightmapXM1 * 4.0 + lightmapXM2 * 1.5, vsBrightness);
|
||||
|
||||
#ifdef BLOCKLIGHT_FLICKER
|
||||
float frametimeM = frametime * 0.5;
|
||||
float lightFlicker = min(((1 - clamp(sin(fract(frametimeM*2.7) + frametimeM*3.7) - 0.75, 0.0, 0.25) * BLOCKLIGHT_FLICKER_STRENGTH)
|
||||
* max(fract(frametimeM*1.4), (1 - BLOCKLIGHT_FLICKER_STRENGTH * 0.25))) / (1.0 - BLOCKLIGHT_FLICKER_STRENGTH * 0.2)
|
||||
, 0.8) * 1.25
|
||||
* 0.8 + 0.2 * clamp((cos(fract(frametimeM*0.47) * fract(frametimeM*1.17) + fract(frametimeM*2.17))) * 1.5, 1.0 - BLOCKLIGHT_FLICKER_STRENGTH * 0.25, 1.0);
|
||||
newLightmap *= lightFlicker;
|
||||
#endif
|
||||
|
||||
#ifdef RANDOM_BLOCKLIGHT
|
||||
float CLr = texture2D(noisetex, 0.00006 * (worldPos.xz + cameraPosition.xz)).r;
|
||||
float CLg = texture2D(noisetex, 0.00009 * (worldPos.xz + cameraPosition.xz)).r;
|
||||
float CLb = texture2D(noisetex, 0.00014 * (worldPos.xz + cameraPosition.xz)).r;
|
||||
blocklightCol = vec3(CLr, CLg, CLb);
|
||||
blocklightCol *= blocklightCol * BLOCKLIGHT_I * 2.22;
|
||||
#endif
|
||||
|
||||
#ifdef COLORED_LIGHT
|
||||
#ifdef GBUFFERS_TERRAIN
|
||||
if (lightVarying > 0.5) {
|
||||
if (lightVarying < 1.5) {
|
||||
lightAlbedo = albedo;
|
||||
}
|
||||
else if (lightVarying < 2.5) {
|
||||
#ifdef COMPBR
|
||||
lightAlbedo = float(eyeBrightness.x < 144) * emissive * albedo;
|
||||
#else
|
||||
lightAlbedo = float(eyeBrightness.x < 144) * albedo;
|
||||
#endif
|
||||
}
|
||||
else if (lightVarying < 3.5) {
|
||||
lightAlbedo = vec3(0.7, 0.5, 0.2);
|
||||
}
|
||||
else if (lightVarying < 4.5) { // Sea Lantern, Beacon, End Rod
|
||||
lightAlbedo = albedo * vec3(0.6, 0.85, 1.0);
|
||||
}
|
||||
else if (lightVarying < 5.5) { // Sea Pickles
|
||||
lightAlbedo = vec3(0.2, 0.9, 1.0);
|
||||
}
|
||||
}
|
||||
//if (lViewPos > 16.0) lightAlbedo = vec3(0.0);
|
||||
#endif
|
||||
|
||||
vec3 blocklightComplex = texture2D(colortex9, texCoord).rgb;
|
||||
blocklightComplex *= 0.75 + 2.0 * blocklightComplex.b;
|
||||
|
||||
blocklightCol = mix(blocklightCol, blocklightComplex, 0.7);
|
||||
|
||||
#ifdef DYNAMIC_SHADER_LIGHT
|
||||
#include "/lib/ifchecks/heldColoredLighting.glsl"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
vec3 blockLighting = blocklightCol * newLightmap * newLightmap;
|
||||
|
||||
vec3 minLighting = vec3(0.000000000001 + (MIN_LIGHT * 0.0035 * (vsBrightness*0.0775 + 0.0125)));
|
||||
#ifndef MIN_LIGHT_EVERYWHERE
|
||||
minLighting *= (1.0 - eBS);
|
||||
#endif
|
||||
#ifdef GBUFFERS_WATER
|
||||
minLighting *= 2.0;
|
||||
#endif
|
||||
|
||||
float shade = pow(quarterNdotU, SHADING_STRENGTH);
|
||||
|
||||
vec3 emissiveLighting = albedo.rgb * emissive * 20.0 / shade * EMISSIVE_MULTIPLIER;
|
||||
|
||||
float nightVisionLighting = nightVision * 0.25;
|
||||
|
||||
if (smoothLighting > 0.01) {
|
||||
smoothLighting = clamp(smoothLighting, 0.0, 1.0);
|
||||
#if VAO_STRENGTH == 10
|
||||
smoothLighting *= smoothLighting;
|
||||
#else
|
||||
smoothLighting = pow(smoothLighting, 0.2 * VAO_STRENGTH);
|
||||
#endif
|
||||
} else smoothLighting = 1.0;
|
||||
|
||||
if (materialAO < 1.0) {
|
||||
smoothLighting *= pow(materialAO, max(1.0 - shadowTime * length(shadow) * NdotL - lmCoord.x, 0.0));
|
||||
}
|
||||
|
||||
albedo *= sceneLighting + blockLighting + emissiveLighting + nightVisionLighting + minLighting;
|
||||
albedo *= shade;
|
||||
albedo *= smoothLighting;
|
||||
|
||||
#if defined WATER_CAUSTICS && defined OVERWORLD
|
||||
#if defined PROJECTED_CAUSTICS && !defined GBUFFERS_WATER
|
||||
if (water > 0.0 || isEyeInWater == 1) {
|
||||
#else
|
||||
if ((isEyeInWater != 0 && isEyeInWater != 2 && isEyeInWater != 3)) {
|
||||
// Not just doing (isEyeInWater == 1) to fix caustics appearing in shadows on AMD Mesa with Iris
|
||||
#endif
|
||||
vec3 albedoCaustic = albedo;
|
||||
|
||||
float skyLightMap = lightmap.y * lightmap.y * (3.0 - 2.0 * lightmap.y);
|
||||
float skyLightMapA = pow2(pow2((1.0 - skyLightMap)));
|
||||
float skyLightMapB = skyLightMap > 0.98 ? (1.0 - skyLightMap) * 50.0 : 1.0;
|
||||
|
||||
float causticfactor = 1.0 - lightmap.x * 0.8;
|
||||
|
||||
vec3 causticpos = worldPos.xyz + cameraPosition.xyz;
|
||||
float caustic = getCausticWaves(causticpos);
|
||||
vec3 causticcol = underwaterColor.rgb / UNDERWATER_I;
|
||||
|
||||
#if defined PROJECTED_CAUSTICS && !defined GBUFFERS_WATER
|
||||
if (isEyeInWater == 0) {
|
||||
causticfactor *= 1.0 - skyLightMapA;
|
||||
causticfactor *= 10.0;
|
||||
|
||||
causticcol = sqrt(normalize(waterColor.rgb + vec3(0.01)) * 0.32 * sqrt(UNDERWATER_I));
|
||||
#ifndef WATER_ABSORPTION
|
||||
albedoCaustic = albedo.rgb * causticcol * 3.0;
|
||||
causticcol *= 0.53;
|
||||
#else
|
||||
albedoCaustic = albedo.rgb * water * 1.74;
|
||||
causticcol = sqrt(causticcol) * 0.2;
|
||||
#endif
|
||||
} else {
|
||||
#endif
|
||||
causticfactor *= shadow.g * sqrt2(NdotL) * (1.0 - rainStrengthS);
|
||||
causticfactor *= 0.25 - 0.15 * skyLightMapA;
|
||||
causticfactor *= skyLightMapB;
|
||||
|
||||
albedoCaustic = (albedo.rgb + albedo.rgb * underwaterColor.rgb * 16.0) * 0.225;
|
||||
#ifdef WATER_ABSORPTION
|
||||
albedoCaustic *= 1.5;
|
||||
#endif
|
||||
albedoCaustic += albedo.rgb * underwaterColor.rgb * caustic * sqrt1(lightmap.x) * 4.0 * skyLightMapB;
|
||||
causticcol = sqrt(causticcol) * 30.0;
|
||||
#if defined PROJECTED_CAUSTICS && !defined GBUFFERS_WATER
|
||||
}
|
||||
#endif
|
||||
|
||||
vec3 lightcaustic = caustic * causticfactor * causticcol * UNDERWATER_I;
|
||||
albedoCaustic *= 1.0 + lightcaustic;
|
||||
|
||||
#if defined PROJECTED_CAUSTICS && !defined GBUFFERS_WATER
|
||||
if (isEyeInWater == 0) albedo = mix(albedo, albedoCaustic, max(water - rainStrengthS, 0.0));
|
||||
else albedo = albedoCaustic;
|
||||
#else
|
||||
albedo = albedoCaustic;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined GBUFFERS_HAND && defined HAND_BLOOM_REDUCTION
|
||||
float albedoStrength = (albedo.r + albedo.g + albedo.b) / 10.0;
|
||||
if (albedoStrength > 1.0) albedo.rgb = albedo.rgb * max(2.0 - albedoStrength, 0.34);
|
||||
#endif
|
||||
|
||||
#if MC_VERSION >= 11900
|
||||
albedo *= 1.0 - clamp(darknessLightFactor * (2.0 - emissive * 10000.0), 0.0, 1.0);
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user