[Bf-blender-cvs] [46d88c5850a] blender2.8: Edit Mesh Mode: Improve edge drawing

Clément Foucault noreply at git.blender.org
Fri Nov 2 15:59:51 CET 2018


Commit: 46d88c5850a2a5df52d0c8108c98b8bfd6358e77
Author: Clément Foucault
Date:   Fri Nov 2 15:07:06 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB46d88c5850a2a5df52d0c8108c98b8bfd6358e77

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.

===================================================================

M	source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl

===================================================================

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);



More information about the Bf-blender-cvs mailing list