Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-11-02 17:36:26 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-11-02 17:36:26 +0400
commit41cd2d8e841fbbc85aad715ecfcf58848c6831e6 (patch)
tree59bf948a7a321bb076b08c6ed73c38b8af7a2cc6 /source/blender/render
parent40b3c3a4e68f853284fc4fa5e58694f85e1e07db (diff)
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.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/rendercore.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 217fcc3c4ac..9fe2620747c 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -2376,10 +2376,28 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v)
v2= vlr->v2->co;
v3= vlr->v3->co;
}
-
- /* renderco */
+
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 */
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];