diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-06-12 16:15:36 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-06-12 16:32:31 +0300 |
commit | b6b1e0f56cefc43571c8fc09bb14e4cb4bff7841 (patch) | |
tree | b671b08cf7373476a0fb6982fefa4b8d068dd85c /source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl | |
parent | d72ddb81aecb74be9e9403198644f0a68c7268c2 (diff) |
T55454: removal of clay engine
The ClayEngine was introduced to test the blender2.8 architecture during
development. As currently we have the wanted features implemented with
matcaps we are going to remove the clay engine as it was never intended
to be an official releasable engine
Note: The test cases are never run. But when enabled will be skipped as
they were implemented over the Clay Engine
Diffstat (limited to 'source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl')
-rw-r--r-- | source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl b/source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl deleted file mode 100644 index 9c203a4246c..00000000000 --- a/source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl +++ /dev/null @@ -1,122 +0,0 @@ -#define ssao_distance matcaps_param[mat_id].ssao_params_var.x -#define ssao_factor_cavity matcaps_param[mat_id].ssao_params_var.y -#define ssao_factor_edge matcaps_param[mat_id].ssao_params_var.z -#define ssao_attenuation matcaps_param[mat_id].ssao_params_var.w - -/* Based on Practical Realtime Strategies for Accurate Indirect Occlusion - * http://blog.selfshadow.com/publications/s2016-shading-course/activision/s2016_pbs_activision_occlusion.pdf - * http://blog.selfshadow.com/publications/s2016-shading-course/activision/s2016_pbs_activision_occlusion.pptx */ - -#define COSINE_WEIGHTING - -float integrate_arc(in float h1, in float h2, in float gamma, in float n_proj_len) -{ - float a = 0.0; -#ifdef COSINE_WEIGHTING - float cos_gamma = cos(gamma); - float sin_gamma_2 = 2.0 * sin(gamma); - a += -cos(2.0 * h1 - gamma) + cos_gamma + h1 * sin_gamma_2; - a += -cos(2.0 * h2 - gamma) + cos_gamma + h2 * sin_gamma_2; - a *= 0.25; /* 1/4 */ - a *= n_proj_len; -#else - /* Uniform weighting (slide 59) */ - a += 1 - cos(h1); - a += 1 - cos(h2); -#endif - return a; -} - -float get_max_horizon(in vec2 co, in vec3 x, in vec3 omega_o, in float h) -{ - if (co.x > 1.0 || co.x < 0.0 || co.y > 1.0 || co.y < 0.0) - return h; - - float depth = texture(depthtex, co).r; - - /* Background case */ - if (depth == 1.0) - return h; - - vec3 s = get_view_space_from_depth(co, depth); /* s View coordinate */ - vec3 omega_s = s - x; - float len = length(omega_s); - - if (len < ssao_distance) { - omega_s /= len; - h = max(h, dot(omega_s, omega_o)); - } - return h; -} - -void ssao_factors( - in float depth, in vec3 normal, in vec3 position, in vec2 screenco, - out float cavities, out float edges) -{ - /* Renaming */ - vec3 omega_o = -normalize(position); /* viewvec */ - vec2 x_ = screenco; /* x^ Screen coordinate */ - vec3 x = position; /* x view space coordinate */ - -#ifdef SPATIAL_DENOISE - float noise_dir = (1.0 / 16.0) * float(((int(gl_FragCoord.x + gl_FragCoord.y) & 0x3) << 2) + (int(gl_FragCoord.x) & 0x3)); - float noise_offset = (1.0 / 4.0) * float(int(gl_FragCoord.y - gl_FragCoord.x) & 0x3); -#else - float noise_dir = (1.0 / 16.0) * float(((int(gl_FragCoord.x + gl_FragCoord.y) & 0x3) << 2) + (int(gl_FragCoord.x) & 0x3)); - float noise_offset = (0.5 / 16.0) + (1.0 / 16.0) * float(((int(gl_FragCoord.x - gl_FragCoord.y) & 0x3) << 2) + (int(gl_FragCoord.x) & 0x3)); -#endif - - const float phi_step = 16.0; - const float theta_step = 16.0; - const float m_pi = 3.14159265358979323846; - vec2 pixel_ratio = vec2(screenres.y / screenres.x, 1.0); - vec2 pixel_size = vec2(1.0) / screenres.xy; - float min_stride = length(pixel_size); - float homcco = WinMatrix[2][3] * position.z + WinMatrix[3][3]; - float n = max(min_stride * theta_step, ssao_distance / homcco); /* Search distance */ - - /* Integral over PI */ - float A = 0.0; - for (float i = 0.0; i < phi_step; i++) { - float phi = m_pi * ((noise_dir + i) / phi_step); - - vec2 t_phi = vec2(cos(phi), sin(phi)); /* Screen space direction */ - - /* Search maximum horizon angles Theta1 and Theta2 */ - float theta1 = -1.0, theta2 = -1.0; /* init at cos(pi) */ - for (float j = 0.0; j < theta_step; j++) { - vec2 s_ = t_phi * pixel_ratio * n * ((j + noise_offset)/ theta_step); /* s^ Screen coordinate */ - vec2 co; - - co = x_ + s_; - theta1 = get_max_horizon(co, x, omega_o, theta1); - - co = x_ - s_; - theta2 = get_max_horizon(co, x, omega_o, theta2); - } - - /* (Slide 54) */ - theta1 = -acos(theta1); - theta2 = acos(theta2); - - /* Projecting Normal to Plane P defined by t_phi and omega_o */ - vec3 h = normalize(cross(vec3(t_phi, 0.0), omega_o)); /* Normal vector to Integration plane */ - vec3 t = cross(h, omega_o); /* Normal vector to plane */ - vec3 n_proj = normal - h * dot(normal, h); - float n_proj_len = length(n_proj); - vec3 n_proj_norm = normalize(n_proj); - - /* Clamping thetas (slide 58) */ - float gamma = sign(dot(n_proj_norm, t)) * acos(dot(normal, omega_o)); /* Angle between view vec and normal */ - theta1 = gamma + max(theta1 - gamma, -m_pi * 0.5); - theta2 = gamma + min(theta2 - gamma, m_pi * 0.5); - - /* Solving inner integral */ - A += integrate_arc(theta1, theta2, gamma, n_proj_len); - } - - A /= phi_step; - - cavities = 1.0 - A; - edges = 0.0; -} |