@@ -12,17 +12,25 @@ vec4 minecraft_mix_light(vec3 lightDir0, vec3 lightDir1, vec3 normal, vec4 color
1212 return vec4 (color.rgb * lightAccum, color.a);
1313}
1414
15+ #define NCOLOR normalize (vec3 (0.0 , 0.0 , 1.0 ))
16+ #define DCOLOR normalize (vec3 (1.0 ))
17+
18+ float getSun(sampler2D lightmap) {
19+ vec3 sunlight = normalize (texture(lightmap, vec2 (0.5 / 16.0 , 15.5 / 16.0 )).rgb);
20+ return clamp (pow (length (sunlight - NCOLOR) / length (DCOLOR - NCOLOR), 4.0 ), 0.0 , 1.0 );
21+ }
22+
1523vec4 getlight(sampler2D lightmap, ivec2 uv) {
16- float sun = uv.y / 256 .;
24+ float sun = uv.y / 256 . * getSun(lightmap) ;
1725 float torch = uv.x / 256 .;
1826 vec4 light = texture(lightmap, clamp (uv / 256.0 , vec2 (0.5 / 16.0 ), vec2 (15.5 / 16.0 )));
1927
2028 vec3 map = texelFetch(lightmap, ivec2 (0 ), 0 ).rgb;
2129 // warmer blocklight (torch AND (NOT sun))
22- light *= mix (vec4 (1.0 ), vec4 (1.7 , 1.0 , 0.4 , 1.0 ), torch * (1.0 - sun));
30+ light *= mix (vec4 (1.0 ), vec4 (1.7 , 1.0 , 0.5 , 1.0 ), torch * (1.0 - sun));
2331 // shadows colors (NOT (torch OR sun))
2432 if (map.r == map.g && map.g == map.b) { // bluer shadows in overworld
25- light *= mix (vec4 (1.0 ), vec4 (0.2 , 0.2 , 0.9 , 1.0 ), max (1.0 - (torch + sun), 0.0 ));
33+ light *= mix (vec4 (1.0 ), vec4 (0.2 , 0.2 , 0.8 , 1.0 ), max (1.0 - (torch + sun), 0.0 ));
2634 } else if (map.r > map.g) { // redder shadows in nether
2735 light *= mix (vec4 (1.0 ), vec4 (0.9 , 0.6 , 0.5 , 1.0 ), max (1.0 - (torch + sun), 0.0 ));
2836 } else { // purple shadows in end
@@ -40,6 +48,7 @@ vec4 emissive(vec4 color, vec4 light, float dist) {
4048 if (color.a - EMISSIVE_ALPHA < 0.001 ) {
4149 return mix (color, cl, lum);
4250 }
51+ // small light around camera
4352 dist = 1 . - clamp (dist- 1 , 0.0 , 5.0 )/ 5.0 ;
4453 color.rgb *= (light.rgb + (1 - lum) * dist / 20 );
4554 return color;
0 commit comments