[Bf-blender-cvs] [c7dc142] blender-v2.74-release: Fix T44102: Mirrored objects render black with Blender Internal and Autosmooth.

Bastien Montagne noreply at git.blender.org
Tue Mar 24 15:59:57 CET 2015


Commit: c7dc142c1ba56057c9281ebdd514c8412c4cf2bc
Author: Bastien Montagne
Date:   Tue Mar 24 10:58:57 2015 +0100
Branches: blender-v2.74-release
https://developer.blender.org/rBc7dc142c1ba56057c9281ebdd514c8412c4cf2bc

Fix T44102: Mirrored objects render black with Blender Internal and Autosmooth.

Normals are not vertices, we cannot apply matrix's scale to them...

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

M	source/blender/render/intern/source/convertblender.c

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

diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 2ebcb76..e900d29 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -577,6 +577,17 @@ static void autosmooth(Render *UNUSED(re), ObjectRen *obr, float mat[4][4], shor
 	VlakRen *vlr;
 	int a, totvert;
 
+	float rot[3][3];
+
+	/* Note: For normals, we only want rotation, not scaling component.
+	 *       Negative scales (aka mirroring) give wrong results, see T44102. */
+	if (lnors) {
+		float mat3[3][3], size[3];
+
+		copy_m3_m4(mat3, mat);
+		mat3_to_rot_size(rot, size, mat3);
+	}
+
 	if (obr->totvert == 0)
 		return;
 
@@ -611,9 +622,8 @@ static void autosmooth(Render *UNUSED(re), ObjectRen *obr, float mat[4][4], shor
 		ver = RE_findOrAddVert(obr, a);
 		mul_m4_v3(mat, ver->co);
 		if (lnors) {
-			mul_mat3_m4_v3(mat, ver->n);
+			mul_m3_v3(rot, ver->n);
 			negate_v3(ver->n);
-			normalize_v3(ver->n);
 		}
 	}
 	for (a = 0; a < obr->totvlak; a++) {




More information about the Bf-blender-cvs mailing list