Commit: 4bf26fda97d61bcaad8df52cac92e62c485e8513
Author: Sergey Sharybin
Date:   Mon Aug 3 13:44:41 2015 +0200
Branches: master
https://developer.blender.org/rB4bf26fda97d61bcaad8df52cac92e62c485e8513

OpenSubdiv: Mark non-manifold verts as sharp

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

M       intern/opensubdiv/opensubdiv_converter.cc

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

diff --git a/intern/opensubdiv/opensubdiv_converter.cc 
b/intern/opensubdiv/opensubdiv_converter.cc
index 117edc4..c0fca86 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -351,21 +351,23 @@ inline bool 
TopologyRefinerFactory<OpenSubdiv_Converter>::assignComponentTags(
                setBaseEdgeSharpness(refiner, edge, sharpness);
        }
 
-#if 0
-       /* Non-manifold vertices can't be always smooth.
-        * I.e. when there's loose edge adjacent to the vertex
-        * opensubdiv expects vertices to be sharp. But this needs
-        * some further investigation.
+       /* OpenSubdiv expects non-manifold vertices to be sharp but at the
+        * time it handles correct cases when vertex is a corner of plane.
+        * Currently mark verts which are adjacent to a loose edge as sharp,
+        * but this decision needs some more investigation.
         */
        int num_vert = conv.get_num_verts(&conv);
        for (int vert = 0; vert < num_vert; ++vert) {
-               IndexArray vert_faces = getBaseVertexFaces(refiner, vert),
-                          vert_edges = getBaseVertexEdges(refiner, vert);
-               if (vert_faces.size() != vert_edges.size()) {
-                       setBaseVertexSharpness(refiner, vert, 
Crease::SHARPNESS_INFINITE);
+               ConstIndexArray vert_edges = getBaseVertexEdges(refiner, vert);
+               for (int edge_index = 0; edge_index < vert_edges.size(); 
++edge_index) {
+                       int edge = vert_edges[edge_index];
+                       ConstIndexArray edge_faces = getBaseEdgeFaces(refiner, 
edge);
+                       if (edge_faces.size() == 0) {
+                               setBaseVertexSharpness(refiner, vert, 
Crease::SHARPNESS_INFINITE);
+                               break;
+                       }
                }
        }
-#endif
 
        return true;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to