Skip to content
This repository was archived by the owner on Dec 12, 2024. It is now read-only.

Commit cc164b9

Browse files
committed
fix fog and water
1 parent 9b40f22 commit cc164b9

36 files changed

+162
-20
lines changed

assets/minecraft/shaders/core/common/block.fsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void main() {
2525
vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator;
2626
float alpha = textureLod(Sampler0, texCoord0, 0.0).a * 255.0;
2727
color = make_emissive(color, lightColor, vertexDistance, alpha);
28-
if (color.a < 0.1) {
28+
if (color.a < 0.5) {
2929
discard;
3030
}
3131
fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor);

assets/minecraft/shaders/core/common/block.vsh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#version 150
22

3+
#moj_import <fog.glsl>
34
#moj_import <tools.glsl>
45
#moj_import <light.glsl>
56

@@ -41,14 +42,15 @@ vec3 quaternionRotate(vec3 pos, vec4 q) {
4142
}
4243

4344
void main() {
45+
vec3 relpos = Position + ChunkOffset;
4446
vec3 position = Position / 2 * pi;
4547
float animation = GameTime * 2048.;
4648
float anim = GameTime * pi;
4749
float time = GameTime * 2048;
4850
float xx = Position.x / 2 * pi;
4951
float yy = Position.y / 2 * pi;
5052
float zz = Position.z / 2 * pi;
51-
float dropoff = max((position.x*position.x) + (position.z*position.z) - 64., 512.) / 512.;
53+
float dropoff = max((relpos.x*relpos.x) + (relpos.z*relpos.z) - 128., 512.) / 512.;
5254
float far = ProjMat[3][2] * 0.05 / (ProjMat[3][2] + 2.0 * 0.05) / 3.0 * sqrt(3);
5355

5456
vec3 offset = vec3(0.0,0.0,0.0);
@@ -76,6 +78,8 @@ void main() {
7678
//waving liquid
7779
else if (alpha == 131) { //water
7880
time = GameTime * 512;
81+
xx = Position.x/16. * 2 * pi;
82+
zz = Position.z/16. * 2 * pi;
7983
if ((mod(Position.y, 1.0) > 0.1) || (mod(Position.y, 1.0) < 0.01)) {
8084
offset.y = ((sin(time + xx) + cos(time + zz)) * 0.02) - 0.02;
8185
offset.y += ((sin(time*7 + xx*4.) + cos(time*7 + zz*4.)) * 0.01) - 0.01;
@@ -87,6 +91,8 @@ void main() {
8791
}
8892
} else if (alpha == 165) { //lava
8993
time = GameTime * 128;
94+
xx = Position.x/16. * 2 * pi;
95+
zz = Position.z/16. * 2 * pi;
9096
if ((mod(Position.y, 1.0) > 0.1) || (mod(Position.y, 1.0) < 0.01)) {
9197
offset.y = ((sin(time + xx) + cos(time + zz)) * 0.02) - 0.01;
9298
offset.y /= dropoff;
@@ -120,7 +126,7 @@ void main() {
120126
}
121127
}
122128

123-
vertexDistance = length((ModelViewMat * vec4(Position + ChunkOffset, 1.0)).xyz);
129+
vertexDistance = cylindrical_distance(ModelViewMat, Position + ChunkOffset);
124130
lightColor = minecraft_sample_lightmap(Sampler2, UV2);
125131
vertexColor = Color;
126132
texCoord0 = UV0;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#version 150
2+
3+
#moj_import <fog.glsl>
4+
#moj_import <emissive_utils.glsl>
5+
#moj_import <utils.glsl>
6+
7+
uniform sampler2D Sampler0;
8+
9+
uniform vec4 ColorModulator;
10+
uniform float FogStart;
11+
uniform float FogEnd;
12+
uniform vec4 FogColor;
13+
14+
in float vertexDistance;
15+
in vec4 vertexColor;
16+
in vec4 lightColor;
17+
in vec2 texCoord0;
18+
in vec4 normal;
19+
in vec4 glpos;
20+
21+
out vec4 fragColor;
22+
23+
void main() {
24+
discardControlGLPos(gl_FragCoord.xy, glpos);
25+
vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator;
26+
float alpha = textureLod(Sampler0, texCoord0, 0.0).a * 255.0;
27+
color = make_emissive(color, lightColor, vertexDistance, alpha);
28+
if (color.a < 0.01) {
29+
discard;
30+
}
31+
fragColor = linear_fog_translucent(color, vertexDistance, FogStart, FogEnd, FogColor);
32+
}

assets/minecraft/shaders/core/common/entity.fsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void main() {
3030
float alpha = textureLod(Sampler0, texCoord0, 0.0).a * 255.0;
3131
color = make_emissive(color, lightColor, vertexDistance, alpha);
3232
}
33-
if (color.a < 0.1) {
33+
if (color.a < 0.01) {
3434
discard;
3535
}
3636
fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor);

assets/minecraft/shaders/core/common/entity.vsh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#version 150
22

3+
#moj_import <fog.glsl>
34
#moj_import <light.glsl>
45
#moj_import <matf.glsl>
56

@@ -16,6 +17,7 @@ uniform sampler2D Sampler2;
1617
uniform float GameTime;
1718
uniform mat4 ProjMat;
1819
uniform mat4 ModelViewMat;
20+
uniform mat3 IViewRotMat;
1921

2022
uniform vec3 Light0_Direction;
2123
uniform vec3 Light1_Direction;
@@ -42,7 +44,7 @@ void main() {
4244
vertexColor = minecraft_mix_light(Light0_Direction, Light1_Direction, normal.xyz, Color);
4345
}
4446

45-
vertexDistance = length((ModelViewMat * vec4(Position, 1.0)).xyz);
47+
vertexDistance = cylindrical_distance(ModelViewMat, IViewRotMat * Position);
4648
lightColor = minecraft_sample_lightmap(Sampler2, UV2);
4749
overlayColor = texelFetch(Sampler1, UV1, 0);
4850
texCoord0 = UV0;

assets/minecraft/shaders/core/common/entity_colored.fsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ out vec4 fragColor;
1717
void main() {
1818
discardControlGLPos(gl_FragCoord.xy, glpos);
1919
vec4 color = texture(Sampler0, texCoord0) * vertexColor;
20-
if (color.a < 0.1) {
20+
if (color.a < 0.01) {
2121
discard;
2222
}
2323
fragColor = color * ColorModulator;

assets/minecraft/shaders/core/common/entity_colored.vsh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#version 150
22

3+
#moj_import <fog.glsl>
4+
35
in vec3 Position;
46
in vec4 Color;
57
in vec2 UV0;
@@ -9,6 +11,7 @@ in vec3 Normal;
911

1012
uniform mat4 ModelViewMat;
1113
uniform mat4 ProjMat;
14+
uniform mat3 IViewRotMat;
1215

1316
out float vertexDistance;
1417
out vec4 vertexColor;
@@ -25,6 +28,6 @@ void main() {
2528
texCoord1 = UV1;
2629
texCoord2 = UV2;
2730
normal = ProjMat * ModelViewMat * vec4(Normal, 0.0);
28-
vertexDistance = length((ModelViewMat * vec4(Position, 1.0)).xyz);
31+
vertexDistance = cylindrical_distance(ModelViewMat, IViewRotMat * Position);
2932
glpos = gl_Position;
3033
}

assets/minecraft/shaders/core/common/entity_glint.fsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ out vec4 fragColor;
1818
void main() {
1919
discardControlGLPos(gl_FragCoord.xy, glpos);
2020
vec4 color = texture(Sampler0, texCoord0) * ColorModulator;
21-
if (color.a < 0.1) {
21+
if (color.a < 0.01) {
2222
discard;
2323
}
2424
float fade = linear_fog_fade(vertexDistance, FogStart, FogEnd);
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#version 150
22

3+
#moj_import <fog.glsl>
4+
35
in vec3 Position;
46
in vec2 UV0;
57

68
uniform mat4 ModelViewMat;
79
uniform mat4 ProjMat;
10+
uniform mat3 IViewRotMat;
811
uniform mat4 TextureMat;
912

1013
out float vertexDistance;
@@ -13,7 +16,7 @@ out vec4 glpos;
1316

1417
void main() {
1518
gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
16-
vertexDistance = length((ModelViewMat * vec4(Position, 1.0)).xyz);
19+
vertexDistance = cylindrical_distance(ModelViewMat, IViewRotMat * Position);
1720
texCoord0 = (TextureMat * vec4(UV0, 0.0, 1.0)).xy;
1821
glpos = gl_Position;
1922
}

assets/minecraft/shaders/core/common/entity_lightmap_colored.fsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void main() {
2929
float alpha = textureLod(Sampler0, texCoord0, 0.0).a * 255.0;
3030
color = make_emissive(color, lightColor, vertexDistance, alpha);
3131
}
32-
if (color.a < 0.1) {
32+
if (color.a < 0.01) {
3333
discard;
3434
}
3535
fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor);

0 commit comments

Comments
 (0)