[Bf-blender-cvs] [9725b83415b] tmp-workbench-rewrite2: fix cavity + taa

Miguel Pozo noreply at git.blender.org
Fri Oct 28 19:33:00 CEST 2022


Commit: 9725b83415b3f58f0a643e9c96f7dee396e4e083
Author: Miguel Pozo
Date:   Fri Oct 28 19:32:35 2022 +0200
Branches: tmp-workbench-rewrite2
https://developer.blender.org/rB9725b83415b3f58f0a643e9c96f7dee396e4e083

fix cavity + taa

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

M	source/blender/draw/engines/workbench/workbench_effect_cavity.cc
M	source/blender/draw/engines/workbench/workbench_private.hh

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

diff --git a/source/blender/draw/engines/workbench/workbench_effect_cavity.cc b/source/blender/draw/engines/workbench/workbench_effect_cavity.cc
index f929d920ac1..d02bd6b5b90 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_cavity.cc
+++ b/source/blender/draw/engines/workbench/workbench_effect_cavity.cc
@@ -24,17 +24,19 @@ void CavityEffect::init(const DrawConfig &config, UniformBuffer<WorldData> &worl
   curvature_enabled = config.draw_curvature;
 
   const int ssao_samples = config.scene->display.matcap_ssao_samples;
-  const int sample_count = min_ii(max_ii(1, config.aa_samples) * ssao_samples, MAX_SAMPLES);
-  const int max_iter_count = max_ii(1, sample_count / ssao_samples);
+  int sample_count = min_ii(max_ii(1, config.aa_samples) * ssao_samples, MAX_SAMPLES);
+  const int max_iter_count = sample_count / ssao_samples;
 
   if (config.reset_taa) {
     sample = 0;
   }
-  sample = sample++ % max_iter_count;
+  sample %= max_iter_count;
 
   world_buf.cavity_sample_start = ssao_samples * sample;
   world_buf.cavity_sample_end = ssao_samples * (sample + 1);
 
+  sample++;
+
   world_buf.cavity_sample_count_inv = 1.0f / (world_buf.cavity_sample_end -
                                               world_buf.cavity_sample_start);
   world_buf.cavity_jitter_scale = 1.0f / 64.0f;
@@ -50,20 +52,20 @@ void CavityEffect::init(const DrawConfig &config, UniformBuffer<WorldData> &worl
                                max_ff(square_f(config.shading.curvature_valley_factor), 1e-4f);
 
   if (cavity_enabled || config.draw_dof) {
-    setup_resources(sample_count);
+    setup_resources(ssao_samples, sample_count);
   }
 }
 
-void CavityEffect::setup_resources(int sample_count)
+void CavityEffect::setup_resources(int iteration_samples, int total_samples)
 {
-  if (this->sample_count != sample_count) {
-    this->sample_count = sample_count;
-    const float sample_count_inv = 1.0f / sample_count;
+  if (sample_count != total_samples) {
+    sample_count = total_samples;
+    const float iteration_samples_inv = 1.0f / iteration_samples;
 
     /* Create disk samples using Hammersley distribution */
     for (int i : IndexRange(sample_count)) {
-      float it_add = (i / sample_count) * 0.499f;
-      float r = fmodf((i + 0.5f + it_add) * sample_count_inv, 1.0f);
+      float it_add = (i / iteration_samples) * 0.499f;
+      float r = fmodf((i + 0.5f + it_add) * iteration_samples_inv, 1.0f);
       double dphi;
       BLI_hammersley_1d(i, &dphi);
 
@@ -77,6 +79,8 @@ void CavityEffect::setup_resources(int sample_count)
 
     samples_buf.push_update();
 
+    const float total_samples_inv = 1.0f / iteration_samples;
+
     /* Create blue noise jitter texture */
     const int jitter_texel_count = JITTER_TEX_SIZE * JITTER_TEX_SIZE;
     static float4 jitter[jitter_texel_count];
@@ -88,7 +92,7 @@ void CavityEffect::setup_resources(int sample_count)
       /* This offset the sample along its direction axis (reduce banding) */
       float bn = blue_noise[i][1] - 0.5f;
       bn = clamp_f(bn, -0.499f, 0.499f); /* fix fireflies */
-      jitter[i].z = bn * sample_count_inv;
+      jitter[i].z = bn * total_samples_inv;
       jitter[i].w = blue_noise[i][1];
     }
 
diff --git a/source/blender/draw/engines/workbench/workbench_private.hh b/source/blender/draw/engines/workbench/workbench_private.hh
index fc3bc214d3e..c8d3e433c72 100644
--- a/source/blender/draw/engines/workbench/workbench_private.hh
+++ b/source/blender/draw/engines/workbench/workbench_private.hh
@@ -126,7 +126,7 @@ class CavityEffect {
   /*TODO(Miguel Pozo): Move to SceneResources (Used by DoF too)*/
   Texture jitter_tx;
 
-  void setup_resources(int sample_count);
+  void setup_resources(int iteration_samples, int total_samples);
 
   void init(const DrawConfig &config, UniformBuffer<WorldData> &world_buf);



More information about the Bf-blender-cvs mailing list