Files
Gregtech-New-Bastards/.minecraft/shaderpacks/ComplementaryShaders_v4.6/shaders/program/final.glsl
2025-05-29 23:31:29 +02:00

174 lines
4.4 KiB
GLSL

/*
Complementary Shaders by EminGT, based on BSL Shaders by Capt Tatsu
*/
//Common//
#include "/lib/common.glsl"
//Varyings//
varying vec2 texCoord;
//////////Fragment Shader//////////Fragment Shader//////////Fragment Shader//////////
#ifdef FSH
//Uniforms//
uniform sampler2D colortex1;
uniform float viewWidth, viewHeight;
#if THE_FORBIDDEN_OPTION > 0
uniform float frameTimeCounter;
#endif
#if defined GRAY_START || (defined WATERMARK && WATERMARK_DURATION < 900)
uniform float starter;
#endif
#ifdef WATERMARK
uniform sampler2D depthtex2;
#endif
//Optifine Constants//
/*
const int colortex0Format = R11F_G11F_B10F; //main
const int colortex1Format = RGB8; //raw albedo & raw translucent & water mask & vl & bloom
const int colortex2Format = RGBA16; //temporal stuff
const int colortex3Format = RGB8; //specular & skymapMod
const int gaux1Format = R8; //half-res ao
const int gaux2Format = RGBA8; //reflection
const int gaux3Format = RG16; //normals
const int gaux4Format = RGB8; //taa mask & galaxy image
#ifdef COLORED_LIGHT
const int colortex8Format = RGB16;
const int colortex9Format = RGB16;
#endif
*/
const bool shadowHardwareFiltering = true;
const float shadowDistanceRenderMul = 1.0;
const float entityShadowDistanceMul = 0.125; // Iris devs may bless us with their power
const int noiseTextureResolution = 512;
const float drynessHalflife = 300.0;
const float wetnessHalflife = 300.0;
const float ambientOcclusionLevel = 1.0;
//Common Functions//
#if SHARPEN > 0
vec2 sharpenOffsets[4] = vec2[4](
vec2( 1.0, 0.0),
vec2( 0.0, 1.0),
vec2(-1.0, 0.0),
vec2( 0.0, -1.0)
);
void SharpenFilter(inout vec3 color, vec2 texCoord2) {
float mult = SHARPEN * 0.025;
vec2 view = 1.0 / vec2(viewWidth, viewHeight);
color *= SHARPEN * 0.1 + 1.0;
for(int i = 0; i < 4; i++) {
vec2 offset = sharpenOffsets[i] * view;
color -= texture2DLod(colortex1, texCoord2 + offset, 0).rgb * mult;
}
}
#endif
#ifdef GRAY_START
float GetLuminance(vec3 color) {
return dot(color, vec3(0.299, 0.587, 0.114));
}
#endif
//Program//
void main() {
#ifndef OVERDRAW
vec2 texCoord2 = texCoord;
#else
vec2 texCoord2 = (texCoord - vec2(0.5)) * (2.0 / 3.0) + vec2(0.5);
#endif
/*
vec2 wh = vec2(viewWidth, viewHeight);
wh /= 32.0;
texCoord2 = floor(texCoord2 * wh) / wh;
*/
#if CHROMATIC_ABERRATION < 1
vec3 color = texture2DLod(colortex1, texCoord2, 0).rgb;
#else
float midDistX = texCoord2.x - 0.5;
float midDistY = texCoord2.y - 0.5;
vec2 scale = vec2(1.0, viewHeight / viewWidth);
vec2 aberration = vec2(midDistX, midDistY) * (2.0 / vec2(viewWidth, viewHeight)) * scale * CHROMATIC_ABERRATION;
vec3 color = vec3(texture2DLod(colortex1, texCoord2 + aberration, 0).r,
texture2DLod(colortex1, texCoord2, 0).g,
texture2DLod(colortex1, texCoord2 - aberration, 0).b);
#endif
#if SHARPEN > 0
SharpenFilter(color, texCoord2);
#endif
#if THE_FORBIDDEN_OPTION > 0
#if THE_FORBIDDEN_OPTION < 3
float fractTime = fract(frameTimeCounter*0.01);
color = pow(vec3(1.0) - color, vec3(5.0));
color = vec3(color.r + color.g + color.b)*0.5;
color.g = 0.0;
if (fractTime < 0.5) color.b *= fractTime, color.r *= 0.5 - fractTime;
if (fractTime >= 0.5) color.b *= 1 - fractTime, color.r *= fractTime - 0.5;
color = pow(color, vec3(1.8))*8;
#else
float colorM = dot(color, vec3(0.299, 0.587, 0.114));
color = vec3(colorM);
#endif
#endif
#ifdef WATERMARK
#if WATERMARK_DURATION < 900
if (starter < 0.99) {
#endif
vec2 textCoord = vec2(texCoord.x, 1.0 - texCoord.y);
vec4 compText = texture2D(depthtex2, textCoord);
//compText.rgb = pow(compText.rgb, vec3(2.2));
#if WATERMARK_DURATION < 900
float starterFactor = 1.0 - 2.0 * abs(starter - 0.5);
starterFactor = max(starterFactor - 0.333333, 0.0) * 3.0;
starterFactor = smoothstep(0.0, 1.0, starterFactor);
#else
float starterFactor = 1.0;
#endif
color.rgb = mix(color.rgb, compText.rgb, compText.a * starterFactor);
#if WATERMARK_DURATION < 900
}
#endif
#endif
#ifdef GRAY_START
float animation = min(starter, 0.1) * 10.0;
vec3 grayStart = vec3(GetLuminance(color.rgb));
color.rgb = mix(grayStart, color.rgb, animation);
#endif
gl_FragColor = vec4(color, 1.0);
}
#endif
//////////Vertex Shader//////////Vertex Shader//////////Vertex Shader//////////
#ifdef VSH
//Program//
void main() {
texCoord = gl_MultiTexCoord0.xy;
gl_Position = ftransform();
}
#endif