Fix T80086 EEVEE: Motion Blur: Subframe not taken into account
This is a simple fix that just make it work like cycles. The initial time was missing the subframe offset.
This commit is contained in:
parent
dd3b047f8b
commit
ed96c59c20
Notes:
blender-bot
2023-02-14 00:20:19 +01:00
Referenced by issue #81015, Rendering with Eevee motion blur changes the scene's subframes Referenced by issue #80086, Blender 2.9 Eevee motion blur doesn't take in account subframes when calculates its position Referenced by issue #79939, Output time remapping with Eevee motion blur can cause render to fail.
|
@ -459,11 +459,13 @@ static void eevee_render_to_image(void *vedata,
|
|||
EEVEE_render_modules_init(vedata, engine, depsgraph);
|
||||
|
||||
int initial_frame = CFRA;
|
||||
float initial_subframe = SUBFRA;
|
||||
int steps = max_ii(1, scene->eevee.motion_blur_steps);
|
||||
int time_steps_tot = (do_motion_blur) ? steps : 1;
|
||||
g_data->render_tot_samples = divide_ceil_u(scene->eevee.taa_render_samples, time_steps_tot);
|
||||
/* Centered on frame for now. */
|
||||
float time = CFRA - scene->eevee.motion_blur_shutter / 2.0f;
|
||||
float time = initial_frame + initial_subframe - scene->eevee.motion_blur_shutter / 2.0f;
|
||||
|
||||
float time_step = scene->eevee.motion_blur_shutter / time_steps_tot;
|
||||
for (int i = 0; i < time_steps_tot && !RE_engine_test_break(engine); i++) {
|
||||
float time_prev = time;
|
||||
|
@ -562,9 +564,9 @@ static void eevee_render_to_image(void *vedata,
|
|||
/* Restore original viewport size. */
|
||||
DRW_render_viewport_size_set((int[2]){g_data->size_orig[0], g_data->size_orig[1]});
|
||||
|
||||
if (CFRA != initial_frame) {
|
||||
if (CFRA != initial_frame || SUBFRA != initial_subframe) {
|
||||
/* Restore original frame number. This is because the render pipeline expects it. */
|
||||
RE_engine_frame_set(engine, initial_frame, 0.0f);
|
||||
RE_engine_frame_set(engine, initial_frame, initial_subframe);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue