162 lines
4.0 KiB
GLSL
162 lines
4.0 KiB
GLSL
/*
|
|
BSL Shaders v8 Series by Capt Tatsu
|
|
https://bitslablab.com
|
|
*/
|
|
|
|
//Settings//
|
|
#include "/lib/settings.glsl"
|
|
|
|
//Fragment Shader///////////////////////////////////////////////////////////////////////////////////
|
|
#ifdef FSH
|
|
|
|
//Varyings//
|
|
varying float star;
|
|
|
|
varying vec3 upVec, sunVec;
|
|
|
|
//Uniforms//
|
|
uniform int frameCounter;
|
|
uniform int isEyeInWater;
|
|
uniform int moonPhase;
|
|
uniform int worldTime;
|
|
|
|
uniform float blindFactor, darknessFactor;
|
|
uniform float far, near;
|
|
uniform float frameTimeCounter;
|
|
uniform float nightVision;
|
|
uniform float rainStrength;
|
|
uniform float shadowFade, voidFade;
|
|
uniform float timeAngle, timeBrightness;
|
|
uniform float viewWidth, viewHeight;
|
|
|
|
uniform ivec2 eyeBrightnessSmooth;
|
|
|
|
uniform vec3 cameraPosition;
|
|
|
|
uniform mat4 gbufferModelView;
|
|
uniform mat4 gbufferModelViewInverse;
|
|
uniform mat4 gbufferProjectionInverse;
|
|
|
|
uniform sampler2D noisetex;
|
|
|
|
//Common Variables//
|
|
#ifdef WORLD_TIME_ANIMATION
|
|
float frametime = float(worldTime) * 0.05 * ANIMATION_SPEED;
|
|
#else
|
|
float frametime = frameTimeCounter * ANIMATION_SPEED;
|
|
#endif
|
|
|
|
float eBS = eyeBrightnessSmooth.y / 240.0;
|
|
float sunVisibility = clamp((dot( sunVec, upVec) + 0.05) * 10.0, 0.0, 1.0);
|
|
float moonVisibility = clamp((dot(-sunVec, upVec) + 0.05) * 10.0, 0.0, 1.0);
|
|
|
|
vec3 lightVec = sunVec * (1.0 - 2.0 * float(timeAngle > 0.5325 && timeAngle < 0.9675));
|
|
|
|
vec3 moonPhaseVecs[8] = vec3[8](
|
|
vec3( 0.0 , 0.0 , 1.0 ),
|
|
vec3( 0.0 , -0.89, 0.45),
|
|
vec3( 0.0 , -1.0 , 0.0 ),
|
|
vec3( 0.0 , -0.45, -0.89),
|
|
vec3( 0.0 , 0.0 , -1.0 ),
|
|
vec3( 0.0 , 0.45, -0.89),
|
|
vec3( 0.0 , 1.0 , 0.0 ),
|
|
vec3( 0.0 , 0.89, 0.45)
|
|
);
|
|
|
|
vec2 moonDiffuse[8] = vec2[8](
|
|
vec2( 0.0 , 0.0 ),
|
|
vec2(-0.125, 1.0 ),
|
|
vec2(-0.2 , 0.625),
|
|
vec2(-0.8 , 0.375),
|
|
vec2(-0.75 , -0.25 ),
|
|
vec2(-0.8 , 0.375),
|
|
vec2(-0.2 , 0.625),
|
|
vec2(-0.125, 1.0 )
|
|
);
|
|
|
|
//Includes//
|
|
#include "/lib/common.glsl"
|
|
#include "/lib/color/dimensionColor.glsl"
|
|
#include "/lib/color/skyColor.glsl"
|
|
#include "/lib/util/dither.glsl"
|
|
#include "/lib/atmospherics/weatherDensity.glsl"
|
|
#include "/lib/atmospherics/clouds.glsl"
|
|
#include "/lib/atmospherics/sky.glsl"
|
|
#include "/lib/atmospherics/sunmoon.glsl"
|
|
|
|
//Program//
|
|
void main() {
|
|
vec3 albedo = vec3(0.0);
|
|
|
|
#if defined OVERWORLD && !defined SKY_DEFERRED
|
|
vec4 screenPos = vec4(gl_FragCoord.xy / vec2(viewWidth, viewHeight), gl_FragCoord.z, 1.0);
|
|
vec4 viewPos = gbufferProjectionInverse * (screenPos * 2.0 - 1.0);
|
|
viewPos /= viewPos.w;
|
|
|
|
albedo = GetSkyColor(viewPos.xyz, false);
|
|
|
|
#ifdef ROUND_SUN_MOON
|
|
vec3 lightMA = mix(lightMorning, lightEvening, mefade);
|
|
vec3 sunColor = mix(lightMA, sqrt(lightDay * lightMA * LIGHT_DI), timeBrightness);
|
|
vec3 moonColor = lightNight * 1.25;
|
|
|
|
RoundSunMoon(albedo, viewPos.xyz, sunColor, moonColor);
|
|
#endif
|
|
|
|
#ifdef STARS
|
|
if (moonVisibility > 0.0) DrawStars(albedo.rgb, viewPos.xyz);
|
|
#endif
|
|
|
|
float dither = Bayer8(gl_FragCoord.xy);
|
|
|
|
#ifdef AURORA
|
|
albedo.rgb += DrawAurora(viewPos.xyz, dither, 24);
|
|
#endif
|
|
|
|
SunGlare(albedo, viewPos.xyz, lightCol);
|
|
|
|
albedo.rgb *= 1.0 + nightVision;
|
|
#ifdef CLASSIC_EXPOSURE
|
|
albedo.rgb *= 4.0 - 3.0 * eBS;
|
|
#endif
|
|
|
|
#if ALPHA_BLEND == 0
|
|
albedo.rgb = sqrt(max(albedo.rgb, vec3(0.0)));
|
|
albedo.rgb = albedo.rgb + dither / vec3(128.0);
|
|
#endif
|
|
#endif
|
|
|
|
/* DRAWBUFFERS:0 */
|
|
gl_FragData[0] = vec4(albedo, 1.0 - star);
|
|
}
|
|
|
|
#endif
|
|
|
|
//Vertex Shader/////////////////////////////////////////////////////////////////////////////////////
|
|
#ifdef VSH
|
|
|
|
//Varyings//
|
|
varying float star;
|
|
|
|
varying vec3 sunVec, upVec;
|
|
|
|
//Uniforms//
|
|
uniform float timeAngle;
|
|
|
|
uniform mat4 gbufferModelView;
|
|
|
|
//Program//
|
|
void main() {
|
|
const vec2 sunRotationData = vec2(cos(sunPathRotation * 0.01745329251994), -sin(sunPathRotation * 0.01745329251994));
|
|
float ang = fract(timeAngle - 0.25);
|
|
ang = (ang + (cos(ang * 3.14159265358979) * -0.5 + 0.5 - ang) / 3.0) * 6.28318530717959;
|
|
sunVec = normalize((gbufferModelView * vec4(vec3(-sin(ang), cos(ang) * sunRotationData) * 2000.0, 1.0)).xyz);
|
|
|
|
upVec = normalize(gbufferModelView[1].xyz);
|
|
|
|
gl_Position = ftransform();
|
|
|
|
star = float(gl_Color.r == gl_Color.g && gl_Color.g == gl_Color.b && gl_Color.r > 0.0);
|
|
}
|
|
|
|
#endif |