diff options
author | Daniel Genrich <daniel.genrich@gmx.net> | 2012-05-15 17:39:44 +0400 |
---|---|---|
committer | Daniel Genrich <daniel.genrich@gmx.net> | 2012-05-15 17:39:44 +0400 |
commit | 9a8f98ddd8bb2c0aeba952807fd753d7f4668a2e (patch) | |
tree | c16b97d5bd0c214850f4deb1af3dec9fd7481704 /source/blender | |
parent | 715d870beaa7b84556696f9611ee77087959f48e (diff) |
Blender Internal Render: Split quads to predictable (vertices 0,1,3) triangles for animated meshes.
This solves problems with collisions beeing rendered different than in viewport.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_object.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 13 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index b0ee81f577a..1cdf2ee2e14 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -151,6 +151,7 @@ struct KeyBlock *BKE_object_insert_shape_key(struct Scene *scene, struct Object int BKE_object_is_modified(struct Scene *scene, struct Object *ob); int BKE_object_is_deform_modified(struct Scene *scene, struct Object *ob); +int BKE_object_is_animated(struct Scene *scene, struct Object *ob); void BKE_object_relink(struct Object *ob); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 2ea832eebaa..9000019ca2a 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -3020,6 +3020,19 @@ int BKE_object_is_deform_modified(Scene *scene, Object *ob) return flag; } +/* See if an object is using an animated modifier */ +int BKE_object_is_animated(Scene *scene, Object *ob) +{ + ModifierData *md; + + for (md = modifiers_getVirtualModifierList(ob); md; md = md->next) + if(modifier_dependsOnTime(md) && + (modifier_isEnabled(scene, md, eModifierMode_Realtime) || + modifier_isEnabled(scene, md, eModifierMode_Render))) + return 1; + return 0; +} + static void copy_object__forwardModifierLinks(void *UNUSED(userData), Object *UNUSED(ob), ID **idpoin) { /* this is copied from ID_NEW; it might be better to have a macro */ diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index b69f9518c1a..f16c1b5e673 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4318,6 +4318,8 @@ static void finalize_render_object(Render *re, ObjectRen *obr, int timeoffset) /* Baking lets us define a quad split order */ split_quads(obr, re->r.bake_quad_split); } + else if(BKE_object_is_animated(re->scene, ob)) + split_quads(obr, 1); else { if ((re->r.mode & R_SIMPLIFY && re->r.simplify_flag & R_SIMPLE_NO_TRIANGULATE) == 0) check_non_flat_quads(obr); |