fix eol
This commit is contained in:
+252
-252
@@ -1,252 +1,252 @@
|
||||
//////////////////////////////////////////
|
||||
// Complementary Shaders by EminGT //
|
||||
// With Euphoria Patches by SpacEagle17 //
|
||||
//////////////////////////////////////////
|
||||
|
||||
//Common//
|
||||
#include "/lib/common.glsl"
|
||||
#define ROUGHNESS_MULTIPLIER 1.0 //[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 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
|
||||
#define ROUGHNESS_INTENSITY 1.0 //[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 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
|
||||
|
||||
//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader//////////
|
||||
#ifdef FRAGMENT_SHADER
|
||||
|
||||
noperspective in vec2 texCoord;
|
||||
|
||||
in vec3 sunVec;
|
||||
|
||||
#ifdef END
|
||||
in float vlFactor;
|
||||
#endif
|
||||
|
||||
//Pipeline Constants//
|
||||
|
||||
//Common Variables//
|
||||
vec3 upVec = normalize(gbufferModelView[1].xyz);
|
||||
vec3 eastVec = normalize(gbufferModelView[0].xyz);
|
||||
vec3 northVec = normalize(gbufferModelView[2].xyz);
|
||||
#ifdef OVERWORLD
|
||||
vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0);
|
||||
#else
|
||||
vec3 lightVec = sunVec;
|
||||
#endif
|
||||
float SdotU = dot(sunVec, upVec);
|
||||
float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625;
|
||||
float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125;
|
||||
float sunVisibility2 = sunVisibility * sunVisibility;
|
||||
float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0;
|
||||
float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1;
|
||||
float shadowTime = shadowTimeVar2 * shadowTimeVar2;
|
||||
float farMinusNear = far - near;
|
||||
float z0;
|
||||
float z1;
|
||||
|
||||
vec2 view = vec2(viewWidth, viewHeight);
|
||||
|
||||
//Common Functions//
|
||||
float GetLinearDepth(float depth) {
|
||||
return (2.0 * near) / (far + near - depth * (far - near));
|
||||
}
|
||||
|
||||
//Includes//
|
||||
#include "/lib/util/spaceConversion.glsl"
|
||||
#include "/lib/util/dither.glsl"
|
||||
#include "/lib/atmospherics/fog/mainFog.glsl"
|
||||
#include "/lib/colors/skyColors.glsl"
|
||||
#include "/lib/colors/lightAndAmbientColors.glsl"
|
||||
#include "/lib/materials/materialMethods/reflections.glsl"
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
#include "/lib/colors/colorMultipliers.glsl"
|
||||
#endif
|
||||
|
||||
//Program//
|
||||
void main() {
|
||||
ivec2 texelCoord = ivec2(texCoord * view);
|
||||
vec4 color = texelFetch(colortex0, texelCoord, 0);
|
||||
vec4 texture4 = texelFetch(colortex4, texelCoord, 0);
|
||||
|
||||
z0 = texelFetch(depthtex0, texelCoord, 0).r;
|
||||
z1 = texelFetch(depthtex1, texelCoord, 0).r;
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
atmColorMult = GetAtmColorMult();
|
||||
sqrtAtmColorMult = sqrt(atmColorMult);
|
||||
#endif
|
||||
|
||||
vec4 reflectOutput = vec4(0.0);
|
||||
if (
|
||||
z0 < 1.0
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL == -1 || WATER_REFLECT_QUALITY <= 0
|
||||
&& z0 == z1
|
||||
#endif
|
||||
) {
|
||||
vec3 texture6 = texelFetch(colortex6, texelCoord, 0).rgb;
|
||||
vec3 normalM = mat3(gbufferModelView) * texture4.rgb;
|
||||
vec4 screenPos = vec4(texCoord, z0, 1.0);
|
||||
vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0);
|
||||
viewPos /= viewPos.w;
|
||||
float lViewPos = length(viewPos);
|
||||
vec3 nViewPos = normalize(viewPos.xyz);
|
||||
vec3 playerPos = ViewToPlayer(viewPos.xyz);
|
||||
bool entityOrParticle = z0 < 0.56;
|
||||
|
||||
float dither = texture2DLod(noisetex, gl_FragCoord.xy / 128.0, 0.0).b;
|
||||
#if defined TAA || defined PBR_REFLECTIONS
|
||||
dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0));
|
||||
#endif
|
||||
|
||||
int materialMaskInt = int(texture6.g * 255.1);
|
||||
float skyLightFactor = texture6.b;
|
||||
float smoothnessD = texture6.r;
|
||||
float fresnelM = texture4.a;
|
||||
float intenseFresnel = 0.0;
|
||||
float ssao = 1.0;
|
||||
vec3 reflectColor = vec3(1.0);
|
||||
|
||||
#ifdef IRIS_FEATURE_FADE_VARIABLE
|
||||
if (skyLightFactor > 0.50001) skyLightFactor = eyeBrightnessM;
|
||||
else skyLightFactor *= 1.9999;
|
||||
#endif
|
||||
|
||||
#include "/lib/materials/materialHandling/deferredMaterials.glsl"
|
||||
|
||||
float fresnel = clamp(1.0 + dot(normalM, nViewPos), 0.0, 1.0);
|
||||
|
||||
if (fresnelM > 0.0) {
|
||||
#ifdef TAA
|
||||
float noiseMult = 0.3;
|
||||
#else
|
||||
float noiseMult = 0.3;
|
||||
#endif
|
||||
#ifdef PBR_REFLECTIONS
|
||||
bool opaqueSurface = z0 == z1;
|
||||
float minBlendFactor = 0.035 + 0.09 * pow2(pow2(pow2(smoothnessD)));
|
||||
|
||||
if (entityOrParticle) {
|
||||
noiseMult *= 0.125;
|
||||
minBlendFactor = 0.125;
|
||||
if (!opaqueSurface) reflectColor = vec3(0.0);
|
||||
}
|
||||
#endif
|
||||
float smoothnessDM = smoothnessD * ROUGHNESS_MULTIPLIER;
|
||||
noiseMult *= pow2(1.0 - smoothnessDM) * ROUGHNESS_INTENSITY;
|
||||
|
||||
vec2 roughCoord = gl_FragCoord.xy / 128.0;
|
||||
vec3 roughNoise = vec3(
|
||||
texture2DLod(noisetex, roughCoord, 0.0).r,
|
||||
texture2DLod(noisetex, roughCoord + 0.09375, 0.0).r,
|
||||
texture2DLod(noisetex, roughCoord + 0.1875, 0.0).r
|
||||
);
|
||||
roughNoise = fract(roughNoise + vec3(dither, dither * goldenRatio, dither * pow2(goldenRatio)));
|
||||
roughNoise = noiseMult * (roughNoise - vec3(0.5));
|
||||
|
||||
vec3 refNormal = normalM + roughNoise;
|
||||
|
||||
float enderDragonDead = 1.0 - texelFetch(colortex5, ivec2(viewWidth-1, viewHeight-1), 0).a;
|
||||
|
||||
vec4 reflection = GetReflection(refNormal, viewPos.xyz, nViewPos, playerPos, lViewPos, z0,
|
||||
depthtex1, dither, skyLightFactor, fresnel,
|
||||
smoothnessDM, vec3(0.0), vec3(0.0), vec3(0.0), 0.0, enderDragonDead, vec2(0.0));
|
||||
|
||||
reflection.rgb *= reflectColor;
|
||||
reflectOutput = reflection;
|
||||
|
||||
#ifdef PBR_REFLECTIONS
|
||||
if (opaqueSurface) {
|
||||
refDist = min(refDist, far - lViewPos);
|
||||
vec4 virtualRefPos = vec4(viewPos.xyz + refDist * nViewPos, 1.0);
|
||||
vec4 playerVirtualRefPos = gbufferModelViewInverse * virtualRefPos; // note: don't need to do perspective division with model view matrix
|
||||
vec4 virtualPrevRefPos = playerVirtualRefPos;
|
||||
virtualPrevRefPos.xyz -= previousCameraPosition - cameraPosition;
|
||||
virtualPrevRefPos = gbufferPreviousProjection * (gbufferPreviousModelView * virtualPrevRefPos);
|
||||
virtualPrevRefPos.xyz = 0.5 * virtualPrevRefPos.xyz / virtualPrevRefPos.w + 0.5;
|
||||
virtualPrevRefPos.z = min(1, virtualPrevRefPos.z);
|
||||
if (virtualPrevRefPos.xyz == clamp01(virtualPrevRefPos.xyz)) {
|
||||
vec4 prevPos = gbufferProjection * (
|
||||
gbufferModelView * vec4(
|
||||
playerPos + (cameraPosition - previousCameraPosition) +
|
||||
gbufferModelViewInverse[3].xyz - transpose(mat3(gbufferPreviousModelView)) * gbufferPreviousModelView[3].xyz
|
||||
, 1.0
|
||||
)
|
||||
);
|
||||
prevPos.xyz = 0.5 * prevPos.xyz / prevPos.w + 0.5;
|
||||
virtualPrevRefPos.xy *= view;
|
||||
virtualPrevRefPos.xy = (
|
||||
smoothstep(0, 1, smoothstep(0, 1, fract(virtualPrevRefPos.xy - 0.5))) +
|
||||
floor(virtualPrevRefPos.xy - 0.5) +
|
||||
0.5
|
||||
) / view;
|
||||
|
||||
float linearZ1 = GetLinearDepth(z1);
|
||||
vec2 pixelMovement = view * (prevPos.xy - texCoord);
|
||||
vec3 prevNormalM = mat3(gbufferModelView) * texture2D(colortex1, virtualPrevRefPos.xy).rgb;
|
||||
|
||||
vec4 prevRefCurrentPosHeuristic = playerVirtualRefPos;
|
||||
prevRefCurrentPosHeuristic.xyz += normalize(previousCameraPosition - cameraPosition - playerVirtualRefPos.xyz) * refDist;
|
||||
prevRefCurrentPosHeuristic = gbufferProjection * (gbufferModelView * prevRefCurrentPosHeuristic);
|
||||
prevRefCurrentPosHeuristic.xyz = 0.5 * prevRefCurrentPosHeuristic.xyz / prevRefCurrentPosHeuristic.w + 0.5;
|
||||
|
||||
vec4 prevRef = texture2D(colortex7, virtualPrevRefPos.xy);
|
||||
float prevValid = exp(
|
||||
- 0.03 * length(view * (virtualPrevRefPos.xy - texCoord))
|
||||
- min(0.75, 10.0 * sqrt(length(cameraPosition - previousCameraPosition)))
|
||||
- 0.003 * length(pixelMovement)
|
||||
- 12.0 * length(normalM - prevNormalM)
|
||||
- abs(prevRef.a - linearZ1) * far / 1.0
|
||||
- 10 * length(prevRefCurrentPosHeuristic.xy - clamp01(prevRefCurrentPosHeuristic.xy))
|
||||
);
|
||||
|
||||
reflectOutput.rgb = mix(prevRef.rgb, reflectOutput.rgb, min1(minBlendFactor / prevValid));
|
||||
reflectOutput.a = linearZ1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* DRAWBUFFERS:7 */
|
||||
gl_FragData[0] = reflectOutput;
|
||||
|
||||
// same check as #ifdef PBR_REFLECTIONS but for Optifine to understand:
|
||||
#if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE >= 1
|
||||
/* DRAWBUFFERS:71 */
|
||||
gl_FragData[1] = vec4(texture4.rgb, 1.0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader//////////
|
||||
#ifdef VERTEX_SHADER
|
||||
|
||||
noperspective out vec2 texCoord;
|
||||
|
||||
out vec3 sunVec;
|
||||
|
||||
#ifdef END
|
||||
out float vlFactor;
|
||||
#endif
|
||||
|
||||
//Attributes//
|
||||
|
||||
//Common Variables//
|
||||
|
||||
//Common Functions//
|
||||
|
||||
//Includes//
|
||||
|
||||
//Program//
|
||||
void main() {
|
||||
gl_Position = ftransform();
|
||||
|
||||
texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy;
|
||||
|
||||
sunVec = GetSunVector();
|
||||
|
||||
#ifdef END
|
||||
vlFactor = texelFetch(colortex5, ivec2(viewWidth-1, viewHeight-1), 0).a;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
//////////////////////////////////////////
|
||||
// Complementary Shaders by EminGT //
|
||||
// With Euphoria Patches by SpacEagle17 //
|
||||
//////////////////////////////////////////
|
||||
|
||||
//Common//
|
||||
#include "/lib/common.glsl"
|
||||
#define ROUGHNESS_MULTIPLIER 1.0 //[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 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
|
||||
#define ROUGHNESS_INTENSITY 1.0 //[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 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0]
|
||||
|
||||
//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader//////////
|
||||
#ifdef FRAGMENT_SHADER
|
||||
|
||||
noperspective in vec2 texCoord;
|
||||
|
||||
in vec3 sunVec;
|
||||
|
||||
#ifdef END
|
||||
in float vlFactor;
|
||||
#endif
|
||||
|
||||
//Pipeline Constants//
|
||||
|
||||
//Common Variables//
|
||||
vec3 upVec = normalize(gbufferModelView[1].xyz);
|
||||
vec3 eastVec = normalize(gbufferModelView[0].xyz);
|
||||
vec3 northVec = normalize(gbufferModelView[2].xyz);
|
||||
#ifdef OVERWORLD
|
||||
vec3 lightVec = sunVec * ((timeAngle < 0.5325 || timeAngle > 0.9675) ? 1.0 : -1.0);
|
||||
#else
|
||||
vec3 lightVec = sunVec;
|
||||
#endif
|
||||
float SdotU = dot(sunVec, upVec);
|
||||
float sunFactor = SdotU < 0.0 ? clamp(SdotU + 0.375, 0.0, 0.75) / 0.75 : clamp(SdotU + 0.03125, 0.0, 0.0625) / 0.0625;
|
||||
float sunVisibility = clamp(SdotU + 0.0625, 0.0, 0.125) / 0.125;
|
||||
float sunVisibility2 = sunVisibility * sunVisibility;
|
||||
float shadowTimeVar1 = abs(sunVisibility - 0.5) * 2.0;
|
||||
float shadowTimeVar2 = shadowTimeVar1 * shadowTimeVar1;
|
||||
float shadowTime = shadowTimeVar2 * shadowTimeVar2;
|
||||
float farMinusNear = far - near;
|
||||
float z0;
|
||||
float z1;
|
||||
|
||||
vec2 view = vec2(viewWidth, viewHeight);
|
||||
|
||||
//Common Functions//
|
||||
float GetLinearDepth(float depth) {
|
||||
return (2.0 * near) / (far + near - depth * (far - near));
|
||||
}
|
||||
|
||||
//Includes//
|
||||
#include "/lib/util/spaceConversion.glsl"
|
||||
#include "/lib/util/dither.glsl"
|
||||
#include "/lib/atmospherics/fog/mainFog.glsl"
|
||||
#include "/lib/colors/skyColors.glsl"
|
||||
#include "/lib/colors/lightAndAmbientColors.glsl"
|
||||
#include "/lib/materials/materialMethods/reflections.glsl"
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
#include "/lib/colors/colorMultipliers.glsl"
|
||||
#endif
|
||||
|
||||
//Program//
|
||||
void main() {
|
||||
ivec2 texelCoord = ivec2(texCoord * view);
|
||||
vec4 color = texelFetch(colortex0, texelCoord, 0);
|
||||
vec4 texture4 = texelFetch(colortex4, texelCoord, 0);
|
||||
|
||||
z0 = texelFetch(depthtex0, texelCoord, 0).r;
|
||||
z1 = texelFetch(depthtex1, texelCoord, 0).r;
|
||||
|
||||
#ifdef ATM_COLOR_MULTS
|
||||
atmColorMult = GetAtmColorMult();
|
||||
sqrtAtmColorMult = sqrt(atmColorMult);
|
||||
#endif
|
||||
|
||||
vec4 reflectOutput = vec4(0.0);
|
||||
if (
|
||||
z0 < 1.0
|
||||
#if WORLD_SPACE_REFLECTIONS_INTERNAL == -1 || WATER_REFLECT_QUALITY <= 0
|
||||
&& z0 == z1
|
||||
#endif
|
||||
) {
|
||||
vec3 texture6 = texelFetch(colortex6, texelCoord, 0).rgb;
|
||||
vec3 normalM = mat3(gbufferModelView) * texture4.rgb;
|
||||
vec4 screenPos = vec4(texCoord, z0, 1.0);
|
||||
vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0);
|
||||
viewPos /= viewPos.w;
|
||||
float lViewPos = length(viewPos);
|
||||
vec3 nViewPos = normalize(viewPos.xyz);
|
||||
vec3 playerPos = ViewToPlayer(viewPos.xyz);
|
||||
bool entityOrParticle = z0 < 0.56;
|
||||
|
||||
float dither = texture2DLod(noisetex, gl_FragCoord.xy / 128.0, 0.0).b;
|
||||
#if defined TAA || defined PBR_REFLECTIONS
|
||||
dither = fract(dither + goldenRatio * mod(float(frameCounter), 3600.0));
|
||||
#endif
|
||||
|
||||
int materialMaskInt = int(texture6.g * 255.1);
|
||||
float skyLightFactor = texture6.b;
|
||||
float smoothnessD = texture6.r;
|
||||
float fresnelM = texture4.a;
|
||||
float intenseFresnel = 0.0;
|
||||
float ssao = 1.0;
|
||||
vec3 reflectColor = vec3(1.0);
|
||||
|
||||
#ifdef IRIS_FEATURE_FADE_VARIABLE
|
||||
if (skyLightFactor > 0.50001) skyLightFactor = eyeBrightnessM;
|
||||
else skyLightFactor *= 1.9999;
|
||||
#endif
|
||||
|
||||
#include "/lib/materials/materialHandling/deferredMaterials.glsl"
|
||||
|
||||
float fresnel = clamp(1.0 + dot(normalM, nViewPos), 0.0, 1.0);
|
||||
|
||||
if (fresnelM > 0.0) {
|
||||
#ifdef TAA
|
||||
float noiseMult = 0.3;
|
||||
#else
|
||||
float noiseMult = 0.3;
|
||||
#endif
|
||||
#ifdef PBR_REFLECTIONS
|
||||
bool opaqueSurface = z0 == z1;
|
||||
float minBlendFactor = 0.035 + 0.09 * pow2(pow2(pow2(smoothnessD)));
|
||||
|
||||
if (entityOrParticle) {
|
||||
noiseMult *= 0.125;
|
||||
minBlendFactor = 0.125;
|
||||
if (!opaqueSurface) reflectColor = vec3(0.0);
|
||||
}
|
||||
#endif
|
||||
float smoothnessDM = smoothnessD * ROUGHNESS_MULTIPLIER;
|
||||
noiseMult *= pow2(1.0 - smoothnessDM) * ROUGHNESS_INTENSITY;
|
||||
|
||||
vec2 roughCoord = gl_FragCoord.xy / 128.0;
|
||||
vec3 roughNoise = vec3(
|
||||
texture2DLod(noisetex, roughCoord, 0.0).r,
|
||||
texture2DLod(noisetex, roughCoord + 0.09375, 0.0).r,
|
||||
texture2DLod(noisetex, roughCoord + 0.1875, 0.0).r
|
||||
);
|
||||
roughNoise = fract(roughNoise + vec3(dither, dither * goldenRatio, dither * pow2(goldenRatio)));
|
||||
roughNoise = noiseMult * (roughNoise - vec3(0.5));
|
||||
|
||||
vec3 refNormal = normalM + roughNoise;
|
||||
|
||||
float enderDragonDead = 1.0 - texelFetch(colortex5, ivec2(viewWidth-1, viewHeight-1), 0).a;
|
||||
|
||||
vec4 reflection = GetReflection(refNormal, viewPos.xyz, nViewPos, playerPos, lViewPos, z0,
|
||||
depthtex1, dither, skyLightFactor, fresnel,
|
||||
smoothnessDM, vec3(0.0), vec3(0.0), vec3(0.0), 0.0, enderDragonDead, vec2(0.0));
|
||||
|
||||
reflection.rgb *= reflectColor;
|
||||
reflectOutput = reflection;
|
||||
|
||||
#ifdef PBR_REFLECTIONS
|
||||
if (opaqueSurface) {
|
||||
refDist = min(refDist, far - lViewPos);
|
||||
vec4 virtualRefPos = vec4(viewPos.xyz + refDist * nViewPos, 1.0);
|
||||
vec4 playerVirtualRefPos = gbufferModelViewInverse * virtualRefPos; // note: don't need to do perspective division with model view matrix
|
||||
vec4 virtualPrevRefPos = playerVirtualRefPos;
|
||||
virtualPrevRefPos.xyz -= previousCameraPosition - cameraPosition;
|
||||
virtualPrevRefPos = gbufferPreviousProjection * (gbufferPreviousModelView * virtualPrevRefPos);
|
||||
virtualPrevRefPos.xyz = 0.5 * virtualPrevRefPos.xyz / virtualPrevRefPos.w + 0.5;
|
||||
virtualPrevRefPos.z = min(1, virtualPrevRefPos.z);
|
||||
if (virtualPrevRefPos.xyz == clamp01(virtualPrevRefPos.xyz)) {
|
||||
vec4 prevPos = gbufferProjection * (
|
||||
gbufferModelView * vec4(
|
||||
playerPos + (cameraPosition - previousCameraPosition) +
|
||||
gbufferModelViewInverse[3].xyz - transpose(mat3(gbufferPreviousModelView)) * gbufferPreviousModelView[3].xyz
|
||||
, 1.0
|
||||
)
|
||||
);
|
||||
prevPos.xyz = 0.5 * prevPos.xyz / prevPos.w + 0.5;
|
||||
virtualPrevRefPos.xy *= view;
|
||||
virtualPrevRefPos.xy = (
|
||||
smoothstep(0, 1, smoothstep(0, 1, fract(virtualPrevRefPos.xy - 0.5))) +
|
||||
floor(virtualPrevRefPos.xy - 0.5) +
|
||||
0.5
|
||||
) / view;
|
||||
|
||||
float linearZ1 = GetLinearDepth(z1);
|
||||
vec2 pixelMovement = view * (prevPos.xy - texCoord);
|
||||
vec3 prevNormalM = mat3(gbufferModelView) * texture2D(colortex1, virtualPrevRefPos.xy).rgb;
|
||||
|
||||
vec4 prevRefCurrentPosHeuristic = playerVirtualRefPos;
|
||||
prevRefCurrentPosHeuristic.xyz += normalize(previousCameraPosition - cameraPosition - playerVirtualRefPos.xyz) * refDist;
|
||||
prevRefCurrentPosHeuristic = gbufferProjection * (gbufferModelView * prevRefCurrentPosHeuristic);
|
||||
prevRefCurrentPosHeuristic.xyz = 0.5 * prevRefCurrentPosHeuristic.xyz / prevRefCurrentPosHeuristic.w + 0.5;
|
||||
|
||||
vec4 prevRef = texture2D(colortex7, virtualPrevRefPos.xy);
|
||||
float prevValid = exp(
|
||||
- 0.03 * length(view * (virtualPrevRefPos.xy - texCoord))
|
||||
- min(0.75, 10.0 * sqrt(length(cameraPosition - previousCameraPosition)))
|
||||
- 0.003 * length(pixelMovement)
|
||||
- 12.0 * length(normalM - prevNormalM)
|
||||
- abs(prevRef.a - linearZ1) * far / 1.0
|
||||
- 10 * length(prevRefCurrentPosHeuristic.xy - clamp01(prevRefCurrentPosHeuristic.xy))
|
||||
);
|
||||
|
||||
reflectOutput.rgb = mix(prevRef.rgb, reflectOutput.rgb, min1(minBlendFactor / prevValid));
|
||||
reflectOutput.a = linearZ1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* DRAWBUFFERS:7 */
|
||||
gl_FragData[0] = reflectOutput;
|
||||
|
||||
// same check as #ifdef PBR_REFLECTIONS but for Optifine to understand:
|
||||
#if BLOCK_REFLECT_QUALITY >= 2 && RP_MODE >= 1
|
||||
/* DRAWBUFFERS:71 */
|
||||
gl_FragData[1] = vec4(texture4.rgb, 1.0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader//////////
|
||||
#ifdef VERTEX_SHADER
|
||||
|
||||
noperspective out vec2 texCoord;
|
||||
|
||||
out vec3 sunVec;
|
||||
|
||||
#ifdef END
|
||||
out float vlFactor;
|
||||
#endif
|
||||
|
||||
//Attributes//
|
||||
|
||||
//Common Variables//
|
||||
|
||||
//Common Functions//
|
||||
|
||||
//Includes//
|
||||
|
||||
//Program//
|
||||
void main() {
|
||||
gl_Position = ftransform();
|
||||
|
||||
texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy;
|
||||
|
||||
sunVec = GetSunVector();
|
||||
|
||||
#ifdef END
|
||||
vlFactor = texelFetch(colortex5, ivec2(viewWidth-1, viewHeight-1), 0).a;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user