Solara-Shaders/shaders/program/composite3.glsl
2024-06-22 15:15:55 -04:00

151 lines
3.4 KiB
GLSL

/*
BSL Shaders v8 Series by Capt Tatsu
https://bitslablab.com
*/
//Settings//
#include "/lib/settings.glsl"
//Fragment Shader///////////////////////////////////////////////////////////////////////////////////
#ifdef FSH
//Varyings//
varying vec2 texCoord;
//Uniforms//
uniform float viewWidth, viewHeight, aspectRatio;
uniform float centerDepthSmooth;
uniform mat4 gbufferProjection;
uniform sampler2D colortex0;
uniform sampler2D depthtex1;
//Optifine Constants//
const bool colortex0MipmapEnabled = true;
//Common Variables//
vec2 dofOffsets[60] = vec2[60](
vec2( 0.0 , 0.25 ),
vec2(-0.2165 , 0.125 ),
vec2(-0.2165 , -0.125 ),
vec2( 0 , -0.25 ),
vec2( 0.2165 , -0.125 ),
vec2( 0.2165 , 0.125 ),
vec2( 0 , 0.5 ),
vec2(-0.25 , 0.433 ),
vec2(-0.433 , 0.25 ),
vec2(-0.5 , 0 ),
vec2(-0.433 , -0.25 ),
vec2(-0.25 , -0.433 ),
vec2( 0 , -0.5 ),
vec2( 0.25 , -0.433 ),
vec2( 0.433 , -0.2 ),
vec2( 0.5 , 0 ),
vec2( 0.433 , 0.25 ),
vec2( 0.25 , 0.433 ),
vec2( 0 , 0.75 ),
vec2(-0.2565 , 0.7048),
vec2(-0.4821 , 0.5745),
vec2(-0.51295, 0.375 ),
vec2(-0.7386 , 0.1302),
vec2(-0.7386 , -0.1302),
vec2(-0.51295, -0.375 ),
vec2(-0.4821 , -0.5745),
vec2(-0.2565 , -0.7048),
vec2(-0 , -0.75 ),
vec2( 0.2565 , -0.7048),
vec2( 0.4821 , -0.5745),
vec2( 0.51295, -0.375 ),
vec2( 0.7386 , -0.1302),
vec2( 0.7386 , 0.1302),
vec2( 0.51295, 0.375 ),
vec2( 0.4821 , 0.5745),
vec2( 0.2565 , 0.7048),
vec2( 0 , 1 ),
vec2(-0.2588 , 0.9659),
vec2(-0.5 , 0.866 ),
vec2(-0.7071 , 0.7071),
vec2(-0.866 , 0.5 ),
vec2(-0.9659 , 0.2588),
vec2(-1 , 0 ),
vec2(-0.9659 , -0.2588),
vec2(-0.866 , -0.5 ),
vec2(-0.7071 , -0.7071),
vec2(-0.5 , -0.866 ),
vec2(-0.2588 , -0.9659),
vec2(-0 , -1 ),
vec2( 0.2588 , -0.9659),
vec2( 0.5 , -0.866 ),
vec2( 0.7071 , -0.7071),
vec2( 0.866 , -0.5 ),
vec2( 0.9659 , -0.2588),
vec2( 1 , 0 ),
vec2( 0.9659 , 0.2588),
vec2( 0.866 , 0.5 ),
vec2( 0.7071 , 0.7071),
vec2( 0.5 , 0.8660),
vec2( 0.2588 , 0.9659)
);
//Common Functions//
vec3 DepthOfField(vec3 color, float z) {
vec3 dof = vec3(0.0);
float hand = float(z < 0.56);
float fovScale = gbufferProjection[1][1] / 1.37;
float coc = max(abs(z - centerDepthSmooth) * DOF_STRENGTH - 0.01, 0.0);
coc = coc / sqrt(coc * coc + 0.1);
if (coc > 0.0 && hand < 0.5) {
for(int i = 0; i < 60; i++) {
vec2 offset = dofOffsets[i] * coc * 0.015 * fovScale * vec2(1.0 / aspectRatio, 1.0);
float lod = log2(viewHeight * aspectRatio * coc * fovScale / 320.0);
dof += texture2DLod(colortex0, texCoord + offset, lod).rgb;
}
dof /= 60.0;
}
else dof = color;
return dof;
}
//Includes//
#ifdef OUTLINE_OUTER
#include "/lib/util/outlineOffset.glsl"
#include "/lib/util/outlineDepth.glsl"
#endif
//Program//
void main() {
vec3 color = texture2DLod(colortex0, texCoord, 0.0).rgb;
#ifdef DOF
float z = texture2D(depthtex1, texCoord.st).x;
#ifdef OUTLINE_OUTER
DepthOutline(z, depthtex1);
#endif
color = DepthOfField(color, z);
#endif
/*DRAWBUFFERS:0*/
gl_FragData[0] = vec4(color,1.0);
}
#endif
//Vertex Shader/////////////////////////////////////////////////////////////////////////////////////
#ifdef VSH
//Varyings//
varying vec2 texCoord;
//Program//
void main() {
texCoord = gl_MultiTexCoord0.xy;
gl_Position = ftransform();
}
#endif