From 16a37bcd31894ce17ed7d5aba9af2ac1b4f6c653 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 17 Jan 2008 12:02:15 +0000 Subject: [PATCH] Bugfix for "ghost feathers" trailing one frame behind the character. The derivedmesh and particle system needed to be evaluated at render level before creating dupliparticles. --- source/blender/blenkernel/intern/object.c | 9 +++++++++ source/blender/render/intern/source/convertblender.c | 7 ------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index de2875c91f4..bfe2b56b289 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -2199,6 +2199,7 @@ void object_handle_update(Object *ob) if(ob->particlesystem.first) { ParticleSystem *tpsys, *psys; + DerivedMesh *dm; psys= ob->particlesystem.first; while(psys) { @@ -2215,6 +2216,14 @@ void object_handle_update(Object *ob) else psys= psys->next; } + + if(G.rendering && ob->transflag & OB_DUPLIPARTS) { + /* this is to make sure we get render level duplis in groups: + * the derivedmesh must be created before init_render_mesh, + * since object_duplilist does dupliparticles before that */ + dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); + dm->release(dm); + } } } diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 44db5280165..25b5dac2a55 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -4136,18 +4136,11 @@ static void dupli_render_particle_set(Render *re, Object *ob, int level, int ena return; if(ob->transflag & OB_DUPLIPARTS) { - DerivedMesh *dm; - for(psys=ob->particlesystem.first; psys; psys=psys->next) if(enable) psys_render_set(ob, psys, re->viewmat, re->winmat, re->winx, re->winy); else psys_render_restore(ob, psys); - - if(enable) { - dm = mesh_create_derived_render(ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL); - dm->release(dm); - } } if(ob->dup_group==NULL) return;