151 lines
3.4 KiB
GLSL
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 |