[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