[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51823] trunk/blender/source/blender/ render/intern/source/rendercore.c: Fix #33040: baking selected to active could miss at pixels at the edge of faces

Brecht Van Lommel brechtvanlommel at pandora.be
Fri Nov 2 14:36:28 CET 2012


Revision: 51823
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51823
Author:   blendix
Date:     2012-11-02 13:36:26 +0000 (Fri, 02 Nov 2012)
Log Message:
-----------
Fix #33040: baking selected to active could miss at pixels at the edge of faces
when there was a tiny mismatch between low and high poly models, maybe because
of float precision when editing the mesh. Added a small epsilon now to avoid this.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/rendercore.c

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2012-11-02 13:36:20 UTC (rev 51822)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2012-11-02 13:36:26 UTC (rev 51823)
@@ -2376,10 +2376,28 @@
 		v2= vlr->v2->co;
 		v3= vlr->v3->co;
 	}
+
+	l= 1.0f-u-v;
+
+	/* shrink barycentric coordinates inwards slightly to avoid some issues
+	 * where baking selected to active might just miss the other face at the
+	 * near the edge of a face */
+	if (bs->actob) {
+		const float eps = 1.0f - 1e-4f;
+		float invsum;
+
+		u = (u - 0.5f)*eps + 0.5f;
+		v = (v - 0.5f)*eps + 0.5f;
+		l = (l - 0.5f)*eps + 0.5f;
+
+		invsum = 1.0f/(u + v + l);
+
+		u *= invsum;
+		v *= invsum;
+		l *= invsum;
+	}
 	
 	/* renderco */
-	l= 1.0f-u-v;
-	
 	shi->co[0]= l*v3[0]+u*v1[0]+v*v2[0];
 	shi->co[1]= l*v3[1]+u*v1[1]+v*v2[1];
 	shi->co[2]= l*v3[2]+u*v1[2]+v*v2[2];




More information about the Bf-blender-cvs mailing list