Fix T78215 EEVEE: incorrect Render Passes results when using motion blur
This was caused by a missing DRWPass initialization. Now we create the passes for every timestep but avoid clearing the buffer after the first sample.
This commit is contained in:
parent
0dced1af34
commit
2ad8e16c2d
Notes:
blender-bot
2023-02-14 06:25:25 +01:00
Referenced by issue #78215, 2.9 Eevee shadow pass give incorrect results when motion blur steps more then 1
|
@ -527,10 +527,7 @@ static void eevee_render_to_image(void *vedata,
|
|||
|
||||
/* Actual drawing. */
|
||||
{
|
||||
if (i == 0) {
|
||||
EEVEE_renderpasses_output_init(
|
||||
sldata, vedata, g_data->render_tot_samples * time_steps_tot);
|
||||
}
|
||||
EEVEE_renderpasses_output_init(sldata, vedata, g_data->render_tot_samples * time_steps_tot);
|
||||
|
||||
EEVEE_temporal_sampling_create_view(vedata);
|
||||
EEVEE_render_draw(vedata, engine, render_layer, rect);
|
||||
|
|
|
@ -1018,7 +1018,7 @@ void EEVEE_material_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
|
|||
/* Should be enough precision for many samples. */
|
||||
const eGPUTextureFormat texture_format = (tot_samples > 128) ? GPU_RGBA32F : GPU_RGBA16F;
|
||||
|
||||
const bool do_clear = DRW_state_is_image_render() || (effects->taa_current_sample == 1);
|
||||
const bool do_clear = (effects->taa_current_sample == 1);
|
||||
/* Create FrameBuffer. */
|
||||
GPU_framebuffer_ensure_config(&fbl->material_accum_fb,
|
||||
{GPU_ATTACHMENT_TEXTURE(dtxl->depth), GPU_ATTACHMENT_LEAVE});
|
||||
|
|
|
@ -75,7 +75,7 @@ void EEVEE_mist_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
|
|||
{GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->mist_accum)});
|
||||
|
||||
/* Clear texture. */
|
||||
if (DRW_state_is_image_render() || effects->taa_current_sample == 1) {
|
||||
if (effects->taa_current_sample == 1) {
|
||||
GPU_framebuffer_bind(fbl->mist_accum_fb);
|
||||
GPU_framebuffer_clear_color(fbl->mist_accum_fb, clear);
|
||||
}
|
||||
|
|
|
@ -155,7 +155,7 @@ void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata
|
|||
{GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->ao_accum)});
|
||||
|
||||
/* Clear texture. */
|
||||
if (DRW_state_is_image_render() || effects->taa_current_sample == 1) {
|
||||
if (effects->taa_current_sample == 1) {
|
||||
GPU_framebuffer_bind(fbl->ao_accum_fb);
|
||||
GPU_framebuffer_clear_color(fbl->ao_accum_fb, clear);
|
||||
}
|
||||
|
|
|
@ -358,7 +358,7 @@ void EEVEE_reflection_output_init(EEVEE_ViewLayerData *UNUSED(sldata),
|
|||
{GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->ssr_accum)});
|
||||
|
||||
/* Clear texture. */
|
||||
if (DRW_state_is_image_render() || effects->taa_current_sample == 1) {
|
||||
if (effects->taa_current_sample == 1) {
|
||||
GPU_framebuffer_bind(fbl->ssr_accum_fb);
|
||||
GPU_framebuffer_clear_color(fbl->ssr_accum_fb, clear);
|
||||
}
|
||||
|
|
|
@ -412,7 +412,7 @@ void EEVEE_shadow_output_init(EEVEE_ViewLayerData *sldata,
|
|||
{GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->shadow_accum)});
|
||||
|
||||
/* Clear texture. */
|
||||
if (DRW_state_is_image_render() || effects->taa_current_sample == 1) {
|
||||
if (effects->taa_current_sample == 1) {
|
||||
GPU_framebuffer_bind(fbl->shadow_accum_fb);
|
||||
GPU_framebuffer_clear_color(fbl->shadow_accum_fb, clear);
|
||||
}
|
||||
|
|
|
@ -187,7 +187,7 @@ void EEVEE_subsurface_output_init(EEVEE_ViewLayerData *UNUSED(sldata),
|
|||
* already higher than one. This is noticeable when loading a file that has the diffuse light
|
||||
* pass in look dev mode active. `texture_created` will make sure that newly created textures
|
||||
* are cleared. */
|
||||
if (DRW_state_is_image_render() || effects->taa_current_sample == 1 || texture_created) {
|
||||
if (effects->taa_current_sample == 1 || texture_created) {
|
||||
float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
GPU_framebuffer_bind(fbl->sss_accum_fb);
|
||||
GPU_framebuffer_clear_color(fbl->sss_accum_fb, clear);
|
||||
|
|
|
@ -894,7 +894,7 @@ void EEVEE_volumes_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
|
|||
GPU_ATTACHMENT_TEXTURE(txl->volume_transmittance_accum)});
|
||||
|
||||
/* Clear texture. */
|
||||
if (DRW_state_is_image_render() || effects->taa_current_sample == 1) {
|
||||
if (effects->taa_current_sample == 1) {
|
||||
GPU_framebuffer_bind(fbl->volumetric_accum_fb);
|
||||
GPU_framebuffer_clear_color(fbl->volumetric_accum_fb, clear);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue