diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-11-02 17:07:06 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-11-02 17:45:13 +0300 |
commit | 46d88c5850a2a5df52d0c8108c98b8bfd6358e77 (patch) | |
tree | 4ff50421768cf4ef38b714d23074d1a38bdc948b /source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl | |
parent | 819e6745b0ff55ae1f177f410508eb0dd5051a15 (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.
Diffstat (limited to 'source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl')
-rw-r--r-- | source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl | 21 |
1 files changed, 18 insertions, 3 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; } |