34 #include "../eevee/eevee_lut.h"
39 #define JITTER_TEX_SIZE 64
40 #define CAVITY_MAX_SAMPLES 512
46 const int total_samples = num_samples * num_iterations;
47 const float num_samples_inv = 1.0f / num_samples;
50 for (
int i = 0; i < total_samples; i++) {
51 float it_add = (i / num_samples) * 0.499f;
52 float r =
fmodf((i + 0.5f + it_add) * num_samples_inv, 1.0f);
56 float phi = (
float)dphi * 2.0f *
M_PI + it_add;
57 texels[i][0] =
cosf(phi);
58 texels[i][1] =
sinf(phi);
64 return (
float *)texels;
69 float jitter[64 * 64][4];
70 const float num_samples_inv = 1.0f / num_samples;
72 for (
int i = 0; i < 64 * 64; i++) {
75 jitter[i][0] =
cosf(phi);
76 jitter[i][1] =
sinf(phi);
79 CLAMP(bn, -0.499f, 0.499f);
80 jitter[i][2] = bn * num_samples_inv;
105 const int max_iter_count = cavity_sample_count_total / cavity_sample_count_single_iteration;
131 const int max_iter_count =
max_ii(1, cavity_sample_count / cavity_sample_count_single_iteration);
139 float *samples =
create_disk_samples(cavity_sample_count_single_iteration, max_iter_count);
typedef float(TangentPoint)[2]
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
MINLINE float square_f(float a)
void BLI_hammersley_1d(unsigned int n, double *r)
#define DRW_UBO_FREE_SAFE(ubo)
#define DRW_PASS_CREATE(pass, state)
#define DRW_TEXTURE_FREE_SAFE(tex)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
struct GPUShader GPUShader
struct GPUTexture GPUTexture
Group RGB to Bright Vector Camera CLAMP
const DRWContextState * DRW_context_state_get(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
void DRW_shgroup_uniform_block(DRWShadingGroup *shgroup, const char *name, const GPUUniformBuf *ubo)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, Object *ob, uint tri_count)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
GPUTexture * DRW_texture_create_2d(int w, int h, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
const float blue_noise[64 *64][4]
const float btdf_split_sum_ggx[16][64 *64 *2]
const float bsdf_split_sum_ggx[64 *64 *2]
const float ltc_mag_ggx[64 *64 *2]
const float ltc_disk_integral[64 *64]
const float ltc_mat_ggx[64 *64 *4]
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void sample(SocketReader *reader, int x, int y, float color[4])
struct GPUTexture * depth
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
struct DRWPass * cavity_ps
struct GPUUniformBuf * world_ubo
struct GPUTexture * object_id_tx
struct GPUTexture * normal_buffer_tx
struct WORKBENCH_ViewLayerData * vldata
float cavity_jitter_scale
float cavity_valley_factor
float cavity_sample_count_inv
float cavity_ridge_factor
struct GPUUniformBuf * cavity_sample_ubo
struct GPUTexture * cavity_jitter_tx
void workbench_cavity_data_update(WORKBENCH_PrivateData *wpd, WORKBENCH_UBO_World *wd)
void workbench_cavity_samples_ubo_ensure(WORKBENCH_PrivateData *wpd)
BLI_INLINE int workbench_cavity_total_sample_count(const WORKBENCH_PrivateData *wpd, const Scene *scene)
void workbench_cavity_cache_init(WORKBENCH_Data *data)
static float * create_disk_samples(int num_samples, int num_iterations)
static struct GPUTexture * create_jitter_texture(int num_samples)
#define CAVITY_MAX_SAMPLES
#define CURVATURE_ENABLED(wpd)
GPUShader * workbench_shader_cavity_get(bool cavity, bool curvature)
#define CAVITY_ENABLED(wpd)
#define SSAO_ENABLED(wpd)