[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