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:
authorJeroen Bakker <j.bakker@atmind.nl>2018-06-12 16:15:36 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-06-12 16:32:31 +0300
commitb6b1e0f56cefc43571c8fc09bb14e4cb4bff7841 (patch)
treeb671b08cf7373476a0fb6982fefa4b8d068dd85c /source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl
parentd72ddb81aecb74be9e9403198644f0a68c7268c2 (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.glsl122
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;
-}