105 lines
3.6 KiB
GLSL
105 lines
3.6 KiB
GLSL
#version 120
|
|
|
|
#define composite2
|
|
#define gbuffers_texturedblock
|
|
#define lightingColors
|
|
#include "/shaders.settings"
|
|
|
|
varying vec4 color;
|
|
varying vec2 texcoord;
|
|
varying vec3 ambientNdotL;
|
|
|
|
uniform vec3 sunPosition;
|
|
uniform vec3 upPosition;
|
|
|
|
uniform int worldTime;
|
|
uniform float rainStrength;
|
|
uniform float nightVision;
|
|
uniform float screenBrightness;
|
|
|
|
const vec3 ToD[7] = vec3[7]( vec3(0.58597,0.15,0.02),
|
|
vec3(0.58597,0.35,0.09),
|
|
vec3(0.58597,0.5,0.26),
|
|
vec3(0.58597,0.5,0.35),
|
|
vec3(0.58597,0.5,0.36),
|
|
vec3(0.58597,0.5,0.37),
|
|
vec3(0.58597,0.5,0.38));
|
|
#ifdef TAA
|
|
uniform float viewWidth;
|
|
uniform float viewHeight;
|
|
vec2 texelSize = vec2(1.0/viewWidth,1.0/viewHeight);
|
|
uniform int framemod8;
|
|
const vec2[8] offsets = vec2[8](vec2(1./8.,-3./8.),
|
|
vec2(-1.,3.)/8.,
|
|
vec2(5.0,1.)/8.,
|
|
vec2(-3,-5.)/8.,
|
|
vec2(-5.,5.)/8.,
|
|
vec2(-7.,-1.)/8.,
|
|
vec2(3,7.)/8.,
|
|
vec2(7.,-7.)/8.);
|
|
#endif
|
|
|
|
void main() {
|
|
|
|
//setup basics
|
|
color = gl_Color;
|
|
gl_Position = ftransform();
|
|
#ifdef TAA
|
|
gl_Position.xy += offsets[framemod8] * gl_Position.w*texelSize;
|
|
#endif
|
|
vec3 normal = normalize(gl_NormalMatrix * gl_Normal);
|
|
texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy;
|
|
vec2 lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy;
|
|
/*--------------------------------*/
|
|
|
|
//Emissive blocks lighting in order to fix lighting on particles
|
|
float torch_lightmap = 16.0-min(15.,(lmcoord.s-0.5/16.)*16.*16./15);
|
|
float fallof1 = clamp(1.0 - pow(torch_lightmap/16.0,4.0),0.0,1.0);
|
|
torch_lightmap = fallof1*fallof1/(torch_lightmap*torch_lightmap+1.0);
|
|
vec3 emissiveLightC = vec3(emissive_R,emissive_G,emissive_B)*torch_lightmap;
|
|
float finalminlight = (nightVision > 0.01)? 0.025 : ((minlight+0.006)+(screenBrightness*0.0125))*0.5;
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
//reduced the sun color to a 7 array
|
|
float hour = max(mod(worldTime/1000.0+2.0,24.0)-2.0,0.0); //-0.1
|
|
float cmpH = max(-abs(floor(hour)-6.0)+6.0,0.0); //12
|
|
float cmpH1 = max(-abs(floor(hour)-5.0)+6.0,0.0); //1
|
|
|
|
vec3 temp = ToD[int(cmpH)];
|
|
vec3 temp2 = ToD[int(cmpH1)];
|
|
|
|
vec3 sunlight = mix(temp,temp2,fract(hour));
|
|
const vec3 rainC = vec3(0.01,0.01,0.01);
|
|
sunlight = mix(sunlight,rainC*sunlight,rainStrength);
|
|
/*-------------------------------------------------------------------*/
|
|
|
|
const vec3 moonlight = vec3(0.0024, 0.00432, 0.0078);
|
|
|
|
vec3 sunVec = normalize(sunPosition);
|
|
vec3 upVec = vec3(0.0, 1.0, 0.0); //fix for loading shaderpacks in nether and end, optifine bug.
|
|
|
|
vec2 visibility = vec2(dot(sunVec,upVec),dot(-sunVec,upVec));
|
|
|
|
float NdotL = dot(normal,sunVec);
|
|
float NdotU = dot(normal,upVec);
|
|
|
|
vec2 trCalc = min(abs(worldTime-vec2(23250.0,12700.0)),750.0);
|
|
float tr = max(min(trCalc.x,trCalc.y)/375.0-1.0,0.0);
|
|
visibility = pow(clamp(visibility+0.15,0.0,0.15)/0.15,vec2(4.0));
|
|
|
|
float skyL = max(lmcoord.t-2./16.0,0.0)*1.14285714286;
|
|
float SkyL2 = skyL*skyL;
|
|
float skyc2 = mix(1.0,SkyL2,skyL);
|
|
|
|
vec4 bounced = vec4(NdotL,NdotL,NdotL,NdotU) * vec4(-0.14*skyL*skyL,0.34,0.7,0.1) + vec4(0.6,0.66,0.7,0.25);
|
|
bounced *= vec4(skyc2,skyc2,visibility.x-tr*visibility.x,0.8);
|
|
|
|
vec3 sun_ambient = bounced.w * (vec3(0.1, 0.5, 1.1)+rainStrength*vec3(0.05,-0.27,-0.8))*2.3+ 1.7*sunlight*(sqrt(bounced.w)*bounced.x*2.4 + bounced.z)*(1.0-rainStrength*0.98);
|
|
vec3 moon_ambient = (moonlight*0.7 + moonlight*bounced.y)*(1.0-rainStrength*0.95)*2.0;
|
|
|
|
vec3 amb1 = (sun_ambient*visibility.x + moon_ambient*visibility.y)*SkyL2*(0.03+tr*0.17)*0.65;
|
|
ambientNdotL.rgb = amb1 + emissiveLightC + finalminlight;
|
|
|
|
sunlight = mix(sunlight,moonlight*(1.0-rainStrength*0.9),visibility.y)*tr;
|
|
|
|
} |