Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-11-02 17:07:06 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-11-02 17:45:13 +0300
commit46d88c5850a2a5df52d0c8108c98b8bfd6358e77 (patch)
tree4ff50421768cf4ef38b714d23074d1a38bdc948b
parent819e6745b0ff55ae1f177f410508eb0dd5051a15 (diff)
Edit Mesh Mode: Improve edge drawing
Make edge decoration a bit thinner and try to reduce missing edge segment due to triangle barycentrics. This invert the "edge fix" strip offset direction, meanning there is now the possibility that these triangles poke through nearby geometry depending on the viewport near/far clips distances.
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl21
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl3
2 files changed, 20 insertions, 4 deletions
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
index b7cab58ca44..85a30041b27 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -28,7 +28,10 @@ out vec4 FragColor;
/* Vertex flag is shifted and combined with the edge flag */
#define FACE_ACTIVE_ (FACE_ACTIVE << 8)
-#define LARGE_EDGE_SIZE 3.0
+#define LARGE_EDGE_SIZE 2.15
+
+/* Enough to visually fill gaps and not enough to mess the AA gradient too much. */
+#define EDGE_FIX_ALPHA 0.6
/* Style Parameters in pixel */
@@ -103,7 +106,9 @@ void main()
float largeEdge = e[v] - sizeEdgeFinal * LARGE_EDGE_SIZE;
vec4 large_edge_color = EDIT_MESH_edge_color_outer(flag[v], (flag[0] & FACE_ACTIVE_) != 0, edgesCrease[v], edgesBweight[v]);
-
+#ifdef EDGE_FIX
+ large_edge_color *= EDGE_FIX_ALPHA;
+#endif
if (large_edge_color.a != 0.0) {
colorDistEdge(large_edge_color, largeEdge);
}
@@ -115,9 +120,16 @@ void main()
#endif
#ifdef VERTEX_SELECTION
+ vec4 inner_edge_color = vec4(vertexColor, 1.0);
+# ifdef EDGE_FIX
+ inner_edge_color *= EDGE_FIX_ALPHA;
+# endif
colorDistEdge(vec4(vertexColor, 1.0), innerEdge);
#else
vec4 inner_edge_color = EDIT_MESH_edge_color_inner(flag[v], (flag[0] & FACE_ACTIVE_) != 0);
+# ifdef EDGE_FIX
+ inner_edge_color *= EDGE_FIX_ALPHA;
+# endif
colorDistEdge(inner_edge_color, innerEdge);
#endif
}
@@ -135,7 +147,9 @@ void main()
vec4 point_color = colorVertex;
point_color = ((flag[v] & EDGE_VERTEX_SELECTED) != 0) ? colorVertexSelect : point_color;
point_color = ((flag[v] & EDGE_VERTEX_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : point_color;
-
+# ifdef EDGE_FIX
+ point_color.a *= EDGE_FIX_ALPHA;
+# endif
colorDist(point_color, size);
}
}
@@ -144,6 +158,7 @@ void main()
#ifdef VERTEX_FACING
FragColor.a *= 1.0 - abs(facing) * 0.4;
#endif
+
/* don't write depth if not opaque */
if (FragColor.a == 0.0) discard;
}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
index f36a17dcb70..0d2ff4d2008 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -36,7 +36,7 @@ out float facing;
#endif
#ifdef ANTI_ALIASING
-#define Z_OFFSET 0.008
+#define Z_OFFSET -0.0013
#else
#define Z_OFFSET 0.0
#endif
@@ -175,6 +175,7 @@ void main()
doVertexOfs(0, fixvec);
doVertexOfs(1, fixvec);
}
+
doVertex(0);
doVertex(1);