[Bf-blender-cvs] [696836af1d] master: Fix T50718: Regression: Split Normals Render Problem with Cycles

Sergey Sharybin noreply at git.blender.org
Mon Feb 20 12:03:19 CET 2017


Commit: 696836af1dbda1ed104167f9eb535d4603d23f49
Author: Sergey Sharybin
Date:   Mon Feb 20 11:56:02 2017 +0100
Branches: master
https://developer.blender.org/rB696836af1dbda1ed104167f9eb535d4603d23f49

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.

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

M	intern/cycles/blender/blender_util.h
M	source/blender/blenkernel/intern/mesh.c

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

diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 4411181dbc..8120de9636 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 5a3f7fabcb..73fcd7615f 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




More information about the Bf-blender-cvs mailing list