Commit: 4685092fd8e40d523ccd6d4d2b7efe491823f07f
Author: Bastien Montagne
Date:   Tue Mar 24 10:58:57 2015 +0100
Branches: master
https://developer.blender.org/rB4685092fd8e40d523ccd6d4d2b7efe491823f07f

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++) {

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

Reply via email to