diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-01-23 08:22:02 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-01-23 08:22:02 +0400 |
commit | 7c4f70178f7c33fffc88be56c10c00473b8e0465 (patch) | |
tree | 297286ecc8b23721819849427e3e1e0b41cadf4a | |
parent | c8dbf61f3548a235cdc024dacab4e995489c67f6 (diff) |
fix for glitch with vertex bake:
- the mesh would be tagged to update, then updated before bake finished.
- also increase self-shadow offset, in some cases the offset wasn't enough.
-rw-r--r-- | source/blender/render/intern/raytrace/rayobject_octree.cpp | 4 | ||||
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/source/blender/render/intern/raytrace/rayobject_octree.cpp b/source/blender/render/intern/raytrace/rayobject_octree.cpp index 658ab9dc091..e4fd5a6d41e 100644 --- a/source/blender/render/intern/raytrace/rayobject_octree.cpp +++ b/source/blender/render/intern/raytrace/rayobject_octree.cpp @@ -667,10 +667,12 @@ static void RE_rayobject_octree_done(RayObject *tree) oc->ocface = NULL; MEM_freeN(oc->ro_nodes); oc->ro_nodes = NULL; - + +#if 0 printf("%f %f - %f\n", oc->min[0], oc->max[0], oc->ocfacx); printf("%f %f - %f\n", oc->min[1], oc->max[1], oc->ocfacy); printf("%f %f - %f\n", oc->min[2], oc->max[2], oc->ocfacz); +#endif } static void RE_rayobject_octree_bb(RayObject *tree, float *min, float *max) diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index 1ef6e6b5263..c06d55ee808 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -2433,7 +2433,7 @@ static void do_bake_shade(void *handle, int x, int y, float u, float v) /* avoid self shadow with vertex bake from adjacent faces [#33729] */ if ((bs->vcol != NULL) && (bs->actob == NULL)) { - madd_v3_v3fl(shi->co, vlr->n, 0.00001f); + madd_v3_v3fl(shi->co, vlr->n, 0.0001f); } if (obi->flag & R_TRANSFORMED) @@ -2568,9 +2568,6 @@ static int get_next_bake_face(BakeShade *bs) bs->mpoly = me->mpoly + *origindex; bs->vcol = ((MLoopCol*)cdl->data) + bs->mpoly->loopstart; bs->mloop = me->mloop + bs->mpoly->loopstart; - - /* Tag mesh for reevaluation. */ - DAG_id_tag_update(&me->id, 0); } else { Image *ima = NULL; @@ -2660,6 +2657,9 @@ static void bake_single_vertex(BakeShade *bs, VertRen *vert, float u, float v) bs->vcol = basevcol; break; } + + /* needs to be done during baking and not before else the mesh will update before bake starts */ + DAG_id_tag_update(&bs->obi->ob->id, OB_RECALC_DATA); } /* Bake all vertices of a face. Actually, this still works on a face-by-face |