diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-05-11 16:40:31 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-05-11 17:29:35 +0300 |
commit | 3341c11bccf46c82aaf7b45f9249913e91885a52 (patch) | |
tree | f4b98d532eea82ea140938bc5d3ab79e155dc44b /source/blender/draw/engines/eevee/eevee_effects.c | |
parent | 2e39a27e3b6d72c6697cc2ede56f6566a8e2f221 (diff) |
Eevee: Disable motion blur if camera is different from its animated pose.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_effects.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_effects.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c index 979b47ef4fd..429bb3c790e 100644 --- a/source/blender/draw/engines/eevee/eevee_effects.c +++ b/source/blender/draw/engines/eevee/eevee_effects.c @@ -190,23 +190,31 @@ void EEVEE_effects_init(EEVEE_Data *vedata) if (BKE_collection_engine_property_value_get_bool(props, "motion_blur_enable")) { /* Update Motion Blur Matrices */ if (rv3d->persp == RV3D_CAMOB && v3d->camera) { + float persmat[4][4]; float ctime = BKE_scene_frame_get(scene); float delta = BKE_collection_engine_property_value_get_float(props, "motion_blur_shutter"); - /* Past matrix */ - eevee_motion_blur_camera_get_matrix_at_time(scene, ar, rv3d, v3d, v3d->camera, ctime - delta, effects->past_world_to_ndc); + /* Current matrix */ + eevee_motion_blur_camera_get_matrix_at_time(scene, ar, rv3d, v3d, v3d->camera, ctime, effects->current_ndc_to_world); + + /* Viewport Matrix */ + DRW_viewport_matrix_get(persmat, DRW_MAT_PERS); + + /* Only continue if camera is not being keyed */ + if (compare_m4m4(persmat, effects->current_ndc_to_world, 0.0001f)) { + + /* Past matrix */ + eevee_motion_blur_camera_get_matrix_at_time(scene, ar, rv3d, v3d, v3d->camera, ctime - delta, effects->past_world_to_ndc); #if 0 /* for future high quality blur */ - /* Future matrix */ - eevee_motion_blur_camera_get_matrix_at_time(scene, ar, rv3d, v3d, v3d->camera, ctime + delta, effects->future_world_to_ndc); + /* Future matrix */ + eevee_motion_blur_camera_get_matrix_at_time(scene, ar, rv3d, v3d, v3d->camera, ctime + delta, effects->future_world_to_ndc); #endif + invert_m4(effects->current_ndc_to_world); - /* Current matrix */ - eevee_motion_blur_camera_get_matrix_at_time(scene, ar, rv3d, v3d, v3d->camera, ctime, effects->current_ndc_to_world); - invert_m4(effects->current_ndc_to_world); - - effects->motion_blur_samples = BKE_collection_engine_property_value_get_int(props, "motion_blur_samples"); - effects->enabled_effects |= EFFECT_MOTION_BLUR; + effects->motion_blur_samples = BKE_collection_engine_property_value_get_int(props, "motion_blur_samples"); + effects->enabled_effects |= EFFECT_MOTION_BLUR; + } } } #endif /* ENABLE_EFFECT_MOTION_BLUR */ |