From 696836af1dbda1ed104167f9eb535d4603d23f49 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 20 Feb 2017 11:56:02 +0100 Subject: [PATCH] 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. --- intern/cycles/blender/blender_util.h | 1 - source/blender/blenkernel/intern/mesh.c | 7 +++---- 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