35 lines
1.4 KiB
GLSL
35 lines
1.4 KiB
GLSL
vec2 Reprojection(vec3 pos) {
|
|
pos = pos * 2.0 - 1.0;
|
|
|
|
vec4 viewPosPrev = gbufferProjectionInverse * vec4(pos, 1.0);
|
|
viewPosPrev /= viewPosPrev.w;
|
|
viewPosPrev = gbufferModelViewInverse * viewPosPrev;
|
|
|
|
vec3 cameraOffset = cameraPosition - previousCameraPosition;
|
|
cameraOffset *= float(pos.z > 0.56);
|
|
|
|
vec4 previousPosition = viewPosPrev + vec4(cameraOffset, 0.0);
|
|
previousPosition = gbufferPreviousModelView * previousPosition;
|
|
previousPosition = gbufferPreviousProjection * previousPosition;
|
|
return previousPosition.xy / previousPosition.w * 0.5 + 0.5;
|
|
}
|
|
|
|
vec3 ApplyMultiColoredBlocklight(vec3 blocklightCol, vec3 screenPos) {
|
|
if (screenPos.z > 0.56) {
|
|
screenPos.xy = Reprojection(screenPos);
|
|
}
|
|
vec3 coloredLight = texture2DLod(colortex9, screenPos.xy, 2).rgb;
|
|
|
|
#ifndef MCBL_LEGACY_COLOR
|
|
vec3 coloredLightNormalized = coloredLight + 0.000001;
|
|
coloredLightNormalized = normalize(coloredLightNormalized * coloredLightNormalized) * 0.875 + 0.125;
|
|
coloredLightNormalized *= GetLuminance(blocklightCol) * 1.7;
|
|
float coloredLightMix = min((coloredLight.r + coloredLight.g + coloredLight.b) * 2048.0, 1.0);
|
|
#else
|
|
vec3 coloredLightNormalized = normalize(coloredLight + 0.00001);
|
|
coloredLightNormalized *= GetLuminance(blocklightCol) / GetLuminance(coloredLightNormalized);
|
|
float coloredLightMix = min((coloredLight.r + coloredLight.g + coloredLight.b) * 256.0, 1.0);
|
|
#endif
|
|
|
|
return mix(blocklightCol, coloredLightNormalized, coloredLightMix);
|
|
} |