Rendering animations with particle trails cached.
authorJanne Karhu <jhkarh@gmail.com>
Sat, 4 Jul 2009 12:09:21 +0000 (12:09 +0000)
committerJanne Karhu <jhkarh@gmail.com>
Sat, 4 Jul 2009 12:09:21 +0000 (12:09 +0000)
source/blender/blenkernel/BKE_pointcache.h
source/blender/blenkernel/intern/pointcache.c
source/blender/editors/physics/ed_pointcache.c
source/blender/render/intern/source/pipeline.c

index 3f1c45d28ecc932353c7e06f4da88785aadf617f..c5d423c13baf1488e5406a566121433ce288d150 100644 (file)
@@ -114,6 +114,7 @@ typedef struct PTCacheBaker {
        struct Scene *scene;
        int bake;
        int render;
+       int anim_init;
        int quick_step;
        struct PTCacheID *pid;
        int (*break_test)(void *data);
index b8a0b111324eff7dce4a921e815f813139ca08e8..2fbd0278e0e2cef7b192444ec480a969eb327f6e 100644 (file)
@@ -1154,6 +1154,7 @@ void BKE_ptcache_quick_cache_all(Scene *scene)
        baker.progressbar=NULL;
        baker.progresscontext=NULL;
        baker.render=0;
+       baker.anim_init = 0;
        baker.scene=scene;
 
        if(count_quick_cache(scene, &baker.quick_step))
@@ -1171,7 +1172,7 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
        float frameleno = scene->r.framelen;
        int cfrao = CFRA;
        int startframe = MAXFRAME;
-       int endframe = CFRA;
+       int endframe = baker->anim_init ? scene->r.sfra : CFRA;
        int bake = baker->bake;
        int render = baker->render;
        int step = baker->quick_step;
index edd668b46bbfca5353f91aa981d7faa3073a0f02..ad60be3ba7ddad0499ae03ba09e1bbd8b0af8ef0 100644 (file)
@@ -82,6 +82,7 @@ static int ptcache_bake_all_exec(bContext *C, wmOperator *op)
        baker.pid = NULL;
        baker.bake = RNA_boolean_get(op->ptr, "bake");
        baker.render = 0;
+       baker.anim_init = 0;
        baker.quick_step = 1;
        baker.break_test = cache_break_test;
        baker.break_data = NULL;
@@ -172,6 +173,7 @@ static int ptcache_bake_cloth_exec(bContext *C, wmOperator *op)
        baker.pid = &pid;
        baker.bake = RNA_boolean_get(op->ptr, "bake");
        baker.render = 0;
+       baker.anim_init = 0;
        baker.quick_step = 1;
        baker.break_test = cache_break_test;
        baker.break_data = NULL;
@@ -277,6 +279,7 @@ static int ptcache_bake_particle_system_exec(bContext *C, wmOperator *op)
        baker.pid = &pid;
        baker.bake = RNA_boolean_get(op->ptr, "bake");
        baker.render = 0;
+       baker.anim_init = 0;
        baker.quick_step = 1;
        baker.break_test = cache_break_test;
        baker.break_data = NULL;
index ccc793e4235322cd4dcf75da9eb3738033c47f69..ec2660566f5ee248aaf2373827a27017a7ca8c1d 100644 (file)
@@ -2413,7 +2413,7 @@ static int is_rendering_allowed(Render *re)
        return 1;
 }
 
-static void update_physics_cache(Render *re, Scene *scene)
+static void update_physics_cache(Render *re, Scene *scene, int anim_init)
 {
        PTCacheBaker baker;
 
@@ -2421,6 +2421,7 @@ static void update_physics_cache(Render *re, Scene *scene)
        baker.pid = NULL;
        baker.bake = 0;
        baker.render = 1;
+       baker.anim_init = 1;
        baker.quick_step = 1;
        baker.break_test = re->test_break;
        baker.break_data = re->tbh;
@@ -2429,7 +2430,7 @@ static void update_physics_cache(Render *re, Scene *scene)
        BKE_ptcache_make_cache(&baker);
 }
 /* evaluating scene options for general Blender render */
-static int render_initialize_from_scene(Render *re, Scene *scene, int anim)
+static int render_initialize_from_scene(Render *re, Scene *scene, int anim, int anim_init)
 {
        int winx, winy;
        rcti disprect;
@@ -2467,7 +2468,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, int anim)
        tag_scenes_for_render(re);
 
        /* make sure dynamics are up to date */
-       update_physics_cache(re, scene);
+       update_physics_cache(re, scene, anim_init);
        
        if(scene->r.scemode & R_SINGLE_LAYER)
                push_render_result(re);
@@ -2497,7 +2498,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, int frame)
        
        scene->r.cfra= frame;
        
-       if(render_initialize_from_scene(re, scene, 0)) {
+       if(render_initialize_from_scene(re, scene, 0, 0)) {
                do_render_all_options(re);
        }
        
@@ -2586,7 +2587,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra)
        int nfra;
        
        /* do not fully call for each frame, it initializes & pops output window */
-       if(!render_initialize_from_scene(re, scene, 0))
+       if(!render_initialize_from_scene(re, scene, 0, 1))
                return;
        
        /* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
@@ -2617,7 +2618,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra)
                        char name[FILE_MAX];
                        
                        /* only border now, todo: camera lens. (ton) */
-                       render_initialize_from_scene(re, scene, 1);
+                       render_initialize_from_scene(re, scene, 1, 0);
 
                        if(nfra!=scene->r.cfra) {
                                /*