Commit: e6bba9fa3a9c0368a550c6cc6413d756fe8a149b
Author: Clément Foucault
Date:   Tue Jan 17 12:59:39 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBe6bba9fa3a9c0368a550c6cc6413d756fe8a149b

Edge AO improvement when geometry is over the background.

===================================================================

M       source/blender/draw/engines/clay/clay.c
M       source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl

===================================================================

diff --git a/source/blender/draw/engines/clay/clay.c 
b/source/blender/draw/engines/clay/clay.c
index 8aaafb635d..7cfe156339 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -53,10 +53,8 @@ typedef struct CLAY_BatchStorage {
 static struct CLAY_data {
        /* Depth Pre Pass */
        struct GPUShader *depth_sh;
-       struct DRWInterface *depth_itf;
        /* Shading Pass */
        struct GPUShader *clay_sh[8];
-       struct DRWInterface *clay_itf;
 
        /* Matcap textures */
        struct GPUTexture *matcap_array;
diff --git a/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl 
b/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl
index f1ca611428..0f216bf5a3 100644
--- a/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl
+++ b/source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl
@@ -21,6 +21,7 @@ void ssao_factors(in float depth, in vec3 normal, in vec3 
position, in vec2 scre
        int num_samples = int(ssao_samples_num);
 
        for (x = 0; x < num_samples; x++) {
+               /* TODO : optimisation replace by constant */
                vec2 dir_sample = texture1D(ssao_samples, (float(x) + 0.5) / 
ssao_samples_num).rg;
 
                /* rotate with random direction to get jittered result */
@@ -32,24 +33,30 @@ void ssao_factors(in float depth, in vec3 normal, in vec3 
position, in vec2 scre
                        continue;
 
                float depth_new = texture2D(depthtex, uvcoords).r;
+
                /* Handle Background case */
-               if (depth_new != 1.0) {
-                       vec3 pos_new = get_view_space_from_depth(uvcoords, 
viewvecs[0].xyz, viewvecs[1].xyz, depth_new);
-                       vec3 dir = pos_new - position;
-                       float len = length(dir);
-                       float f_cavities = dot(dir, normal);
-                       float f_edge = dot(dir, -normal);
-                       float f_bias = 0.05 * len + 0.0001;
-
-                       float attenuation = 1.0 / (len * (1.0 + len * len * 
ssao_attenuation));
-
-                       /* use minor bias here to avoid self shadowing */
-                       if (f_cavities > f_bias)
-                               cavities += f_cavities * attenuation;
-
-                       if (f_edge > f_bias)
-                               edges += f_edge * attenuation;
-               }
+               bool is_background = (depth_new == 1.0);
+
+               /* This trick provide good edge effect even if no neighboor is 
found. */
+               vec3 pos_new = get_view_space_from_depth(uvcoords, 
viewvecs[0].xyz, viewvecs[1].xyz, (is_background) ? depth : depth_new);
+
+               if (is_background)
+                       pos_new.z -= ssao_distance;
+
+               vec3 dir = pos_new - position;
+               float len = length(dir);
+               float f_cavities = dot(dir, normal);
+               float f_edge = -f_cavities;
+               float f_bias = 0.05 * len + 0.0001;
+
+               float attenuation = 1.0 / (len * (1.0 + len * len * 
ssao_attenuation));
+
+               /* use minor bias here to avoid self shadowing */
+               if (f_cavities > -f_bias)
+                       cavities += f_cavities * attenuation;
+
+               if (f_edge > f_bias)
+                       edges += f_edge * attenuation;
        }
 
        cavities /= ssao_samples_num;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to