[Bf-blender-cvs] [4e298108a38] tmp-overlay-engine: Overlay Engine: Fix/Improve Temporal AntiAliasing

Clément Foucault noreply at git.blender.org
Wed Nov 27 16:20:43 CET 2019


Commit: 4e298108a38569d9e4764e6ed21c4cac0b8bcad9
Author: Clément Foucault
Date:   Wed Nov 27 16:51:14 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB4e298108a38569d9e4764e6ed21c4cac0b8bcad9

Overlay Engine: Fix/Improve Temporal AntiAliasing

We now render 5 samples using some kind of quicunx sample position with
the first sample in the center and the 4 others being a rotated square.

Also remove a bug where the last sample would never be rendered.

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

M	source/blender/draw/engines/overlay/overlay_antialiasing.c

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

diff --git a/source/blender/draw/engines/overlay/overlay_antialiasing.c b/source/blender/draw/engines/overlay/overlay_antialiasing.c
index d79633c14f8..28e20d89718 100644
--- a/source/blender/draw/engines/overlay/overlay_antialiasing.c
+++ b/source/blender/draw/engines/overlay/overlay_antialiasing.c
@@ -50,7 +50,7 @@ void OVERLAY_antialiasing_init(OVERLAY_Data *vedata)
   pd->antialiasing.enabled = dtxl->multisample_color != NULL;
 
   if (pd->antialiasing.enabled) {
-    pd->antialiasing.target_sample = 3;
+    pd->antialiasing.target_sample = 4;
 
     bool valid_history = true;
     if (txl->overlay_color_history_tx == NULL || pd->antialiasing.sample == 0) {
@@ -98,13 +98,17 @@ void OVERLAY_antialiasing_init(OVERLAY_Data *vedata)
       const float *viewport_size = DRW_viewport_size_get();
       int nr = min_ii(pd->antialiasing.sample, pd->antialiasing.target_sample);
       /* x4 rotated grid. TODO(fclem) better patterns. */
-      const float samples_pos[4][2] = {{-2, 6}, {6, 2}, {-6, 2}, {2, 6}};
-      float ofs[2] = {0.5f + samples_pos[nr][0] / 8.0f, 0.5f + samples_pos[nr][1] / 8.0f};
+      const float samples_pos[5][2] = {{0, 0}, {-2, -6}, {6, -2}, {-6, 2}, {2, 6}};
+      /* For nr = 0,we should sample {0, 0} (goes through the FXAA branch). */
+      float ofs[2] = {samples_pos[nr][0] / 6.0f, samples_pos[nr][1] / 6.0f};
 
       window_translate_m4(winmat, persmat, ofs[0] / viewport_size[0], ofs[1] / viewport_size[1]);
 
       const DRWView *default_view = DRW_view_default_get();
       pd->view_default = DRW_view_create_sub(default_view, viewmat, winmat);
+
+      /* Avoid infinite sample count. */
+      CLAMP_MAX(pd->antialiasing.sample, pd->antialiasing.target_sample + 1);
     }
     else {
       /* FXAA */
@@ -162,7 +166,7 @@ void OVERLAY_antialiasing_cache_init(OVERLAY_Data *vedata)
 
       /* TODO do not even render if not necessary. */
       float alpha = 0.0f;
-      if (pd->antialiasing.sample < pd->antialiasing.target_sample) {
+      if (pd->antialiasing.sample <= pd->antialiasing.target_sample) {
         alpha = 1.0f / (pd->antialiasing.sample + 1);
       }
 
@@ -228,7 +232,7 @@ void OVERLAY_antialiasing_end(OVERLAY_Data *vedata)
       GPU_framebuffer_bind(dfbl->default_fb);
       DRW_draw_pass(psl->antialiasing_ps);
 
-      if (pd->antialiasing.sample < pd->antialiasing.target_sample) {
+      if (pd->antialiasing.sample <= pd->antialiasing.target_sample) {
         pd->antialiasing.sample++;
         DRW_viewport_request_redraw();
       }



More information about the Bf-blender-cvs mailing list