Commit: 84fe4cdcb37c28469749d673006c8e6083bede7f
Author: Jeroen Bakker
Date:   Tue Mar 19 12:51:19 2019 +0100
Branches: master
https://developer.blender.org/rB84fe4cdcb37c28469749d673006c8e6083bede7f

Workbench: Support Odd Number Of AA Samples

Workbench render engine did not work when an odd number of AA samples
were used. A user could enter these values by disabling AA or set the
number of AA samples in the Render/Film panel to an odd number.

This commit will not perform TAA passes when AA is disabled.
For supporting the setting of 5 or 11 samples the bitmask was replaced
by an if statement as this was making the odd number not render
correctly.

As extra introduce the jitter samples of 5 and 11 so the images will
be more clean. a jitter sample of 11 used to read outside the allocated
space of the jitter samples.

Fix T60820

Reviewed By: fclem

Maniphest Tasks: T60820

Differential Revision: https://developer.blender.org/D4546

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

M       source/blender/draw/engines/workbench/workbench_effect_taa.c
M       source/blender/draw/engines/workbench/workbench_private.h

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

diff --git a/source/blender/draw/engines/workbench/workbench_effect_taa.c 
b/source/blender/draw/engines/workbench/workbench_effect_taa.c
index d1f8c0983c6..b61cbff39a9 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_taa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_taa.c
@@ -26,7 +26,9 @@
 
 static struct {
        struct GPUShader *effect_taa_sh;
+       float jitter_5[5][2];
        float jitter_8[8][2];
+       float jitter_11[11][2];
        float jitter_16[16][2];
        float jitter_32[32][2];
 } e_data = {NULL};
@@ -79,7 +81,9 @@ static void workbench_taa_jitter_init_order(float 
(*table)[2], int num)
 
 static void workbench_taa_jitter_init(void)
 {
+       workbench_taa_jitter_init_order(e_data.jitter_5, 5);
        workbench_taa_jitter_init_order(e_data.jitter_8, 8);
+       workbench_taa_jitter_init_order(e_data.jitter_11, 11);
        workbench_taa_jitter_init_order(e_data.jitter_16, 16);
        workbench_taa_jitter_init_order(e_data.jitter_32, 32);
 }
@@ -212,9 +216,15 @@ void workbench_taa_draw_scene_start(WORKBENCH_Data *vedata)
        num_samples = workbench_taa_calculate_num_iterations(vedata);
        switch (num_samples) {
                default:
+               case 5:
+                       samples = e_data.jitter_5;
+                       break;
                case 8:
                        samples = e_data.jitter_8;
                        break;
+               case 11:
+                       samples = e_data.jitter_11;
+                       break;
                case 16:
                        samples = e_data.jitter_16;
                        break;
@@ -225,10 +235,9 @@ void workbench_taa_draw_scene_start(WORKBENCH_Data *vedata)
 
        mix_factor = 1.0f / (effect_info->jitter_index + 1);
 
-       const int bitmask = num_samples - 1;
        const int jitter_index = effect_info->jitter_index;
        const float *transform_offset = samples[jitter_index];
-       effect_info->jitter_index = (jitter_index + 1) & bitmask;
+       effect_info->jitter_index = (jitter_index + 1) % num_samples;
 
        /* construct new matrices from transform delta */
        float viewmat[4][4];
diff --git a/source/blender/draw/engines/workbench/workbench_private.h 
b/source/blender/draw/engines/workbench/workbench_private.h
index 115868bc268..eb1d9c4e860 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -62,7 +62,8 @@
 #define FXAA_ENABLED(wpd) ((!DRW_state_is_opengl_render()) && \
                             (IN_RANGE(wpd->preferences->gpu_viewport_quality, 
GPU_VIEWPORT_QUALITY_FXAA, GPU_VIEWPORT_QUALITY_TAA8) || \
                              ((IS_NAVIGATING(wpd) || wpd->is_playback) && 
(wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8))))
-#define TAA_ENABLED(wpd) (DRW_state_is_image_render() || 
(wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8 && 
!IS_NAVIGATING(wpd) && !wpd->is_playback))
+#define TAA_ENABLED(wpd) ((DRW_state_is_image_render() && 
DRW_context_state_get()->scene->r.mode & R_OSA) || \
+                          (DRW_state_is_opengl_render() && 
wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8 && 
!IS_NAVIGATING(wpd) && !wpd->is_playback))
 #define SPECULAR_HIGHLIGHT_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && 
(wpd->shading.flag & V3D_SHADING_SPECULAR_HIGHLIGHT) && 
(!STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd)))
 #define OBJECT_OUTLINE_ENABLED(wpd) (wpd->shading.flag & 
V3D_SHADING_OBJECT_OUTLINE)
 #define OBJECT_ID_PASS_ENABLED(wpd) (OBJECT_OUTLINE_ENABLED(wpd) || 
CURVATURE_ENABLED(wpd))

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to