Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/draw/engines/eevee/eevee_effects.c1
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c6
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c93
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h1
-rw-r--r--source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl5
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl1
6 files changed, 62 insertions, 45 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 0f61b6e967c..ace350cada1 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -526,7 +526,6 @@ void EEVEE_effects_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata)
effects->ao_settings += 4.0; /* USE_DENOISE */
}
- effects->ao_offset = 0.0f;
effects->ao_bounce_fac = (float)BKE_collection_engine_property_value_get_bool(props, "gtao_bounce");
effects->ao_texsize[0] = ((int)viewport_size[0]);
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 6ea717a0471..99dff4ec51a 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -138,7 +138,6 @@ static void EEVEE_cache_finish(void *vedata)
static void EEVEE_draw_scene(void *vedata)
{
EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
- EEVEE_StorageList *stl = ((EEVEE_Data *)vedata)->stl;
EEVEE_FramebufferList *fbl = ((EEVEE_Data *)vedata)->fbl;
EEVEE_SceneLayerData *sldata = EEVEE_scene_layer_data_get();
@@ -153,10 +152,11 @@ static void EEVEE_draw_scene(void *vedata)
/* XXX temp for denoising render. TODO plug number of samples here */
if (DRW_state_is_image_render()) {
- rand += 1.0f / 8.0f;
+ rand += 1.0f / 16.0f;
rand = rand - floorf(rand);
+
/* Set jitter offset */
- stl->effects->ao_offset = rand * stl->effects->ao_samples_inv;
+ EEVEE_update_util_texture(rand);
}
while (loop_ct--) {
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index ef330c424ab..a26c2a4478f 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -411,6 +411,61 @@ static void create_default_shader(int options)
MEM_freeN(frag_str);
}
+void EEVEE_update_util_texture(float offset)
+{
+ if (e_data.util_tex != NULL) {
+ DRW_TEXTURE_FREE_SAFE(e_data.util_tex);
+ }
+
+ /* TODO: split this into 2 functions : one for init,
+ * and the other one that updates the noise with the offset. */
+ const int layers = 3 + 16;
+ float (*texels)[4] = MEM_mallocN(sizeof(float[4]) * 64 * 64 * layers, "utils texels");
+ float (*texels_layer)[4] = texels;
+
+ /* Copy ltc_mat_ggx into 1st layer */
+ memcpy(texels_layer, ltc_mat_ggx, sizeof(float[4]) * 64 * 64);
+ texels_layer += 64 * 64;
+
+ /* Copy bsdf_split_sum_ggx into 2nd layer red and green channels.
+ Copy ltc_mag_ggx into 2nd layer blue channel. */
+ for (int i = 0; i < 64 * 64; i++) {
+ texels_layer[i][0] = bsdf_split_sum_ggx[i*2 + 0];
+ texels_layer[i][1] = bsdf_split_sum_ggx[i*2 + 1];
+ texels_layer[i][2] = ltc_mag_ggx[i];
+ }
+ texels_layer += 64 * 64;
+
+ /* Copy blue noise in 3rd layer */
+ for (int i = 0; i < 64 * 64; i++) {
+ float noise;
+ noise = blue_noise[i][0] + offset;
+ noise = noise - floorf(noise); /* fract */
+ texels_layer[i][0] = noise;
+
+ noise = blue_noise[i][1] + offset;
+ noise = noise - floorf(noise); /* fract */
+ texels_layer[i][1] = noise * 0.5 + 0.5;
+ texels_layer[i][2] = cosf(noise * 2.0 * M_PI);
+ texels_layer[i][3] = sinf(noise * 2.0 * M_PI);
+ }
+ texels_layer += 64 * 64;
+
+ /* Copy Refraction GGX LUT in layer 4 - 20 */
+ for (int j = 0; j < 16; ++j) {
+ for (int i = 0; i < 64 * 64; i++) {
+ texels_layer[i][0] = btdf_split_sum_ggx[j*2][i];
+ texels_layer[i][1] = btdf_split_sum_ggx[j*2][i];
+ texels_layer[i][2] = btdf_split_sum_ggx[j*2][i];
+ texels_layer[i][3] = btdf_split_sum_ggx[j*2][i];
+ }
+ texels_layer += 64 * 64;
+ }
+
+ e_data.util_tex = DRW_texture_create_2D_array(64, 64, layers, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_WRAP, (float *)texels);
+ MEM_freeN(texels);
+}
+
void EEVEE_materials_init(EEVEE_StorageList *stl)
{
if (!e_data.frag_shader_lib) {
@@ -466,43 +521,7 @@ void EEVEE_materials_init(EEVEE_StorageList *stl)
MEM_freeN(frag_str);
- /* Textures */
- const int layers = 3 + 16;
- float (*texels)[4] = MEM_mallocN(sizeof(float[4]) * 64 * 64 * layers, "utils texels");
- float (*texels_layer)[4] = texels;
-
- /* Copy ltc_mat_ggx into 1st layer */
- memcpy(texels_layer, ltc_mat_ggx, sizeof(float[4]) * 64 * 64);
- texels_layer += 64 * 64;
-
- /* Copy bsdf_split_sum_ggx into 2nd layer red and green channels.
- Copy ltc_mag_ggx into 2nd layer blue channel. */
- for (int i = 0; i < 64 * 64; i++) {
- texels_layer[i][0] = bsdf_split_sum_ggx[i*2 + 0];
- texels_layer[i][1] = bsdf_split_sum_ggx[i*2 + 1];
- texels_layer[i][2] = ltc_mag_ggx[i];
- }
- texels_layer += 64 * 64;
-
- for (int i = 0; i < 64 * 64; i++) {
- texels_layer[i][0] = blue_noise[i][0];
- texels_layer[i][1] = blue_noise[i][1] * 0.5 + 0.5;
- texels_layer[i][2] = cosf(blue_noise[i][1] * 2.0 * M_PI);
- texels_layer[i][3] = sinf(blue_noise[i][1] * 2.0 * M_PI);
- }
-
- for (int j = 0; j < 16; ++j) {
- texels_layer += 64 * 64;
- for (int i = 0; i < 64 * 64; i++) {
- texels_layer[i][0] = btdf_split_sum_ggx[j*2][i];
- texels_layer[i][1] = btdf_split_sum_ggx[j*2][i];
- texels_layer[i][2] = btdf_split_sum_ggx[j*2][i];
- texels_layer[i][3] = btdf_split_sum_ggx[j*2][i];
- }
- }
-
- e_data.util_tex = DRW_texture_create_2D_array(64, 64, layers, DRW_TEX_RGBA_16, DRW_TEX_FILTER | DRW_TEX_WRAP, (float *)texels);
- MEM_freeN(texels);
+ EEVEE_update_util_texture(0.0f);
}
{
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 1f1a4ef0fcf..723b7789377 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -522,6 +522,7 @@ struct GPUMaterial *EEVEE_material_mesh_depth_get(struct Scene *scene, Material
struct GPUMaterial *EEVEE_material_hair_get(struct Scene *scene, Material *ma);
void EEVEE_materials_free(void);
void EEVEE_draw_default_passes(EEVEE_PassList *psl);
+void EEVEE_update_util_texture(float offset);
/* eevee_lights.c */
void EEVEE_lights_init(EEVEE_SceneLayerData *sldata);
diff --git a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
index e346009bba8..2202ee605fc 100644
--- a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
@@ -23,7 +23,7 @@ uniform ivec2 aoHorizonTexSize;
#define aoFactor aoParameters[0].z
#define aoInvSamples aoParameters[0].w
-#define aoOffset aoParameters[1].x
+#define aoOffset aoParameters[1].x /* UNUSED */
#define aoBounceFac aoParameters[1].y
#define aoQuality aoParameters[1].z
#define aoSettings aoParameters[1].w
@@ -76,8 +76,6 @@ float get_phi(ivec2 hr_co, ivec2 fs_co, float sample)
}
/* Blue noise is scaled to cover the rest of the range. */
phi += aoInvSamples * blue_noise;
- /* Rotate everything (for multisampling) */
- phi += aoOffset;
phi *= M_PI;
return phi;
@@ -91,7 +89,6 @@ float get_offset(ivec2 fs_co, float sample)
/* Interleaved jitter for spatial 2x2 denoising */
offset += 0.25 * dot(vec2(1.0), vec2(fs_co & 1));
offset += texture(utilTex, vec3((vec2(fs_co / 2) + 0.5 + 16.0) / LUT_SIZE, 2.0)).r;
- offset = fract(offset + aoOffset);
return offset;
}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
index 7dc047882c3..0a958404385 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -16,6 +16,7 @@ uniform sampler2D normalBuffer;
uniform sampler2D specroughBuffer;
uniform int planar_count;
+uniform float noiseOffset;
layout(location = 0) out vec4 hitData0;
layout(location = 1) out vec4 hitData1;