Skip to content

Commit

Permalink
Fix MSAA stripes (#9247)
Browse files Browse the repository at this point in the history
This only works when shaders are enabled.
The centroid varying avoids that the textures (which repeat themselves out of bounds) are sampled out of bounds in MSAA.
If MSAA (called FSAA in minetest) is disabled, the centroid keyword does nothing.
  • Loading branch information
HybridDog committed Dec 4, 2020
1 parent ecd4f45 commit e73c5d4
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 10 deletions.
4 changes: 2 additions & 2 deletions builtin/settingtypes.txt
Expand Up @@ -517,8 +517,8 @@ texture_min_size (Minimum texture size) int 64
# This algorithm smooths out the 3D viewport while keeping the image sharp,
# but it doesn't affect the insides of textures
# (which is especially noticeable with transparent textures).
# This option is experimental and might cause visible spaces between blocks
# when set above 0.
# Visible spaces appear between nodes when shaders are disabled.
# If set to 0, MSAA is disabled.
# A restart is required after changing this option.
fsaa (FSAA) enum 0 0,1,2,4,8,16

Expand Down
6 changes: 3 additions & 3 deletions client/shaders/nodes_shader/opengl_fragment.glsl
Expand Up @@ -16,7 +16,7 @@ varying vec3 vPosition;
// precision must be considered).
varying vec3 worldPosition;
varying lowp vec4 varColor;
varying mediump vec2 varTexCoord;
centroid varying mediump vec2 varTexCoord;
varying vec3 eyeVec;

const float fogStart = FOG_START;
Expand Down Expand Up @@ -46,7 +46,7 @@ vec4 applyToneMapping(vec4 color)
const float gamma = 1.6;
const float exposureBias = 5.5;
color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
// Precalculated white_scale from
// Precalculated white_scale from
//vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
vec3 whiteScale = vec3(1.036015346);
color.rgb *= whiteScale;
Expand All @@ -72,7 +72,7 @@ void main(void)
color = base.rgb;

vec4 col = vec4(color.rgb * varColor.rgb, 1.0);

#ifdef ENABLE_TONE_MAPPING
col = applyToneMapping(col);
#endif
Expand Down
7 changes: 5 additions & 2 deletions client/shaders/nodes_shader/opengl_vertex.glsl
Expand Up @@ -16,7 +16,10 @@ varying vec3 vPosition;
// precision must be considered).
varying vec3 worldPosition;
varying lowp vec4 varColor;
varying mediump vec2 varTexCoord;
// The centroid keyword ensures that after interpolation the texture coordinates
// lie within the same bounds when MSAA is en- and disabled.
// This fixes the stripes problem with nearest-neighbour textures and MSAA.
centroid varying mediump vec2 varTexCoord;
varying vec3 eyeVec;

// Color of the light emitted by the light sources.
Expand Down Expand Up @@ -142,7 +145,7 @@ void main(void)
vec4 color;
// The alpha gives the ratio of sunlight in the incoming light.
float nightRatio = 1.0 - inVertexColor.a;
color.rgb = inVertexColor.rgb * (inVertexColor.a * dayLight.rgb +
color.rgb = inVertexColor.rgb * (inVertexColor.a * dayLight.rgb +
nightRatio * artificialLight.rgb) * 2.0;
color.a = 1.0;

Expand Down
4 changes: 2 additions & 2 deletions client/shaders/object_shader/opengl_fragment.glsl
Expand Up @@ -9,7 +9,7 @@ varying vec3 vNormal;
varying vec3 vPosition;
varying vec3 worldPosition;
varying lowp vec4 varColor;
varying mediump vec2 varTexCoord;
centroid varying mediump vec2 varTexCoord;

varying vec3 eyeVec;
varying float vIDiff;
Expand Down Expand Up @@ -43,7 +43,7 @@ vec4 applyToneMapping(vec4 color)
const float gamma = 1.6;
const float exposureBias = 5.5;
color.rgb = uncharted2Tonemap(exposureBias * color.rgb);
// Precalculated white_scale from
// Precalculated white_scale from
//vec3 whiteScale = 1.0 / uncharted2Tonemap(vec3(W));
vec3 whiteScale = vec3(1.036015346);
color.rgb *= whiteScale;
Expand Down
2 changes: 1 addition & 1 deletion client/shaders/object_shader/opengl_vertex.glsl
Expand Up @@ -7,7 +7,7 @@ varying vec3 vNormal;
varying vec3 vPosition;
varying vec3 worldPosition;
varying lowp vec4 varColor;
varying mediump vec2 varTexCoord;
centroid varying mediump vec2 varTexCoord;

varying vec3 eyeVec;
varying float vIDiff;
Expand Down

0 comments on commit e73c5d4

Please sign in to comment.