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:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-02-20 13:56:02 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-02-20 13:56:02 +0300
commit696836af1dbda1ed104167f9eb535d4603d23f49 (patch)
tree1401d609a921b8450eed52b12f2bbf8461ea664a
parent75ce4ebc1221445028b74e9ef2504663e0c99bcf (diff)
Fix T50718: Regression: Split Normals Render Problem with Cycles
The issue seems to be caused by vertex normal being re-calculated to something else than loop normal, which also caused wrong loop normals after re-calculation. For now issue is solved by preserving CD_NORMAL for loops after split_faces() is finished, so render engine can access original proper value.
-rw-r--r--intern/cycles/blender/blender_util.h1
-rw-r--r--source/blender/blenkernel/intern/mesh.c7
2 files changed, 3 insertions, 5 deletions
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 4411181dbcc..8120de96362 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -80,7 +80,6 @@ static inline BL::Mesh object_to_mesh(BL::BlendData& data,
}
else {
me.split_faces();
- me.calc_normals_split();
}
}
if(subdivision_type == Mesh::SUBDIVISION_NONE) {
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 5a3f7fabcb0..73fcd7615f7 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -2334,6 +2334,9 @@ static void split_faces_split_edges(Mesh *mesh,
/* Split faces based on the edge angle.
* Matches behavior of face splitting in render engines.
+ *
+ * NOTE: Will leave CD_NORMAL loop data layer which is
+ * used by render engines to set shading up.
*/
void BKE_mesh_split_faces(Mesh *mesh)
{
@@ -2377,10 +2380,6 @@ void BKE_mesh_split_faces(Mesh *mesh)
/* Perform actual split of vertices and adjacent edges. */
split_faces_split_verts(mesh, num_new_verts, vert_flags);
split_faces_split_edges(mesh, num_new_edges, edge_flags);
- /* CD_NORMAL is expected to be temporary only, and it's invalid at
- * this point anyway.
- */
- CustomData_free_layers(&mesh->ldata, CD_NORMAL, mesh->totloop);
MEM_freeN(vert_flags);
MEM_freeN(edge_flags);
#ifdef VALIDATE_MESH