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:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-11-12 17:31:43 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-11-12 17:31:43 +0300
commit8ef68bf989cee6084be00ec460bf555c4eecbcd7 (patch)
treeda230f2687dd9479d4523a3c58d9e7dcd335c38b /source/blender/render
parent19cdceaee415ddba7e3a197e1e2487ae09d766a8 (diff)
Fix T46729: Render result different between animated and still renders
The issue was in fact a feedback loop between render database init which needs to know which render layers to initialize and scene update for newframe which needs to know which layers to update. Worked around by updating scene animation before render database initialization which isn't really ideal, but doesn't really have much better alternative.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/pipeline.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index e099c72552c..a9b7ad24402 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -35,6 +35,7 @@
#include <stdlib.h>
#include <stddef.h>
+#include "DNA_anim_types.h"
#include "DNA_image_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
@@ -3608,7 +3609,24 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
else {
for (nfra = sfra, scene->r.cfra = sfra; scene->r.cfra <= efra; scene->r.cfra++) {
char name[FILE_MAX];
-
+
+ /* Here is a feedback loop exists -- render initialization requires updated
+ * render layers settings which could be animated, but scene evaluation for
+ * the frame happens later because it depends on what layers are visible to
+ * render engine.
+ *
+ * The idea here is to only evaluate animation data associated with the scene,
+ * which will make sure render layer settings are up-to-date, initialize the
+ * render database itself and then perform full scene update with only needed
+ * layers.
+ * -sergey-
+ */
+ {
+ float ctime = BKE_scene_frame_get(scene);
+ AnimData *adt = BKE_animdata_from_id(&scene->id);
+ BKE_animsys_evaluate_animdata(scene, &scene->id, adt, ctime, ADT_RECALC_ALL);
+ }
+
/* only border now, todo: camera lens. (ton) */
render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 1, 0);