29 const int max_iter_count = sample_count / ssao_samples;
31 sample_ = scene_state.
sample % max_iter_count;
35 world_buf.cavity_sample_start = ssao_samples * sample_;
36 world_buf.cavity_sample_end = ssao_samples * (sample_ + 1);
38 world_buf.cavity_sample_count_inv = 1.0f / (world_buf.cavity_sample_end -
39 world_buf.cavity_sample_start);
40 world_buf.cavity_jitter_scale = 1.0f / 64.0f;
47 world_buf.curvature_ridge = 0.5f /
52 if (cavity_enabled_ && sample_count_ != sample_count) {
53 sample_count_ = sample_count;
54 load_samples_buf(ssao_samples);
59void CavityEffect::load_samples_buf(
int ssao_samples)
61 const float iteration_samples_inv = 1.0f / ssao_samples;
65 float it_add = (
i / ssao_samples) * 0.499f;
66 float r =
fmodf((
i + 0.5f + it_add) * iteration_samples_inv, 1.0f);
70 float phi =
float(dphi) * 2.0f *
M_PI + it_add;
78 samples_buf.push_update();
83 if (cavity_enabled_) {
84 pass.
bind_ubo(
"cavity_samples", samples_buf);
87 {GPU_SAMPLER_FILTERING_DEFAULT,
88 GPU_SAMPLER_EXTEND_MODE_REPEAT,
89 GPU_SAMPLER_EXTEND_MODE_REPEAT});
91 if (curvature_enabled_) {
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float square_f(float a)
void BLI_hammersley_1d(unsigned int n, double *r)
void bind_texture(const char *name, gpu::Texture *texture, GPUSamplerState state=sampler_auto)
void bind_ubo(const char *name, gpu::UniformBuf *buffer)
void setup_resolve_pass(PassSimple &pass, SceneResources &resources)
void init(const SceneState &scene_state, SceneResources &resources)
detail::Pass< command::DrawCommandBuf > PassSimple
T cos(const AngleRadianBase< T > &a)
T sin(const AngleRadianBase< T > &a)
float matcap_ssao_distance
float matcap_ssao_attenuation
struct SceneDisplay display
float curvature_ridge_factor
float cavity_ridge_factor
float cavity_valley_factor
float curvature_valley_factor
UniformBuffer< WorldData > world_buf
void load_jitter_tx(int total_samples)
TextureFromPool object_id_tx