Commit: 405c2dde88e757089d1145b5680ecfbfba755a02
Author: Mai Lavelle
Date:   Sun Jun 26 09:23:26 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB405c2dde88e757089d1145b5680ecfbfba755a02

Support creases on subdivision meshes

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

M       intern/cycles/blender/blender_mesh.cpp
M       intern/cycles/render/mesh.cpp
M       intern/cycles/render/mesh.h
M       intern/cycles/render/mesh_subdivision.cpp

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

diff --git a/intern/cycles/blender/blender_mesh.cpp 
b/intern/cycles/blender/blender_mesh.cpp
index 4bf0b3a..c5f917d 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -772,6 +772,30 @@ static void create_subd_mesh(Scene *scene,
        mesh->subdivision_type = (Mesh::SubdivisionType)RNA_enum_get(cmesh, 
"subdivision_type");
        create_mesh(scene, mesh, b_mesh, used_shaders, true);
 
+       /* export creases */
+       size_t num_creases = 0;
+       BL::Mesh::edges_iterator e;
+
+       for(b_mesh.edges.begin(e); e != b_mesh.edges.end(); ++e) {
+               if(e->crease() != 0.0f) {
+                       num_creases++;
+               }
+       }
+
+       mesh->subd_creases.resize(num_creases);
+
+       Mesh::SubdEdgeCrease* crease = &mesh->subd_creases[0];
+       for(b_mesh.edges.begin(e); e != b_mesh.edges.end(); ++e) {
+               if(e->crease() != 0.0f) {
+                       crease->v[0] = e->vertices()[0];
+                       crease->v[1] = e->vertices()[1];
+                       crease->crease = e->crease();
+
+                       crease++;
+               }
+       }
+
+       /* set subd params */
        SubdParams sdparams(mesh, 0, true, false);
        sdparams.dicing_rate = max(0.1f, RNA_float_get(cmesh, "dicing_rate") * 
dicing_rate);
        sdparams.max_level = max_subdivisions;
diff --git a/intern/cycles/render/mesh.cpp b/intern/cycles/render/mesh.cpp
index 0cb5d76..4e015ac 100644
--- a/intern/cycles/render/mesh.cpp
+++ b/intern/cycles/render/mesh.cpp
@@ -242,6 +242,8 @@ void Mesh::clear()
 
        num_subd_verts = 0;
 
+       subd_creases.clear();
+
        attributes.clear();
        curve_attributes.clear();
        subd_attributes.clear();
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h
index 0e721c4..559c77b 100644
--- a/intern/cycles/render/mesh.h
+++ b/intern/cycles/render/mesh.h
@@ -102,6 +102,11 @@ public:
                int num_ptex_faces() const { return num_corners == 4 ? 1 : 
num_corners; }
        };
 
+       struct SubdEdgeCrease {
+               int v[2];
+               float crease;
+       };
+
        /* Displacement */
        enum DisplacementMethod {
                DISPLACE_BUMP = 0,
@@ -149,6 +154,8 @@ public:
        array<int> subd_face_corners;
        int num_ngons;
 
+       array<SubdEdgeCrease> subd_creases;
+
        vector<Shader*> used_shaders;
        AttributeSet attributes;
        AttributeSet curve_attributes;
diff --git a/intern/cycles/render/mesh_subdivision.cpp 
b/intern/cycles/render/mesh_subdivision.cpp
index 5ce6d49..59311b6 100644
--- a/intern/cycles/render/mesh_subdivision.cpp
+++ b/intern/cycles/render/mesh_subdivision.cpp
@@ -72,8 +72,18 @@ namespace Far {
        }
 
        template<>
-       bool 
TopologyRefinerFactory<ccl::Mesh>::assignComponentTags(TopologyRefiner& 
/*refiner*/, ccl::Mesh const& /*mesh*/)
+       bool 
TopologyRefinerFactory<ccl::Mesh>::assignComponentTags(TopologyRefiner& 
refiner, ccl::Mesh const& mesh)
        {
+               ccl::Mesh::SubdEdgeCrease* crease = &mesh.subd_creases[0];
+
+               for(int i = 0; i < mesh.subd_creases.size(); i++, crease++) {
+                       Index edge = findBaseEdge(refiner, crease->v[0], 
crease->v[1]);
+
+                       if(edge != INDEX_INVALID) {
+                               setBaseEdgeSharpness(refiner, edge, 
crease->crease * 10.0f);
+                       }
+               }
+
                return true;
        }

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

Reply via email to