[Bf-blender-cvs] [8f4d58de4a] blender2.8: Clay Engine: Cleanup
Clément Foucault
noreply at git.blender.org
Sat Mar 25 19:56:52 CET 2017
Commit: 8f4d58de4a4e5d596c309bff1475b5cac498a33f
Author: Clément Foucault
Date: Fri Mar 24 14:49:33 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB8f4d58de4a4e5d596c309bff1475b5cac498a33f
Clay Engine: Cleanup
Remove unused code.
Fixed the amount of sample in the noise texture.
Add a small optimisation.
===================================================================
M source/blender/draw/engines/clay/clay.c
===================================================================
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index 6a7e8d10f9..9a2cab1273 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -42,7 +42,6 @@
extern char datatoc_clay_frag_glsl[];
extern char datatoc_clay_vert_glsl[];
extern char datatoc_ssao_alchemy_glsl[];
-extern char datatoc_ssao_groundtruth_glsl[];
/* *********** LISTS *********** */
@@ -127,6 +126,7 @@ static struct {
float winmat[4][4];
float viewvecs[3][4];
float ssao_params[4];
+ int cached_sample_num;
struct GPUTexture *jitter_tx;
struct GPUTexture *sampling_tx;
@@ -144,8 +144,6 @@ static struct {
CLAY_Data *vedata;
} g_data = {NULL}; /* Transient data */
-//#define GTAO
-
/* Functions */
static void add_icon_to_rect(PreviewImage *prv, float *final_rect, int layer)
@@ -245,14 +243,9 @@ static struct GPUTexture *create_jitter_texture(void)
/* TODO replace by something more evenly distributed like blue noise */
for (i = 0; i < 64 * 64; i++) {
-#ifdef GTAO
- jitter[i][0] = BLI_frand();
- jitter[i][1] = BLI_frand();
-#else
jitter[i][0] = 2.0f * BLI_frand() - 1.0f;
jitter[i][1] = 2.0f * BLI_frand() - 1.0f;
normalize_v2(jitter[i]);
-#endif
}
return DRW_texture_create_2D(64, 64, DRW_TEX_RG_16, DRW_TEX_FILTER | DRW_TEX_WRAP, &jitter[0][0]);
@@ -327,11 +320,6 @@ static void CLAY_engine_init(void)
e_data.jitter_tx = create_jitter_texture();
}
- /* AO Samples */
- /* TODO use hammersley sequence */
- if (!e_data.sampling_tx) {
- e_data.sampling_tx = create_spiral_sample_texture(500);
- }
/* Depth prepass */
if (!e_data.depth_sh) {
@@ -349,11 +337,7 @@ static void CLAY_engine_init(void)
char *matcap_with_ao;
BLI_dynstr_append(ds, datatoc_clay_frag_glsl);
-#ifdef GTAO
- BLI_dynstr_append(ds, datatoc_ssao_groundtruth_glsl);
-#else
BLI_dynstr_append(ds, datatoc_ssao_alchemy_glsl);
-#endif
matcap_with_ao = BLI_dynstr_get_cstring(ds);
@@ -435,6 +419,17 @@ static void CLAY_engine_init(void)
mul_v3_fl(vec_far, 1.0f / vec_far[3]);
e_data.viewvecs[1][2] = vec_far[2] - e_data.viewvecs[0][2];
}
+
+ /* AO Samples Tex */
+ if (e_data.sampling_tx && (e_data.cached_sample_num != settings->ssao_samples)) {
+ DRW_texture_free(e_data.sampling_tx);
+ e_data.sampling_tx = NULL;
+ }
+
+ if (!e_data.sampling_tx) {
+ e_data.sampling_tx = create_spiral_sample_texture(settings->ssao_samples);
+ e_data.cached_sample_num = settings->ssao_samples;
+ }
}
}
@@ -456,10 +451,8 @@ static DRWShadingGroup *CLAY_shgroup_create(DRWPass *pass, int *material_id)
DRW_shgroup_uniform_int(grp, "mat_id", material_id, 1);
-#ifndef GTAO
DRW_shgroup_uniform_texture(grp, "ssao_jitter", e_data.jitter_tx, jitterloc);
DRW_shgroup_uniform_texture(grp, "ssao_samples", e_data.sampling_tx, sampleloc);
-#endif
return grp;
}
@@ -504,7 +497,8 @@ static int push_mat_to_ubo(CLAY_Storage *storage, float matcap_rot, float matcap
ubo->matcap_hsv[1] = matcap_sat * 2.0f;
ubo->matcap_hsv[2] = matcap_val * 2.0f;
- ubo->ssao_params_var[0] = ssao_distance;
+ /* small optimisation : make samples not spread if we don't need ssao */
+ ubo->ssao_params_var[0] = (ssao_factor_cavity + ssao_factor_edge > 0.0f) ? ssao_distance : 0.0f;
ubo->ssao_params_var[1] = ssao_factor_cavity;
ubo->ssao_params_var[2] = ssao_factor_edge;
ubo->ssao_params_var[3] = ssao_attenuation;
@@ -618,20 +612,8 @@ static void CLAY_cache_init(void)
psl->depth_pass = DRW_pass_create("Depth Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
g_data.depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
- g_data.depth_shgrp_select = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
- DRW_shgroup_state_set(g_data.depth_shgrp_select, DRW_STATE_WRITE_STENCIL_SELECT);
-
- g_data.depth_shgrp_active = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
- DRW_shgroup_state_set(g_data.depth_shgrp_active, DRW_STATE_WRITE_STENCIL_ACTIVE);
-
psl->depth_pass_cull = DRW_pass_create("Depth Pass Cull", DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_CULL_BACK);
g_data.depth_shgrp_cull = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
-
- g_data.depth_shgrp_cull_select = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
- DRW_shgroup_state_set(g_data.depth_shgrp_cull_select, DRW_STATE_WRITE_STENCIL_SELECT);
-
- g_data.depth_shgrp_cull_active = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass_cull);
- DRW_shgroup_state_set(g_data.depth_shgrp_cull_active, DRW_STATE_WRITE_STENCIL_ACTIVE);
}
/* Clay Pass */
@@ -661,13 +643,7 @@ static void CLAY_cache_populate(Object *ob)
geom = DRW_cache_surface_get(ob);
/* Depth Prepass */
- /* waiting for proper flag */
- // if ((ob->base_flag & BASE_ACTIVE) != 0)
- // DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull_active : g_data.depth_shgrp_active, geom, ob->obmat);
- if ((ob->base_flag & BASE_SELECTED) != 0)
- DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull_select : g_data.depth_shgrp_select, geom, ob->obmat);
- else
- DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull : g_data.depth_shgrp, geom, ob->obmat);
+ DRW_shgroup_call_add((do_cull) ? g_data.depth_shgrp_cull : g_data.depth_shgrp, geom, ob->obmat);
/* Shading */
clay_shgrp = CLAY_object_shgrp_get(ob, stl, psl);
More information about the Bf-blender-cvs
mailing list