[Bf-blender-cvs] [ff62481f65f] master: Fix T69060: File Output Node does not work with Time Remapping

Philipp Oeser noreply at git.blender.org
Fri Mar 27 10:12:32 CET 2020


Commit: ff62481f65f079d56719ed03dd58b0e7ccc8d574
Author: Philipp Oeser
Date:   Fri Mar 27 10:05:08 2020 +0100
Branches: master
https://developer.blender.org/rBff62481f65f079d56719ed03dd58b0e7ccc8d574

Fix T69060: File Output Node does not work with Time Remapping

Problem is that the RenderEngines will change the RenderData cfra when
rendering (when time remapping is used -- at least workbench/eevee/
gpencil do a combination of BKE_scene_frame_get() plus
RE_GetCameraWindow() which alters the RenderData cfra).

Later on in the pipeline, the Compositor will use this RenderData cfra
to determine the output file name for the FileOutput node. (In contrast
to this, the 'regular' Output will use the Scene's RenderData -- not the
Render's -- cfra [which hasnt been altered])

It is not entirely clear why RE_GetCameraWindow was setting the cfra on
the Render, but it appears to be legacy OGL rendering related and is not
needed anymore.
Removing this will keep the cfra as needed for the Compositor FileOutput
node.

===================================================================

M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/draw/engines/gpencil/gpencil_render.c
M	source/blender/draw/engines/workbench/workbench_render.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/initrender.c

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index 255c6c50c2d..076738dcbdf 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -135,9 +135,8 @@ bool EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *
   float winmat[4][4], viewmat[4][4], viewinv[4][4];
   /* TODO(sergey): Shall render hold pointer to an evaluated camera instead? */
   struct Object *ob_camera_eval = DEG_get_evaluated_object(depsgraph, RE_GetCamera(engine->re));
-  float frame = BKE_scene_frame_get(scene);
 
-  RE_GetCameraWindow(engine->re, ob_camera_eval, frame, winmat);
+  RE_GetCameraWindow(engine->re, ob_camera_eval, winmat);
   RE_GetCameraWindowWithOverscan(engine->re, winmat, g_data->overscan);
   RE_GetCameraModelMatrix(engine->re, ob_camera_eval, viewinv);
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_render.c b/source/blender/draw/engines/gpencil/gpencil_render.c
index 496122c0483..bb91bdbe396 100644
--- a/source/blender/draw/engines/gpencil/gpencil_render.c
+++ b/source/blender/draw/engines/gpencil/gpencil_render.c
@@ -51,8 +51,7 @@ void GPENCIL_render_init(GPENCIL_Data *vedata,
   float winmat[4][4], viewmat[4][4], viewinv[4][4];
 
   struct Object *camera = DEG_get_evaluated_object(depsgraph, RE_GetCamera(engine->re));
-  float frame = BKE_scene_frame_get(scene);
-  RE_GetCameraWindow(engine->re, camera, frame, winmat);
+  RE_GetCameraWindow(engine->re, camera, winmat);
   RE_GetCameraModelMatrix(engine->re, camera, viewinv);
 
   invert_m4_m4(viewmat, viewinv);
diff --git a/source/blender/draw/engines/workbench/workbench_render.c b/source/blender/draw/engines/workbench/workbench_render.c
index 5a315e80a47..9e66bcb07f4 100644
--- a/source/blender/draw/engines/workbench/workbench_render.c
+++ b/source/blender/draw/engines/workbench/workbench_render.c
@@ -52,14 +52,12 @@ static void workbench_render_cache(void *vedata,
 static void workbench_render_matrices_init(RenderEngine *engine, Depsgraph *depsgraph)
 {
   /* TODO(sergey): Shall render hold pointer to an evaluated camera instead? */
-  Scene *scene = DEG_get_evaluated_scene(depsgraph);
   struct Object *ob_camera_eval = DEG_get_evaluated_object(depsgraph, RE_GetCamera(engine->re));
-  float frame = BKE_scene_frame_get(scene);
 
   /* Set the persective, view and window matrix. */
   float winmat[4][4], viewmat[4][4], viewinv[4][4];
 
-  RE_GetCameraWindow(engine->re, ob_camera_eval, frame, winmat);
+  RE_GetCameraWindow(engine->re, ob_camera_eval, winmat);
   RE_GetCameraModelMatrix(engine->re, ob_camera_eval, viewinv);
 
   invert_m4_m4(viewmat, viewinv);
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 319d8b1c2ed..54296e16834 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -363,7 +363,7 @@ struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl,
 #define RE_BAKE_DISPLACEMENT 1
 #define RE_BAKE_AO 2
 
-void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]);
+void RE_GetCameraWindow(struct Render *re, struct Object *camera, float mat[4][4]);
 void RE_GetCameraWindowWithOverscan(struct Render *re, float mat[4][4], float overscan);
 void RE_GetCameraModelMatrix(struct Render *re, struct Object *camera, float r_mat[4][4]);
 struct Scene *RE_GetScene(struct Render *re);
diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c
index 5a6ecfc3e20..138d95af055 100644
--- a/source/blender/render/intern/source/initrender.c
+++ b/source/blender/render/intern/source/initrender.c
@@ -211,9 +211,8 @@ void RE_SetCamera(Render *re, Object *cam_ob)
   re_camera_params_get(re, &params);
 }
 
-void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4])
+void RE_GetCameraWindow(struct Render *re, struct Object *camera, float mat[4][4])
 {
-  re->r.cfra = frame;
   RE_SetCamera(re, camera);
   copy_m4_m4(mat, re->winmat);
 }



More information about the Bf-blender-cvs mailing list