diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-04-30 23:23:54 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-05-01 13:09:18 +0300 |
commit | e66629c128258a325ef7d898fb352e3d2552bbcb (patch) | |
tree | 1594b47733dab7e81bf6841549c591df5d4e550c /source/blender/draw/engines/eevee/eevee_effects.c | |
parent | b581f1929287381fe9c2761dc514d5bfa7cbe41c (diff) |
Eevee: Lookdev: Cleanup implementation & support for Bloom and TAA
Make Lookdev works with bloom and TAA by rendering it before TAA and fixing
the motion vectors of the lookdev balls.
Rework Lookdev to remove much of its complexity. Use simpler matrices with
more understandable setup code.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_effects.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_effects.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c index a4d3bc5b276..a8b4159e030 100644 --- a/source/blender/draw/engines/eevee/eevee_effects.c +++ b/source/blender/draw/engines/eevee/eevee_effects.c @@ -533,22 +533,30 @@ void EEVEE_draw_alpha_checker(EEVEE_Data *vedata) } } -void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) +static void EEVEE_velocity_resolve(EEVEE_Data *vedata) { EEVEE_PassList *psl = vedata->psl; - EEVEE_TextureList *txl = vedata->txl; EEVEE_FramebufferList *fbl = vedata->fbl; EEVEE_StorageList *stl = vedata->stl; EEVEE_EffectsInfo *effects = stl->effects; - /* First resolve the velocity. */ if ((effects->enabled_effects & EFFECT_VELOCITY_BUFFER) != 0) { + DefaultTextureList *dtxl = DRW_viewport_texture_list_get(); + e_data.depth_src = dtxl->depth; DRW_viewport_matrix_get(effects->velocity_curr_persinv, DRW_MAT_PERSINV); GPU_framebuffer_bind(fbl->velocity_resolve_fb); DRW_draw_pass(psl->velocity_resolve); } DRW_viewport_matrix_get(effects->velocity_past_persmat, DRW_MAT_PERS); +} + +void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) +{ + EEVEE_TextureList *txl = vedata->txl; + EEVEE_FramebufferList *fbl = vedata->fbl; + EEVEE_StorageList *stl = vedata->stl; + EEVEE_EffectsInfo *effects = stl->effects; /* only once per frame after the first post process */ effects->swap_double_buffer = ((effects->enabled_effects & EFFECT_DOUBLE_BUFFER) != 0); @@ -560,6 +568,14 @@ void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) /* Post process stack (order matters) */ EEVEE_motion_blur_draw(vedata); EEVEE_depth_of_field_draw(vedata); + + /* NOTE: Lookdev drawing happens before TAA but after + * motion blur and dof to avoid distortions. + * Velocity resolve use a hack to exclude lookdev + * balls from creating shimering reprojection vectors. */ + EEVEE_lookdev_draw(vedata); + EEVEE_velocity_resolve(vedata); + EEVEE_temporal_sampling_draw(vedata); EEVEE_bloom_draw(vedata); |