From e844a6fba2768cace7386aa5c8575127a8cbe751 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Mon, 10 Nov 2014 21:52:07 -0500 Subject: [PATCH 01/11] Add Lambertian reflectance to diffuse.frag. --- assets/shader/deferred/diffuse.frag | 24 +++++++++++++++++++----- assets/shader/deferred/post.frag | 18 ++++++++++++------ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index ef0c5fc..4880375 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -12,12 +12,26 @@ uniform int u_displayType; varying vec2 v_texcoord; float linearizeDepth( float exp_depth, float near, float far ){ - return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); + return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } void main() { - // Write a diffuse shader and a Blinn-Phong shader - // NOTE : You may need to add your own normals to fulfill the second's requirements - gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); -} + // Write a diffuse shader and a Blinn-Phong shader + // NOTE : You may need to add your own normals to fulfill the second's requirements + //gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); + + vec3 light_pos = vec3( 10.0, 0.0, -10.0 ); + float light_intensity = 0.2; + + vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; + vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; + vec3 color = texture2D( u_colorTex, v_texcoord ).rgb; + + float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); + gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); + + // TODO: Blinn-Phong. + + // TODO: Define light position and intensity. +} \ No newline at end of file diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 52edda2..176a135 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -5,13 +5,19 @@ uniform sampler2D u_shadeTex; varying vec2 v_texcoord; float linearizeDepth( float exp_depth, float near, float far ){ - return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); + return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } void main() { - // Currently acts as a pass filter that immmediately renders the shaded texture - // Fill in post-processing as necessary HERE - // NOTE : You may choose to use a key-controlled switch system to display one feature at a time - gl_FragColor = vec4(texture2D( u_shadeTex, v_texcoord).rgb, 1.0); -} + // Currently acts as a pass filter that immmediately renders the shaded texture + // Fill in post-processing as necessary HERE + // NOTE : You may choose to use a key-controlled switch system to display one feature at a time + gl_FragColor = vec4(texture2D( u_shadeTex, v_texcoord).rgb, 1.0); + + // TODO: Ambient occlusion. + + // TODO: Toon shader. + + // TODO: Bloom. +} \ No newline at end of file From 31fc3780fb78c321e7d405c4890b084b610cda4f Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Tue, 11 Nov 2014 14:14:36 -0500 Subject: [PATCH 02/11] Bind G-buffer textures to fix diffuse lighting computations. --- assets/shader/deferred/diffuse.frag | 8 +++++--- js/main.js | 22 +++++++++++----------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 4880375..11311aa 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -21,8 +21,8 @@ void main() // NOTE : You may need to add your own normals to fulfill the second's requirements //gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); - vec3 light_pos = vec3( 10.0, 0.0, -10.0 ); - float light_intensity = 0.2; + vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); + float light_intensity = 1.0; vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; @@ -33,5 +33,7 @@ void main() // TODO: Blinn-Phong. - // TODO: Define light position and intensity. + // TODO: Make light position and intensity uniforms. + + // TODO: Add material specularity as a uniform. } \ No newline at end of file diff --git a/js/main.js b/js/main.js index 4140ae1..28377a5 100644 --- a/js/main.js +++ b/js/main.js @@ -215,25 +215,25 @@ var renderShade = function () { gl.clear(gl.COLOR_BUFFER_BIT); // Bind necessary textures - //gl.activeTexture( gl.TEXTURE0 ); //position - //gl.bindTexture( gl.TEXTURE_2D, fbo.texture(0) ); - //gl.uniform1i( shadeProg.uPosSamplerLoc, 0 ); + gl.activeTexture( gl.TEXTURE0 ); //position + gl.bindTexture( gl.TEXTURE_2D, fbo.texture(0) ); + gl.uniform1i( shadeProg.uPosSamplerLoc, 0 ); - //gl.activeTexture( gl.TEXTURE1 ); //normal - //gl.bindTexture( gl.TEXTURE_2D, fbo.texture(1) ); - //gl.uniform1i( shadeProg.uNormalSamplerLoc, 1 ); + gl.activeTexture( gl.TEXTURE1 ); //normal + gl.bindTexture( gl.TEXTURE_2D, fbo.texture(1) ); + gl.uniform1i( shadeProg.uNormalSamplerLoc, 1 ); gl.activeTexture( gl.TEXTURE2 ); //color gl.bindTexture( gl.TEXTURE_2D, fbo.texture(2) ); gl.uniform1i( shadeProg.uColorSamplerLoc, 2 ); - //gl.activeTexture( gl.TEXTURE3 ); //depth - //gl.bindTexture( gl.TEXTURE_2D, fbo.depthTexture() ); - //gl.uniform1i( shadeProg.uDepthSamplerLoc, 3 ); + gl.activeTexture( gl.TEXTURE3 ); //depth + gl.bindTexture( gl.TEXTURE_2D, fbo.depthTexture() ); + gl.uniform1i( shadeProg.uDepthSamplerLoc, 3 ); // Bind necessary uniforms - //gl.uniform1f( shadeProg.uZNearLoc, zNear ); - //gl.uniform1f( shadeProg.uZFarLoc, zFar ); + gl.uniform1f( shadeProg.uZNearLoc, zNear ); + gl.uniform1f( shadeProg.uZFarLoc, zFar ); drawQuad(shadeProg); From e565602bd2423b001774140ed0e5219c2c85d21a Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Tue, 11 Nov 2014 20:54:33 -0500 Subject: [PATCH 03/11] Add unsuccessful attempt at image-space horizon-based ambient occlusion. --- assets/shader/deferred/diffuse.frag | 3 +- assets/shader/deferred/post.frag | 109 ++++++++++++++++++++++++++-- js/main.js | 34 +++++++++ 3 files changed, 138 insertions(+), 8 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 11311aa..9762e30 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -17,8 +17,7 @@ float linearizeDepth( float exp_depth, float near, float far ){ void main() { - // Write a diffuse shader and a Blinn-Phong shader - // NOTE : You may need to add your own normals to fulfill the second's requirements + // DEBUG: Pass color through. //gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 176a135..0d0805d 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -1,23 +1,120 @@ precision highp float; +uniform sampler2D u_positionTex; +uniform sampler2D u_normalTex; +uniform sampler2D u_colorTex; +uniform sampler2D u_depthTex; + uniform sampler2D u_shadeTex; +uniform float u_zNear; +uniform float u_zFar; + varying vec2 v_texcoord; +// Number of direction vectors to walk for each pixel. +const int NUM_DIRECTIONS = 4; + +// Number of steps to take along each direction vector to determine horizon. +const int NUM_SAMPLES = 6; + +// Distance to move along a direction vector for each sample. +const float STEP_SIZE = 0.001; + +// Math constants. +const float PI = 3.1415926535; + float linearizeDepth( float exp_depth, float near, float far ){ return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } void main() { - // Currently acts as a pass filter that immmediately renders the shaded texture - // Fill in post-processing as necessary HERE - // NOTE : You may choose to use a key-controlled switch system to display one feature at a time - gl_FragColor = vec4(texture2D( u_shadeTex, v_texcoord).rgb, 1.0); + // DEBUG: Pass color through. + //gl_FragColor = vec4(texture2D( u_shadeTex, v_texcoord).rgb, 1.0); + + // Get fragment data. + vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; + float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; + float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); + + + /*********** IMAGE-SPACE HORIZON-BASED AMBIENT OCCLUSION ***********/ + // Implementation inspired by: http://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf + + // Define base angle from current fragment coordinates. + float base_angle_deg = v_texcoord.s * v_texcoord.t; + //float base_angle_deg = 0.0; + + // TODO: I might be computing the tangent vector incorrectly. + + // Define tangent vector to normal of current fragment. + // Second vector of cross product is view direction. + // Currently, view direction is assumed to point down the positive z-axis. + vec3 t_vec = cross( normal, vec3( 0.0, 0.0, 1.0 ) ); + vec2 t_dir = normalize( vec2( t_vec.x, t_vec.y ) ); + + float ao = 0.0; + + // Iterate through direction vectors emanating from current fragment. + for ( int i = 0; i < NUM_DIRECTIONS; ++i ) { + + // Compute current direction vector. + float angle_deg = base_angle_deg + ( float( i ) * ( 360.0 / float( NUM_DIRECTIONS ) ) ); + float angle_rad = angle_deg * ( PI / 180.0 ); + vec2 direction = normalize( vec2( cos( angle_rad ), sin( angle_rad ) ) ); - // TODO: Ambient occlusion. + float largest_depth_diff = 0.0; + + // Define horizon variables. + vec2 h_xy = v_texcoord; + float h_z = base_depth; + + // Define tangent variables. + vec2 t_xy = v_texcoord; + float t_z = base_depth; + + // Step along current direction vector. + for ( int step = 1; step <= NUM_SAMPLES; ++step ) { + + vec2 curr_pos = v_texcoord + ( float( step ) * direction ); + + // Compute depth at current step along direction vector. + float exp_depth = texture2D( u_depthTex, curr_pos ).r; + float depth = linearizeDepth( exp_depth, u_zNear, u_zFar ); + + // If difference in depth compared to depth of current fragment is the largest seen so far. + if ( abs( depth - base_depth ) > largest_depth_diff ) { + + // Update horizon variables. + largest_depth_diff = abs( depth - base_depth ); + h_xy = curr_pos; + h_z = depth; + + // Update tangent variables. + t_xy = v_texcoord + ( float( step ) * t_dir ); + exp_depth = texture2D( u_depthTex, t_xy ).r; + t_z = linearizeDepth( exp_depth, u_zNear, u_zFar ); + } + } + + float h_angle = atan( h_z / length( h_xy - v_texcoord ) ); + float t_angle = atan( t_z / length( t_xy - v_texcoord ) ); + ao += sin( h_angle ) - sin( t_angle ); + } + + vec3 ao_contribution = vec3( 1.0 - ao, 1.0 - ao, 1.0 - ao ); + + + /*********** TOON SHADER ***********/ // TODO: Toon shader. - // TODO: Bloom. + // DEBUG - Pass color through. + gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + + + /*********** BLOOM ***********/ + + // TODO: Bloom. } \ No newline at end of file diff --git a/js/main.js b/js/main.js index 28377a5..a7752e3 100644 --- a/js/main.js +++ b/js/main.js @@ -283,6 +283,30 @@ var renderPost = function () { gl.bindTexture( gl.TEXTURE_2D, fbo.texture(4) ); gl.uniform1i(postProg.uShadeSamplerLoc, 4 ); + // Danny was here. + gl.activeTexture( gl.TEXTURE0 ); //position + gl.bindTexture( gl.TEXTURE_2D, fbo.texture(0) ); + gl.uniform1i( postProg.uPosSamplerLoc, 0 ); + + // Danny was here. + gl.activeTexture( gl.TEXTURE1 ); //normal + gl.bindTexture( gl.TEXTURE_2D, fbo.texture(1) ); + gl.uniform1i( postProg.uNormalSamplerLoc, 1 ); + + // Danny was here. + gl.activeTexture( gl.TEXTURE2 ); //color + gl.bindTexture( gl.TEXTURE_2D, fbo.texture(2) ); + gl.uniform1i( postProg.uColorSamplerLoc, 2 ); + + // Danny was here. + gl.activeTexture( gl.TEXTURE3 ); //depth + gl.bindTexture( gl.TEXTURE_2D, fbo.depthTexture() ); + gl.uniform1i( postProg.uDepthSamplerLoc, 3 ); + + // Danny was here. + gl.uniform1f( postProg.uZNearLoc, zNear ); + gl.uniform1f( postProg.uZFarLoc, zFar ); + drawQuad(postProg); }; @@ -477,6 +501,16 @@ var initShaders = function () { postProg.aVertexTexcoordLoc = gl.getAttribLocation( postProg.ref(), "a_texcoord" ); postProg.uShadeSamplerLoc = gl.getUniformLocation( postProg.ref(), "u_shadeTex"); + + // Danny was here. + postProg.uPosSamplerLoc = gl.getUniformLocation( postProg.ref(), "u_positionTex"); + postProg.uNormalSamplerLoc = gl.getUniformLocation( postProg.ref(), "u_normalTex"); + postProg.uColorSamplerLoc = gl.getUniformLocation( postProg.ref(), "u_colorTex"); + postProg.uDepthSamplerLoc = gl.getUniformLocation( postProg.ref(), "u_depthTex"); + + // Danny was here. + postProg.uZNearLoc = gl.getUniformLocation( postProg.ref(), "u_zNear" ); + postProg.uZFarLoc = gl.getUniformLocation( postProg.ref(), "u_zFar" ); }); CIS565WEBGLCORE.registerAsyncObj(gl, postProg); }; From db25abf145f6faf3966788f12a3084b9bf866892 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Tue, 11 Nov 2014 21:56:48 -0500 Subject: [PATCH 04/11] Add simple toon shader. --- assets/shader/deferred/diffuse.frag | 1 + assets/shader/deferred/post.frag | 61 +++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 9762e30..778a967 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -27,6 +27,7 @@ void main() vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; vec3 color = texture2D( u_colorTex, v_texcoord ).rgb; + // Apply simple Lambertian shading. float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 0d0805d..f5bfc2b 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -24,6 +24,21 @@ const float STEP_SIZE = 0.001; // Math constants. const float PI = 3.1415926535; +// Light constants. +const vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); + +// Image dimensions. +const float WIDTH = 960.0; +const float HEIGHT = 540.0; + +// Pixel step sizes. +const float HORIZONTAL_STEP = 1.0 / WIDTH; +const float VERTICAL_STEP = 1.0 / HEIGHT; + +// Edge detection constants. +float EDGE_DETECTION_THRESHOLD = 0.6; +vec3 EDGE_COLOR = vec3( 0.0, 0.0, 0.0 ); + float linearizeDepth( float exp_depth, float near, float far ){ return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } @@ -34,6 +49,7 @@ void main() //gl_FragColor = vec4(texture2D( u_shadeTex, v_texcoord).rgb, 1.0); // Get fragment data. + vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); @@ -41,6 +57,7 @@ void main() /*********** IMAGE-SPACE HORIZON-BASED AMBIENT OCCLUSION ***********/ // Implementation inspired by: http://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf + // Also inspired by: http://artis.inrialpes.fr/Membres/Olivier.Hoel/ssao/nVidiaHSAO/2317-abstract.pdf // Define base angle from current fragment coordinates. float base_angle_deg = v_texcoord.s * v_texcoord.t; @@ -107,14 +124,50 @@ void main() /*********** TOON SHADER ***********/ + // Implementation inspired by: http://www.lighthouse3d.com/tutorials/glsl-tutorial/toon-shader-version-ii/ + + // Compute angle between fragment normal and light. + float intensity = dot( normalize( light_pos - position ), normalize( normal ) ); + + // Get normals of neighboring fragments. + vec3 neighbor_norm_1 = texture2D( u_normalTex, vec2( v_texcoord.s - HORIZONTAL_STEP, v_texcoord.t ) ).xyz; // Edge detection - Left. + vec3 neighbor_norm_2 = texture2D( u_normalTex, vec2( v_texcoord.s + HORIZONTAL_STEP, v_texcoord.t ) ).xyz; // Edge detection - Right. + vec3 neighbor_norm_3 = texture2D( u_normalTex, vec2( v_texcoord.s, v_texcoord.t - VERTICAL_STEP ) ).xyz; // Edge detection - Down. + vec3 neighbor_norm_4 = texture2D( u_normalTex, vec2( v_texcoord.s, v_texcoord.t + VERTICAL_STEP ) ).xyz; // Edge detection - Up. + + // Check for edges. + if ( dot( normal, neighbor_norm_1 ) < EDGE_DETECTION_THRESHOLD || + dot( normal, neighbor_norm_2 ) < EDGE_DETECTION_THRESHOLD || + dot( normal, neighbor_norm_3 ) < EDGE_DETECTION_THRESHOLD || + dot( normal, neighbor_norm_4 ) < EDGE_DETECTION_THRESHOLD ) + { + intensity = 0.0; + } + else { - // TODO: Toon shader. + // Put colors into "buckets" based on intensity of light. + if ( intensity > 0.95 ) { + intensity = 1.0; + } + else if ( intensity > 0.5 ) { + intensity = 0.95; + } + else if ( intensity > 0.25 ) { + intensity = 0.5; + } + else { + intensity = 0.25; + } + } - // DEBUG - Pass color through. - gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + // Set fragement color. + //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb * intensity, 1.0 ); /*********** BLOOM ***********/ - // TODO: Bloom. + // TODO: Bloom. + + // DEBUG - Pass color through. + gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); } \ No newline at end of file From 057be1a6fbe0f11a8bb96b2cf5c5a18ee9992018 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Wed, 12 Nov 2014 11:42:10 -0500 Subject: [PATCH 05/11] Small tweaks to toon shader. --- assets/shader/deferred/post.frag | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index f5bfc2b..31e17cf 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -51,6 +51,7 @@ void main() // Get fragment data. vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; + vec3 color = texture2D( u_colorTex, v_texcoord ).rgb; float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); @@ -123,12 +124,21 @@ void main() vec3 ao_contribution = vec3( 1.0 - ao, 1.0 - ao, 1.0 - ao ); + /*********** SCREEN-SPACE AMBIENT OCCLUSION ***********/ + // Implementation inspired by: http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html + + // TODO: Implement this. + + /*********** TOON SHADER ***********/ // Implementation inspired by: http://www.lighthouse3d.com/tutorials/glsl-tutorial/toon-shader-version-ii/ // Compute angle between fragment normal and light. float intensity = dot( normalize( light_pos - position ), normalize( normal ) ); + // Get passed-in color. + vec3 toon_color = color; + // Get normals of neighboring fragments. vec3 neighbor_norm_1 = texture2D( u_normalTex, vec2( v_texcoord.s - HORIZONTAL_STEP, v_texcoord.t ) ).xyz; // Edge detection - Left. vec3 neighbor_norm_2 = texture2D( u_normalTex, vec2( v_texcoord.s + HORIZONTAL_STEP, v_texcoord.t ) ).xyz; // Edge detection - Right. @@ -141,33 +151,40 @@ void main() dot( normal, neighbor_norm_3 ) < EDGE_DETECTION_THRESHOLD || dot( normal, neighbor_norm_4 ) < EDGE_DETECTION_THRESHOLD ) { - intensity = 0.0; + intensity = 1.0; + toon_color = EDGE_COLOR; } else { // Put colors into "buckets" based on intensity of light. if ( intensity > 0.95 ) { intensity = 1.0; + //toon_color = vec3( 1.0, 0.5, 0.5 ); } else if ( intensity > 0.5 ) { intensity = 0.95; + //toon_color = vec3( 0.6, 0.3, 0.3 ); } else if ( intensity > 0.25 ) { intensity = 0.5; + //toon_color = vec3( 0.4, 0.2, 0.2 ); } else { intensity = 0.25; + //toon_color = vec3( 0.2, 0.1, 0.1 ); } } // Set fragement color. - //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb * intensity, 1.0 ); + //gl_FragColor = vec4( toon_color * intensity, 1.0 ); /*********** BLOOM ***********/ // TODO: Bloom. + // TODO: Apply a fake glow on object edges to avoid having to import a glow texture. + // DEBUG - Pass color through. gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); } \ No newline at end of file From 976da3ffb0969c2a85d9e475210e46e5f16b5e8f Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Wed, 12 Nov 2014 20:10:17 -0500 Subject: [PATCH 06/11] Fix normals and add simple glow effect. --- assets/shader/deferred/diffuse.frag | 2 ++ assets/shader/deferred/post.frag | 41 ++++++++++++++++++++++++----- js/core/fbo-util.js | 2 ++ js/main.js | 7 ++--- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 778a967..0977f4c 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -36,4 +36,6 @@ void main() // TODO: Make light position and intensity uniforms. // TODO: Add material specularity as a uniform. + + //gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); } \ No newline at end of file diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 31e17cf..3348db0 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -23,6 +23,8 @@ const float STEP_SIZE = 0.001; // Math constants. const float PI = 3.1415926535; +const float EULER = 2.7182818284; +const float SIGMA = 0.8; // Light constants. const vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); @@ -36,13 +38,27 @@ const float HORIZONTAL_STEP = 1.0 / WIDTH; const float VERTICAL_STEP = 1.0 / HEIGHT; // Edge detection constants. -float EDGE_DETECTION_THRESHOLD = 0.6; -vec3 EDGE_COLOR = vec3( 0.0, 0.0, 0.0 ); +const float EDGE_DETECTION_THRESHOLD = 0.65; +const vec3 EDGE_COLOR = vec3( 0.0, 0.0, 0.0 ); -float linearizeDepth( float exp_depth, float near, float far ){ +// Blur constants. +const int CONVOLUTION_KERNEL_SIZE = 7; +const float GLOW_FACTOR = 0.5; +const int GLOW_WIDTH = 1; +const int GLOW_HEIGHT = 1; + +float linearizeDepth( float exp_depth, float near, float far ) +{ return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } +float computeGaussian( float x, float y ) +{ + float part_1 = 1.0 / ( 2.0 * PI * pow( SIGMA, 2.0 ) ); + float part_2 = -1.0 * ( ( x * x + y * y ) / ( 2.0 * pow( SIGMA, 2.0 ) ) ); + return part_1 * pow( EULER, part_2 ); +} + void main() { // DEBUG: Pass color through. @@ -181,10 +197,23 @@ void main() /*********** BLOOM ***********/ - // TODO: Bloom. + float accum = 0.0; + + // Check for edges. + if ( dot( normal, neighbor_norm_1 ) < EDGE_DETECTION_THRESHOLD || + dot( normal, neighbor_norm_2 ) < EDGE_DETECTION_THRESHOLD || + dot( normal, neighbor_norm_3 ) < EDGE_DETECTION_THRESHOLD || + dot( normal, neighbor_norm_4 ) < EDGE_DETECTION_THRESHOLD ) + { + for ( int x = -CONVOLUTION_KERNEL_SIZE / 2; x < CONVOLUTION_KERNEL_SIZE / 2; ++x ) { + for ( int y = -CONVOLUTION_KERNEL_SIZE / 2; y < CONVOLUTION_KERNEL_SIZE / 2; ++y ) { + accum += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; + } + } + } - // TODO: Apply a fake glow on object edges to avoid having to import a glow texture. + gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb + accum, 1.0 ); // DEBUG - Pass color through. - gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); } \ No newline at end of file diff --git a/js/core/fbo-util.js b/js/core/fbo-util.js index 42abe4c..03c6685 100644 --- a/js/core/fbo-util.js +++ b/js/core/fbo-util.js @@ -125,6 +125,7 @@ CIS565WEBGLCORE.createFBO = function(){ // Set up GBuffer Normal fbo[FBO_GBUFFER_NORMAL] = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbo[FBO_GBUFFER_NORMAL]); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, depthTex, 0); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textures[1], 0); FBOstatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER); @@ -138,6 +139,7 @@ CIS565WEBGLCORE.createFBO = function(){ // Set up GBuffer Color fbo[FBO_GBUFFER_COLOR] = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbo[FBO_GBUFFER_COLOR]); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, depthTex, 0); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, textures[2], 0); FBOstatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER); diff --git a/js/main.js b/js/main.js index a7752e3..40c0fd9 100644 --- a/js/main.js +++ b/js/main.js @@ -170,12 +170,12 @@ var renderMulti = function () { drawModel(posProg, 1); - gl.disable(gl.DEPTH_TEST); + // gl.disable(gl.DEPTH_TEST); fbo.unbind(gl); gl.useProgram(null); fbo.bind(gl, FBO_GBUFFER_NORMAL); - gl.clear(gl.COLOR_BUFFER_BIT); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.useProgram(normProg.ref()); @@ -193,7 +193,7 @@ var renderMulti = function () { fbo.unbind(gl); fbo.bind(gl, FBO_GBUFFER_COLOR); - gl.clear(gl.COLOR_BUFFER_BIT); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); gl.useProgram(colorProg.ref()); @@ -370,6 +370,7 @@ var initObjs = function () { objloader = CIS565WEBGLCORE.createOBJLoader(); // Load the OBJ from file + //objloader.loadFromFile(gl, "assets/models/crytek-sponza/sponza.obj", "assets/models/crytek-sponza/sponza.mtl"); objloader.loadFromFile(gl, "assets/models/suzanne.obj", null); // Add callback to upload the vertices once loaded From dae0624f813e272c29c4f03367ce6bfe1433c517 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Wed, 12 Nov 2014 21:09:38 -0500 Subject: [PATCH 07/11] Move ambient occlusion to diffuse.frag. --- assets/shader/deferred/diffuse.frag | 95 +++++++++++++++++++++++--- assets/shader/deferred/post.frag | 100 ++++++---------------------- 2 files changed, 106 insertions(+), 89 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 0977f4c..bb5f69a 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -11,6 +11,9 @@ uniform int u_displayType; varying vec2 v_texcoord; +const vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); +const float light_intensity = 1.0; + float linearizeDepth( float exp_depth, float near, float far ){ return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } @@ -20,22 +23,94 @@ void main() // DEBUG: Pass color through. //gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); - vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); - float light_intensity = 1.0; - vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; vec3 color = texture2D( u_colorTex, v_texcoord ).rgb; - // Apply simple Lambertian shading. - float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); - gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); + float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; + float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); - // TODO: Blinn-Phong. - // TODO: Make light position and intensity uniforms. + /*********** IMAGE-SPACE HORIZON-BASED AMBIENT OCCLUSION ***********/ + // Implementation inspired by: http://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf + // Also inspired by: http://artis.inrialpes.fr/Membres/Olivier.Hoel/ssao/nVidiaHSAO/2317-abstract.pdf +/* + // Define base angle from current fragment coordinates. + float base_angle_deg = v_texcoord.s * v_texcoord.t; + //float base_angle_deg = 0.0; - // TODO: Add material specularity as a uniform. + // TODO: I might be computing the tangent vector incorrectly. - //gl_FragColor = vec4(texture2D(u_colorTex, v_texcoord).rgb, 1.0); + // Define tangent vector to normal of current fragment. + // Second vector of cross product is view direction. + // Currently, view direction is assumed to point down the positive z-axis. + vec3 t_vec = cross( normal, vec3( 0.0, 0.0, 1.0 ) ); + vec2 t_dir = normalize( vec2( t_vec.x, t_vec.y ) ); + + float ao = 0.0; + + // Iterate through direction vectors emanating from current fragment. + for ( int i = 0; i < NUM_DIRECTIONS; ++i ) { + + // Compute current direction vector. + float angle_deg = base_angle_deg + ( float( i ) * ( 360.0 / float( NUM_DIRECTIONS ) ) ); + float angle_rad = angle_deg * ( PI / 180.0 ); + vec2 direction = normalize( vec2( cos( angle_rad ), sin( angle_rad ) ) ); + + float largest_depth_diff = 0.0; + + // Define horizon variables. + vec2 h_xy = v_texcoord; + float h_z = base_depth; + + // Define tangent variables. + vec2 t_xy = v_texcoord; + float t_z = base_depth; + + // Step along current direction vector. + for ( int step = 1; step <= NUM_SAMPLES; ++step ) { + + vec2 curr_pos = v_texcoord + ( float( step ) * direction ); + + // Compute depth at current step along direction vector. + float exp_depth = texture2D( u_depthTex, curr_pos ).r; + float depth = linearizeDepth( exp_depth, u_zNear, u_zFar ); + + // If difference in depth compared to depth of current fragment is the largest seen so far. + if ( abs( depth - base_depth ) > largest_depth_diff ) { + + // Update horizon variables. + largest_depth_diff = abs( depth - base_depth ); + h_xy = curr_pos; + h_z = depth; + + // Update tangent variables. + t_xy = v_texcoord + ( float( step ) * t_dir ); + exp_depth = texture2D( u_depthTex, t_xy ).r; + t_z = linearizeDepth( exp_depth, u_zNear, u_zFar ); + } + } + + float h_angle = atan( h_z / length( h_xy - v_texcoord ) ); + float t_angle = atan( t_z / length( t_xy - v_texcoord ) ); + ao += sin( h_angle ) - sin( t_angle ); + } + + vec3 ao_contribution = vec3( 1.0 - ao, 1.0 - ao, 1.0 - ao ); +*/ + + + /*********** SCREEN-SPACE AMBIENT OCCLUSION ***********/ + // Implementation inspired by: http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html + + // TODO: Implement this. + + // DEBUG - Pass color through. + //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + + + /*********** LAMBERTIAN SHADING ***********/ + + float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); + gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); } \ No newline at end of file diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 3348db0..840780b 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -43,7 +43,7 @@ const vec3 EDGE_COLOR = vec3( 0.0, 0.0, 0.0 ); // Blur constants. const int CONVOLUTION_KERNEL_SIZE = 7; -const float GLOW_FACTOR = 0.5; +const float GLOW_FACTOR = 1.0; const int GLOW_WIDTH = 1; const int GLOW_HEIGHT = 1; @@ -72,83 +72,9 @@ void main() float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); - /*********** IMAGE-SPACE HORIZON-BASED AMBIENT OCCLUSION ***********/ - // Implementation inspired by: http://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf - // Also inspired by: http://artis.inrialpes.fr/Membres/Olivier.Hoel/ssao/nVidiaHSAO/2317-abstract.pdf - - // Define base angle from current fragment coordinates. - float base_angle_deg = v_texcoord.s * v_texcoord.t; - //float base_angle_deg = 0.0; - - // TODO: I might be computing the tangent vector incorrectly. - - // Define tangent vector to normal of current fragment. - // Second vector of cross product is view direction. - // Currently, view direction is assumed to point down the positive z-axis. - vec3 t_vec = cross( normal, vec3( 0.0, 0.0, 1.0 ) ); - vec2 t_dir = normalize( vec2( t_vec.x, t_vec.y ) ); - - float ao = 0.0; - - // Iterate through direction vectors emanating from current fragment. - for ( int i = 0; i < NUM_DIRECTIONS; ++i ) { - - // Compute current direction vector. - float angle_deg = base_angle_deg + ( float( i ) * ( 360.0 / float( NUM_DIRECTIONS ) ) ); - float angle_rad = angle_deg * ( PI / 180.0 ); - vec2 direction = normalize( vec2( cos( angle_rad ), sin( angle_rad ) ) ); - - float largest_depth_diff = 0.0; - - // Define horizon variables. - vec2 h_xy = v_texcoord; - float h_z = base_depth; - - // Define tangent variables. - vec2 t_xy = v_texcoord; - float t_z = base_depth; - - // Step along current direction vector. - for ( int step = 1; step <= NUM_SAMPLES; ++step ) { - - vec2 curr_pos = v_texcoord + ( float( step ) * direction ); - - // Compute depth at current step along direction vector. - float exp_depth = texture2D( u_depthTex, curr_pos ).r; - float depth = linearizeDepth( exp_depth, u_zNear, u_zFar ); - - // If difference in depth compared to depth of current fragment is the largest seen so far. - if ( abs( depth - base_depth ) > largest_depth_diff ) { - - // Update horizon variables. - largest_depth_diff = abs( depth - base_depth ); - h_xy = curr_pos; - h_z = depth; - - // Update tangent variables. - t_xy = v_texcoord + ( float( step ) * t_dir ); - exp_depth = texture2D( u_depthTex, t_xy ).r; - t_z = linearizeDepth( exp_depth, u_zNear, u_zFar ); - } - } - - float h_angle = atan( h_z / length( h_xy - v_texcoord ) ); - float t_angle = atan( t_z / length( t_xy - v_texcoord ) ); - ao += sin( h_angle ) - sin( t_angle ); - } - - vec3 ao_contribution = vec3( 1.0 - ao, 1.0 - ao, 1.0 - ao ); - - - /*********** SCREEN-SPACE AMBIENT OCCLUSION ***********/ - // Implementation inspired by: http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html - - // TODO: Implement this. - - /*********** TOON SHADER ***********/ // Implementation inspired by: http://www.lighthouse3d.com/tutorials/glsl-tutorial/toon-shader-version-ii/ - +/* // Compute angle between fragment normal and light. float intensity = dot( normalize( light_pos - position ), normalize( normal ) ); @@ -192,11 +118,14 @@ void main() } // Set fragement color. - //gl_FragColor = vec4( toon_color * intensity, 1.0 ); + gl_FragColor = vec4( toon_color * intensity, 1.0 ); +*/ /*********** BLOOM ***********/ - + // Apply a "glow" to edge fragments by blurring. + // Implementation inspired by: http://http.developer.nvidia.com/GPUGems/gpugems_ch21.html +/* float accum = 0.0; // Check for edges. @@ -213,7 +142,20 @@ void main() } gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb + accum, 1.0 ); +*/ + + + /*********** BLUR ***********/ +/* + vec3 blur_color = vec3( 0.0, 0.0, 0.0 ); + for ( int x = -CONVOLUTION_KERNEL_SIZE / 2; x < CONVOLUTION_KERNEL_SIZE / 2; ++x ) { + for ( int y = -CONVOLUTION_KERNEL_SIZE / 2; y < CONVOLUTION_KERNEL_SIZE / 2; ++y ) { + blur_color += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; + } + } + gl_FragColor = vec4( blur_color, 1.0 ); +*/ // DEBUG - Pass color through. - //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); } \ No newline at end of file From daf01cea3db9b3a7d99b1ae8c4229782245bd709 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Thu, 13 Nov 2014 12:28:32 -0500 Subject: [PATCH 08/11] Add naive screen-space ambient occlusion implementation. --- assets/shader/deferred/diffuse.frag | 58 +++++++++++++++++++++++++++-- assets/shader/deferred/post.frag | 11 +----- js/main.js | 2 + 3 files changed, 58 insertions(+), 13 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index bb5f69a..030f1aa 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -9,11 +9,27 @@ uniform float u_zFar; uniform float u_zNear; uniform int u_displayType; +uniform mat4 u_projection; + varying vec2 v_texcoord; const vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); const float light_intensity = 1.0; +// Horizon-based AO constants. +const int NUM_DIRECTIONS = 4; // Number of direction vectors to walk for each pixel. +const int NUM_SAMPLES = 6; // Number of steps to take along each direction vector to determine horizon. +const float STEP_SIZE = 0.001; // Distance to move along a direction vector for each sample. + +// Screen-space AO constants. +const float AO_NUM_SAMPLES = 8.0; +const float AO_RADIUS = 0.005; + +// Math constants. +const float PI = 3.1415926535; + +const float DEPTH_THRESHOLD = 0.99; + float linearizeDepth( float exp_depth, float near, float far ){ return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); } @@ -27,6 +43,8 @@ void main() vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; vec3 color = texture2D( u_colorTex, v_texcoord ).rgb; + vec3 normal_screen_space = normalize( u_projection * vec4( normal, 0.0 ) ).xyz; + float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); @@ -97,16 +115,48 @@ void main() } vec3 ao_contribution = vec3( 1.0 - ao, 1.0 - ao, 1.0 - ao ); + gl_FragColor = vec4( ao_contribution, 1.0 ); */ /*********** SCREEN-SPACE AMBIENT OCCLUSION ***********/ - // Implementation inspired by: http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html + // Naive implementation inspired by: http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html +/* + float ao_total_samples = 0.0; + float ao_visible_samples = 0.0; + + vec3 fragment_point = vec3( v_texcoord, texture2D( u_depthTex, v_texcoord ).r ); + + // Generate random points on surface of sphere centered at origin. + for ( float theta = -PI / 2.0; theta < PI / 2.0; theta += PI / AO_NUM_SAMPLES ) { + for ( float phi = 0.0; phi < 2.0 * PI; phi += ( 2.0 * PI ) / AO_NUM_SAMPLES ) { - // TODO: Implement this. + // Convert spherical points to Cartesian points. + float x = AO_RADIUS * sin( phi ) * cos( theta ); + float y = AO_RADIUS * sin( phi ) * sin( theta ); + float z = AO_RADIUS * cos( phi ); - // DEBUG - Pass color through. - //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + vec3 spherical_point_dir = vec3( x, y, z ); + + // Skip point if it is not in the normal-aligned hemisphere. + if ( dot( spherical_point_dir, normal_screen_space ) >= 0.0 ) { + + // Get position and depth of point. + vec3 hemisphere_point = fragment_point + spherical_point_dir; + float gbuffer_depth = texture2D( u_depthTex, hemisphere_point.xy ).r; + + if ( hemisphere_point.z < gbuffer_depth && linearizeDepth( gbuffer_depth, u_zNear, u_zFar ) < DEPTH_THRESHOLD ) { + ao_visible_samples += 1.0; + } + + ao_total_samples += 1.0; + } + } + } + + // More visible samples means fragment is less occluded and more light reaches it. + gl_FragColor = vec4( vec3( ao_visible_samples / ao_total_samples ), 1.0 ); +*/ /*********** LAMBERTIAN SHADING ***********/ diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 840780b..3d32ad2 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -12,15 +12,6 @@ uniform float u_zFar; varying vec2 v_texcoord; -// Number of direction vectors to walk for each pixel. -const int NUM_DIRECTIONS = 4; - -// Number of steps to take along each direction vector to determine horizon. -const int NUM_SAMPLES = 6; - -// Distance to move along a direction vector for each sample. -const float STEP_SIZE = 0.001; - // Math constants. const float PI = 3.1415926535; const float EULER = 2.7182818284; @@ -119,6 +110,8 @@ void main() // Set fragement color. gl_FragColor = vec4( toon_color * intensity, 1.0 ); + + // TODO: Use linearizeDepth() to avoid processing fragments that represent empty space. */ diff --git a/js/main.js b/js/main.js index 40c0fd9..c66e7cf 100644 --- a/js/main.js +++ b/js/main.js @@ -491,6 +491,8 @@ var initShaders = function () { shadeProg.uZNearLoc = gl.getUniformLocation( shadeProg.ref(), "u_zNear" ); shadeProg.uZFarLoc = gl.getUniformLocation( shadeProg.ref(), "u_zFar" ); shadeProg.uDisplayTypeLoc = gl.getUniformLocation( shadeProg.ref(), "u_displayType" ); + + shadeProg.uPerspLoc = gl.getUniformLocation( shadeProg.ref(), "u_projection" ); }); CIS565WEBGLCORE.registerAsyncObj(gl, shadeProg); From 5b8b78aba8b1c3c4d86f604062c473e54afbe6ca Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Thu, 13 Nov 2014 15:44:48 -0500 Subject: [PATCH 09/11] Add Blinn-Phong shading. --- assets/shader/deferred/diffuse.frag | 28 +++++++++++++++++++++++---- assets/shader/deferred/post.frag | 30 +++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 030f1aa..73bb7bc 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -13,8 +13,13 @@ uniform mat4 u_projection; varying vec2 v_texcoord; -const vec3 light_pos = vec3( 10.0, 0.0, 10.0 ); -const float light_intensity = 1.0; +// Lighting constants. +const vec3 LIGHT_POS = vec3( 10.0, 0.0, 10.0 ); +const float LIGHT_INTENSITY = 1.0; +const vec3 LIGHT_COLOR = vec3( 1.0, 1.0, 1.0 ); +const vec3 AMBIENT_COLOR = vec3( 0.1, 0.0, 0.0 ); +const vec3 SPECULAR_COLOR = vec3( 1.0, 1.0, 1.0 ); +const float SPECULAR_EXPONENT = 32.0; // Horizon-based AO constants. const int NUM_DIRECTIONS = 4; // Number of direction vectors to walk for each pixel. @@ -161,6 +166,21 @@ void main() /*********** LAMBERTIAN SHADING ***********/ - float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); - gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); + vec3 light_dir = normalize( LIGHT_POS - position ); + float diffuse = max( dot( normal, light_dir ), 0.0 ); + float specular = 0.0; + + if ( diffuse > 0.0 ) { + + vec3 view_dir = normalize( -position ); + + vec3 half_dir = normalize( light_dir + view_dir ); + float spec_angle = max( dot( half_dir, normal ), 0.0); + specular = pow( spec_angle, SPECULAR_EXPONENT ); + } + + gl_FragColor = vec4( AMBIENT_COLOR + diffuse * color + specular * SPECULAR_COLOR, 1.0 ); + + //float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); + //gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); } \ No newline at end of file diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index 3d32ad2..d2be03a 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -34,9 +34,10 @@ const vec3 EDGE_COLOR = vec3( 0.0, 0.0, 0.0 ); // Blur constants. const int CONVOLUTION_KERNEL_SIZE = 7; -const float GLOW_FACTOR = 1.0; -const int GLOW_WIDTH = 1; -const int GLOW_HEIGHT = 1; +const float GLOW_FACTOR_BLOOM = 0.3; +const float GLOW_FACTOR_BLUR = 1.0; +const int GLOW_WIDTH = 5; +const int GLOW_HEIGHT = 5; float linearizeDepth( float exp_depth, float near, float far ) { @@ -119,7 +120,7 @@ void main() // Apply a "glow" to edge fragments by blurring. // Implementation inspired by: http://http.developer.nvidia.com/GPUGems/gpugems_ch21.html /* - float accum = 0.0; + float blur_summation = 0.0; // Check for edges. if ( dot( normal, neighbor_norm_1 ) < EDGE_DETECTION_THRESHOLD || @@ -129,12 +130,25 @@ void main() { for ( int x = -CONVOLUTION_KERNEL_SIZE / 2; x < CONVOLUTION_KERNEL_SIZE / 2; ++x ) { for ( int y = -CONVOLUTION_KERNEL_SIZE / 2; y < CONVOLUTION_KERNEL_SIZE / 2; ++y ) { - accum += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; + blur_summation += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; + } + } + } +*/ + +/* + float blur_summation = 0.0; + float intensity = dot( normalize( light_pos - position ), normalize( normal ) ); + + if ( intensity < 0.25 ) { + for ( int x = -CONVOLUTION_KERNEL_SIZE / 2; x < CONVOLUTION_KERNEL_SIZE / 2; ++x ) { + for ( int y = -CONVOLUTION_KERNEL_SIZE / 2; y < CONVOLUTION_KERNEL_SIZE / 2; ++y ) { + blur_summation += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR_BLOOM * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; } } } - gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb + accum, 1.0 ); + //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb + blur_summation, 1.0 ); */ @@ -143,10 +157,10 @@ void main() vec3 blur_color = vec3( 0.0, 0.0, 0.0 ); for ( int x = -CONVOLUTION_KERNEL_SIZE / 2; x < CONVOLUTION_KERNEL_SIZE / 2; ++x ) { for ( int y = -CONVOLUTION_KERNEL_SIZE / 2; y < CONVOLUTION_KERNEL_SIZE / 2; ++y ) { - blur_color += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; + blur_color += computeGaussian( abs( float( x ) ), abs( float( y ) ) ) * GLOW_FACTOR_BLUR * texture2D( u_shadeTex, vec2( v_texcoord.s + ( float( x ) * HORIZONTAL_STEP ), v_texcoord.t + ( float( y ) * VERTICAL_STEP ) ) ).rgb; } } - gl_FragColor = vec4( blur_color, 1.0 ); + gl_FragColor = vec4( blur_color + blur_summation, 1.0 ); */ // DEBUG - Pass color through. From 197b156274d364817ef9bc665804b9dcd011b170 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Fri, 14 Nov 2014 00:39:24 -0500 Subject: [PATCH 10/11] Add images. --- assets/shader/deferred/diffuse.frag | 36 +++++++++++-------- assets/shader/deferred/post.frag | 20 +++++++---- readme_images/monkey_ao.PNG | Bin 0 -> 22630 bytes readme_images/monkey_blinn_phong.PNG | Bin 0 -> 22576 bytes readme_images/monkey_blinn_phong_with_ao.PNG | Bin 0 -> 39013 bytes readme_images/monkey_bloom_01.PNG | Bin 0 -> 29282 bytes readme_images/monkey_bloom_02.PNG | Bin 0 -> 34533 bytes readme_images/monkey_bloom_03.PNG | Bin 0 -> 42774 bytes readme_images/monkey_gbuffer_colors.PNG | Bin 0 -> 2604 bytes readme_images/monkey_gbuffer_depths.PNG | Bin 0 -> 7379 bytes readme_images/monkey_gbuffer_normals.PNG | Bin 0 -> 17556 bytes readme_images/monkey_gbuffer_positions.PNG | Bin 0 -> 10690 bytes readme_images/monkey_lambertian.PNG | Bin 0 -> 16042 bytes readme_images/monkey_lambertian_with_ao.PNG | Bin 0 -> 29282 bytes readme_images/monkey_toon_01.PNG | Bin 0 -> 9943 bytes readme_images/monkey_toon_02.PNG | Bin 0 -> 9425 bytes 16 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 readme_images/monkey_ao.PNG create mode 100644 readme_images/monkey_blinn_phong.PNG create mode 100644 readme_images/monkey_blinn_phong_with_ao.PNG create mode 100644 readme_images/monkey_bloom_01.PNG create mode 100644 readme_images/monkey_bloom_02.PNG create mode 100644 readme_images/monkey_bloom_03.PNG create mode 100644 readme_images/monkey_gbuffer_colors.PNG create mode 100644 readme_images/monkey_gbuffer_depths.PNG create mode 100644 readme_images/monkey_gbuffer_normals.PNG create mode 100644 readme_images/monkey_gbuffer_positions.PNG create mode 100644 readme_images/monkey_lambertian.PNG create mode 100644 readme_images/monkey_lambertian_with_ao.PNG create mode 100644 readme_images/monkey_toon_01.PNG create mode 100644 readme_images/monkey_toon_02.PNG diff --git a/assets/shader/deferred/diffuse.frag b/assets/shader/deferred/diffuse.frag index 73bb7bc..7a37344 100644 --- a/assets/shader/deferred/diffuse.frag +++ b/assets/shader/deferred/diffuse.frag @@ -29,6 +29,7 @@ const float STEP_SIZE = 0.001; // Distance to move along a direction vector for // Screen-space AO constants. const float AO_NUM_SAMPLES = 8.0; const float AO_RADIUS = 0.005; +const float AO_BOOST_FACTOR = 2.0; // Math constants. const float PI = 3.1415926535; @@ -50,8 +51,13 @@ void main() vec3 normal_screen_space = normalize( u_projection * vec4( normal, 0.0 ) ).xyz; - float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; - float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); + float base_depth = texture2D( u_depthTex, v_texcoord ).r; + + // If fragment is part of the background, then just pass the color through. + if ( linearizeDepth( base_depth, u_zNear, u_zFar ) >= DEPTH_THRESHOLD ) { + gl_FragColor = vec4( texture2D( u_colorTex, v_texcoord ).rgb, 1.0 ); + return; + } /*********** IMAGE-SPACE HORIZON-BASED AMBIENT OCCLUSION ***********/ @@ -66,8 +72,7 @@ void main() // Define tangent vector to normal of current fragment. // Second vector of cross product is view direction. - // Currently, view direction is assumed to point down the positive z-axis. - vec3 t_vec = cross( normal, vec3( 0.0, 0.0, 1.0 ) ); + vec3 t_vec = cross( normal, -position ); vec2 t_dir = normalize( vec2( t_vec.x, t_vec.y ) ); float ao = 0.0; @@ -96,8 +101,7 @@ void main() vec2 curr_pos = v_texcoord + ( float( step ) * direction ); // Compute depth at current step along direction vector. - float exp_depth = texture2D( u_depthTex, curr_pos ).r; - float depth = linearizeDepth( exp_depth, u_zNear, u_zFar ); + float depth = texture2D( u_depthTex, curr_pos ).r; // If difference in depth compared to depth of current fragment is the largest seen so far. if ( abs( depth - base_depth ) > largest_depth_diff ) { @@ -109,8 +113,7 @@ void main() // Update tangent variables. t_xy = v_texcoord + ( float( step ) * t_dir ); - exp_depth = texture2D( u_depthTex, t_xy ).r; - t_z = linearizeDepth( exp_depth, u_zNear, u_zFar ); + t_z = texture2D( u_depthTex, t_xy ).r; } } @@ -126,7 +129,7 @@ void main() /*********** SCREEN-SPACE AMBIENT OCCLUSION ***********/ // Naive implementation inspired by: http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html -/* + float ao_total_samples = 0.0; float ao_visible_samples = 0.0; @@ -159,9 +162,10 @@ void main() } } + vec3 ao_contribution = vec3( ( ao_visible_samples / ao_total_samples ) * AO_BOOST_FACTOR ); + // More visible samples means fragment is less occluded and more light reaches it. - gl_FragColor = vec4( vec3( ao_visible_samples / ao_total_samples ), 1.0 ); -*/ + //gl_FragColor = vec4( vec3( ao_visible_samples / ao_total_samples ) * AO_BOOST_FACTOR, 1.0 ); /*********** LAMBERTIAN SHADING ***********/ @@ -179,8 +183,12 @@ void main() specular = pow( spec_angle, SPECULAR_EXPONENT ); } - gl_FragColor = vec4( AMBIENT_COLOR + diffuse * color + specular * SPECULAR_COLOR, 1.0 ); + vec3 blinn_phong_color = AMBIENT_COLOR + diffuse * color + specular * SPECULAR_COLOR; + gl_FragColor = vec4( blinn_phong_color * ao_contribution, 1.0 ); - //float diffuse = max( dot( normal, normalize( light_pos - position ) ), 0.0 ); - //gl_FragColor = vec4( diffuse * color * light_intensity, 1.0 ); +/* + float diffuse = max( dot( normal, normalize( LIGHT_POS - position ) ), 0.0 ); + vec3 lambertian_color = diffuse * color * LIGHT_INTENSITY; + gl_FragColor = vec4( lambertian_color * ao_contribution, 1.0 ); +*/ } \ No newline at end of file diff --git a/assets/shader/deferred/post.frag b/assets/shader/deferred/post.frag index d2be03a..b5adcd1 100644 --- a/assets/shader/deferred/post.frag +++ b/assets/shader/deferred/post.frag @@ -29,16 +29,18 @@ const float HORIZONTAL_STEP = 1.0 / WIDTH; const float VERTICAL_STEP = 1.0 / HEIGHT; // Edge detection constants. -const float EDGE_DETECTION_THRESHOLD = 0.65; +const float EDGE_DETECTION_THRESHOLD = 0.85; const vec3 EDGE_COLOR = vec3( 0.0, 0.0, 0.0 ); // Blur constants. const int CONVOLUTION_KERNEL_SIZE = 7; -const float GLOW_FACTOR_BLOOM = 0.3; +const float GLOW_FACTOR_BLOOM = 1.0; const float GLOW_FACTOR_BLUR = 1.0; const int GLOW_WIDTH = 5; const int GLOW_HEIGHT = 5; +const float DEPTH_THRESHOLD = 0.99; + float linearizeDepth( float exp_depth, float near, float far ) { return ( 2.0 * near ) / ( far + near - exp_depth * ( far - near ) ); @@ -60,8 +62,14 @@ void main() vec3 position = texture2D( u_positionTex, v_texcoord ).xyz; vec3 normal = texture2D( u_normalTex, v_texcoord ).xyz; vec3 color = texture2D( u_colorTex, v_texcoord ).rgb; - float base_exp_depth = texture2D( u_depthTex, v_texcoord ).r; - float base_depth = linearizeDepth( base_exp_depth, u_zNear, u_zFar ); + float depth = texture2D( u_depthTex, v_texcoord ).r; + vec3 shade = texture2D( u_shadeTex, v_texcoord ).rgb; + + // If fragment is part of the background, then just pass the color through. + if ( linearizeDepth( depth, u_zNear, u_zFar ) >= DEPTH_THRESHOLD ) { + gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb, 1.0 ); + return; + } /*********** TOON SHADER ***********/ @@ -111,8 +119,6 @@ void main() // Set fragement color. gl_FragColor = vec4( toon_color * intensity, 1.0 ); - - // TODO: Use linearizeDepth() to avoid processing fragments that represent empty space. */ @@ -148,7 +154,7 @@ void main() } } - //gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb + blur_summation, 1.0 ); + gl_FragColor = vec4( texture2D( u_shadeTex, v_texcoord ).rgb + blur_summation, 1.0 ); */ diff --git a/readme_images/monkey_ao.PNG b/readme_images/monkey_ao.PNG new file mode 100644 index 0000000000000000000000000000000000000000..40cdbbe89d8998c4fd2ce688f8ec7aceced79668 GIT binary patch literal 22630 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≪e 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
  • Q{l? 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 DOj3FM literal 0 HcmV?d00001 diff --git a/readme_images/monkey_blinn_phong_with_ao.PNG b/readme_images/monkey_blinn_phong_with_ao.PNG new file mode 100644 index 0000000000000000000000000000000000000000..3dbcce7d7a747783542dc727815ec53b35b07f96 GIT binary patch literal 39013 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%0AX5Dr?ltCnRgx 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 literal 0 HcmV?d00001 diff --git a/readme_images/monkey_bloom_02.PNG b/readme_images/monkey_bloom_02.PNG new file mode 100644 index 0000000000000000000000000000000000000000..acd71726792df638427ad759d24a381ae072f358 GIT binary patch literal 34533 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 XB$%(1X~Ac{ON1%Ps>+l|83q0qVn&`q literal 0 HcmV?d00001 diff --git a/readme_images/monkey_gbuffer_colors.PNG b/readme_images/monkey_gbuffer_colors.PNG new file mode 100644 index 0000000000000000000000000000000000000000..00f1a5263874f7048b4c9c6b45c2ede2fff0011b GIT binary patch literal 2604 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®niHDkMEO(e((xmq^=XYFnq;FM$d;gtMxMa>VMi~?OGDKIZLC_9>RW5 z8mpw_!*8Gp#?*X&GbqHXY;sl)}*+WC3=M?7II^g(j=v(a}f^$&x8x zb#l?iZ^GT{N=&T-KaROPZRy90f2t1W=q~BQzt&MmW!W_dfJFsZK$%*|nx$ZN{`eWD z)Y6e+hh6uy{+a>nXjN6!s2BuPBE6+`nEEp2WGnTtLl96&Z#f9OKSPY=kzPF^tp@0T z=ZkmKFwNGNmU+?L_6@eNTvDW|0URAW>79+ZBQ5|~9D#F`lvVrU3Wel-TZojJBfFvI z7u1(-N{`MCWeRuk?JGle-2GR(xrEE6T=wm~FK6G1mZKmHE!?zpE-;ve-N05VVyT}S zJXW416A7}Cu7?v63j(3vKYQZ78f>916{x%MtjCZo9Mv2Ob$30cvcl$tAtwImL}gTI z+my`CB0wGQOuvO98wkdquNnp#r~EdH_CUM9;r{agDBxkW836d$FHLyY-?G*EYqSH{-7IvT6kiN&u&_KkI26)20#H--auE~^HbyRXiZ}Exr%L8tm2)$ z{;}-e{t5US*q^9_-q6F^IsU#VMYmSgo(Y8n?k@!GLU}wiG<1MtY=e{|TRu$&@Bzm! z!I~PRqsIKT_txV8o+}8>F=LMX%!TH;tvErz_zB32{lXTV*4ewGDMY>cT!$}mHzB7; z5}r~7)qA0fIpvDjqin8SyW&5NGp>j`Xg_meKwAdM7$LTRM^mU<_|NdoM^s1K{(b)f zH#C(MF%N~sRq)1B$hUlX`oYk$ov#CYsDt?eP?`uTtx9fZ=Qpd0^HkGL%>2kyg!{Vv*<@z#V$UA`Hkkc;dpZtTE@ZSW`|Nof!MF8>r zjdak|&yoMlKH#6Z04o1Snt-AD|Lw1{Y$mS3KPtX|ziB6E8*uuRmC0LU*Sr4%4m?Xr literal 0 HcmV?d00001 diff --git a/readme_images/monkey_gbuffer_normals.PNG b/readme_images/monkey_gbuffer_normals.PNG new file mode 100644 index 0000000000000000000000000000000000000000..54c8723ab73b89854cc485515223f4478e55d86c GIT binary patch literal 17556 zcmc({cTiJZ)HfOsrHLf;9s*Gw1VOsA0HH>zprW84O{9x-2t}oYng9ZV6cwa*=~YQ6 zilTr5Ql&R3p@x1>@cCw*cfNV=e|K(X2w|U-eb!#E8Q=s+M414>83 z7z8@Q4+2r(XwCs6w=Ysj1HaB$>uPI&J_DaXW^=k{fnT(bb?$nAKo{`jABs-5d|P0U z+7qR(Nj*+~;Vi4-X4*Yq0)7xmL+z&T@XDCq%bVL7YeYkz_tMfu&XiM3NslPGl6rr8 z$3|X%8z`Q3mb#OZQyH1)*K}O< z^yCjX2^N;4{IF<_VxAZ?f`=ryDHPLT_jKi<$oF*q2_aR#1EL%TKmt!VoYqBL}hmyI}j zRQ)-vQ4-C0T$3PNzz7ZzKE3el3&OERO!@G4)bvE_lZiCT+Slut^Ek5zOn14u+-;sg zV&COzM1YDR0+bK4I7<(D@-WRB?e%T?X&KMevylySr{yOhxd`7i{ ztb_cGB;TTCTpB?eW#Y5<;LT;?WE_}&On>a1`cDBu&N8@KKeL0Go2;Vw-$*pZNu+h{ z&ej%IPQF{Qj6R_n_g2g94>mi(m^L^dFfu1q?{`Ev?8iHysq_`^aj%yt?ZikR9D5$~ zvelO^mjzPXN-DrCR$NBpYS5fgZ%VXE&_xsOS@H#|&2TdXv1gOw!aY97! ze!L%gNGrl>@uvt@*~D_viY8t&9QCzKFgd>720lpRu3Yo)T$`lzZc&7>p5l&ds-fn~ z&{Lpne^x#ks`A~!u8DLqfg6Cjt} z&N-GBZLRn4cxO%MPL_A4pGi!o;qB+}#jo7Z4h>@?M>IkfBDZUo(0iH;a(5X(Bq6lb%;nZDL=?6rg})i{Yk#RvU6q6y;J+1 z6a)9LVfxO1#r7RSWNa5ls!9dchR9&-e2c}-mU9N1>bQkAACY*t$6f!N^osayO_p30<+1(j|9vGMM&{9{*uB} zM`wh|7v+Z$EA+jLmtd2L*qMW;O%8rphBXX2LK>J;6!J%td}j!e1CtOTgkGN*zM)51 zcmWTYio-e@sxWC{m<5Ck;7HI1%C$3;pm5S1bRX6B4%@NT<^ah;-?tG~yWZtSzkg-% z>u(=MGQJ+}bcEKtO}1nxegF80K+aZfm|6$>CXo@=SaIM6`fo6q9ddV|8KAROh7Xz1d!-FBvudTIg!IRkpc8;1SZ4>X+6_~;&w#T;5=eD^yVm z@Z;khU8Kj_U88$K+s)h-5fI5b##K=j+hbHO*`Cb%-9nej!ze)kMd1Sj0~V|2Kmq1x zG@)AJ5jS6g=TCdX9p3%~QbTC-dAA|4wHn>>7VqBR)Yb<>63VMR3ykeeCAqVvYD6oQ zBaXyk{0|&SVx-vMTlVp)_%Y9P@F<_@OP)(8$L9HnLnF$e<@L*VKs&?h7-neFVy_^?i;+3C6+E!gi+4i-wlnCK zgTTobtyW19rqbx%>)(^voC;Yp>bqdQTTZ7teqW=j)?cT>?4zrRuS zb9eV0Z;xCa232HtcXjqoDcB0d7Sc?i_~y()3ek!VdpM03S3)A3E53hjZuCq$Qla$G z@nI31`SO0JmYxxR_a)M{_snwfl;GHw;CK-K4aGOw?b_*8F{5$>DD0ikl9dKcNKo{} zJD~lfR{4|c$SJ|&CnDS#g`IYH=SrS<@Qc!!Kb*xTg!Jzued>JZm79issUg-)=Wig} zR9v&E@|jVZ49O*B1ZC|erR>%QEu#tM$AFhCbNDB>q)Tk>0DEE4e0S_wq1)waopb5X z?C)S&S{neA6qFz@EBrx}kqDz~$c{wI6)1lQieZxUT*=JoCDWIV)O-ZE{| z1J(DjEWFiF$Ge~L;7Bz+P&GkMxf1R0^uv+*vmJV2$D^N6(j@iwJP8Vl@OSF-sp zj2uJ3uw`U!gN0-*2N;F^wB1~kd!eLp-hl7G9}cM#6`2ZSdKnH{SbiA-S}>i2utB${ znhaxKz?+Aa^)l20id*L2`;6y34E!gtTh2i384~t@=}Da?x-Rt+?3cbuGKxLJ#;0#3 z*4QKh?$Fih78{82Yp$zw=jsC=jXvO_B%7^tX@;XWEmG@RV<*HjHtpKYp%Kiyai)zC zNr<>8T+*`nkI}onBe^2bR{Ul){Dv`v|Aq;jdMFQ{AmW(-{BDToW{`hddqNKJO2F1m zPR|1AALTa+N|u$e@l6wB?*ug73e3D2%o*GK*^nV8K}B}x4<{!vbYLI!4=3N3l<>>Q z+oj^pJLfbpS^6)01qcsQUx*_wU^$`3po(a$-K3>=dqmDU=-2A2s69%8tVZGXPC_P_ zHX3Iga*YN;4nT8aF4UHT3TjC-blBH`(*g@2Mk%H+bn*FD_l7l3?AW2JeodOyfTt2v9?qI}R6Cn1cw>ZRfh%S?5Gi23OHa9LKsHW64&@Uzs+;-#^-^PlUPQZ5NF1rH;MwP zdJ=uc+4HxAHS{1G-<`sO&j^HqDU7gWADTb7P~JN-GL+XQc)fe4!#I>QE!eedP&cH2 z%yn{JoEDtdAM~JSj|hIQVl;Qy!~)ADEpUyq`g?EAWn6Ly3)oa}N571*oG^~Vt^8{G zJ{>nTJ(BPsZ(HS{L--0!r$4w!n)Cu$E*U}Q4-vhy6;4BN8U#}qEr z+S|5E6H-HT-k5+@kYrs9S;s*5KjrZm=CvGq%(Kag<)s^sKfu!Ake)hyDk*ZHTSKsb z#l|NytyK@BD>Pm;Z2C?SmpCbW?MF~}DW%{%qL$OLGhYSCx zhy2+>&s_iqW2id1xF(J-Vw2s>*S{t{0lkzQHG zB*0htUKHLxDPLcw#>gprnS`+LAA|2&jB1LzhWJd$8&teQhO{vHAyl2(z9D-3 zfBHJVWqr@!N6gUSGCJ1e05obSNmO3?Z5QMO7D(7iwh%|J|GM%^qf6N>zj{01u#Xa_ z=#8Yt6&3g!G~}(jr-9w4)DzCJ%QbD#L3}(l+B@~<*Rp-KZa(r&5BRE^kaO}#%?838Y0agNq3rJc zj{S_Va*plTHm86wOY~tnxIUjF*=Om_qUkG!q~4&;DL*S?6L|Yjh9c_Rxg0L z4KUYCz!A&>tHKyzM1q0p=raLZt0hwTtB`A>5M%%8kH)@T%=|TzlZ;@jS{Uum{4$da1UE)W)7W6VFi4c>Ip3v^%TOy zA~3<}o9%@r#Kyl~xEcl+-U~vAL$aM$TnlO)77G+SX5eg5pB7Ub<$Hvi z_H}Gf+2Y&FZiZ^T*h@+B$sacj+pQ-puMuRLU>>|h!R1@DaUo= zk>wi)`7w>v@*4?-z z=9uAGK@OyGP9Z~2BCe;?#OIVP$9MIgACN09>&}~R!Cg}t1;P-<;E=j(JPXv7yYvp* znp&M*=&_&Qp8i3LLP6cMmrkfHC%-|c=uI}oS0mJ2BvhEs9dT-m=TC^ucDA^4v{&TX z=pk&A-T!=dc{&GYmGb%_WgbjIT|;H>L5#V3Y`cR&ZJ@NsRJO|^_D>ldV5|U&?9tbz zG%(YG+#>EknGuZ=F13iWUse!NqTLAB%@xmi6sFt8)`g0^A#; zoC!uFJVHO@npn^P2h_C!X?tT&J{9;ItNw-5#jgr%SSo5n>gYj)>W6*cWg1RjU-vUE z>U(ts{yhpvxI@%1vv!xyh5UQ|+aEQR({}gau?Hw$^r+Nye_!TU=Jd(ISjIb=3R-O4 zr3TrTa`!5}a6l)y!|ul)gyzsPzMm9U*N7)tO+#Hd-#`PcUIls*W|hVbFr)W5uNZzK zRmI)i@BU3A9}LaN3-nrhv7Kb8_&baR!nE76`?Wkht3O55vcRPeOrdHVJ9-v`Jh?vk zDhSxxdvtw%5hLeHAMc(!-kZwWIU#BD1crFFnpmXrQWst4az~zD8qs2w4mv~$Eq~fp z$&bOkGaZ(K09zkYEz{B(qNUlHV4^a$hjx6{Op}|hd>ivJ7itCDhjo_I1s$M_=gZwHUKJ7vXcAo3Fo`dmt<`2G|uBt2X7Kl=rv zU#-~4kg(t24KZ~G&q#uB=T`8^R(4}W?|Z=p6-08DSJBT|MBUs_6wR-z@~;BLVu-}g zHy4k}!nL{*Z}K|+Q-??P<|m!0n*FZ4N9atmdG|as>aZp& z!>dRP{abS7`-4qduE1dWm{E4PKAPhac0i@I{hga3_C?$;E-u&~+y(yg%m8Fd{QYy1 zmxTxC4(_b<4Ha5q>vSuhP2mA+mdKQ$&X$O~mdIE%YZ^}Do@_NMw}N374C~Iy{Z-*3 zo6?qIl_~(=B$dzl8!(`*+7+G0?rJzpppA^%x9~D)Y6meM|(eQnT&e5IYDRQWBEQ%*m=xCNcDuE;wN3<J>z-q%3)roVfrMs<>Xk1GLA86o=(7CpiA2l&BYjxnNN>wOvL|5h7+KMNwRG zO&>jcO9S-?a;snV#xWMItUMPDQw2jE$bK}0VRy^sRvb4t`1{AFmby}B<$qeMuP8L% zu0D_wMQ&iQ4%#Q!uKt)G2aYVTkMlp`k~5yy+7R z9!D3f=qO)Xzk1#X3UNV)>Z@4%D1)P#m)3bs)Q;{KE_+8>46G=KZo4@9ByUtw%I?XQsRB7u%E*lv z#tDy-t4EJaty1r@CB~&lUBd=%1|o_{YwtQtEQ|8Cym+~JVC}o~lg(=6_~^2&%=V*y zT*_IRj4IRw18+iU50Bw)2ELA?v2vE78hiN9*^-esN6|+Ahl3dk{_C0rJvIfG9)e+u zLYJd`#!?TCW+QRZ#EOl77Qfq<81gl5eRj)Z@qlJ61gac=eLPz3y!K#z_j(sMJ0+l5 ze_UFr1}3anp_2ze>8}T-Gk>fh<{6%riXRpW=r|K1aV8#?g3v@OMW?9&F&87P?%_!JYM4^2pYcDR+gYxg82&Oa!m<{y5hCM&zmh1`7&iNKR+5RJi zn*}QF@b-d_i&E_?+2OWae%<%YS#plJou7OzUuH~K9T!uVlvJj~KYeykNeCG^@GBWG zOhO=Q9$|CT5`>X89S!)Vhg3OF-S;Og!(}9%)6lwiQ^N!K_dR`NbhBT1tryRGuHbnW z#S&>Kj0gq`A1waF=0%uih&k?0dUxFantHD`pSMry63AFvt`(%nOY8Snp8QW zrrb!%pA)fmAu3&ZUMW_Wo@svL+mW+HpIJ-Rtb9wBSFMwaCGWQlp9^Fsp(1-n`JFn` zMCPsWp|1-w)n17qH!S^=M3I$QK&rfJzFL83=PZF>LkSXA z<(Yyfuw3pz;o2#|$&8sv($4<(r~#uG(mdQ!66_QMsV!gZthGP8HUVLSF)AHU6fLt$ zpN*6P5a(k3$fhgYd4pz=VJ+?`t=g$|Zd7*b@B|j?(BO!1|C~R1-;u z8|KjNS9OpfNdHhMey-NofX8`R68Dc^WH4QLISyHQxr8Gc7 z)l9s41e{tp?-{u~tLaqTzvtkukVw+ugBAS=DvEi6!P}(xU%n7lGUHmb zc0%2K&>@CM(CF%y*++Suh&DMxq3v1CQ8e{M^3n(%4`lF8syEs2=g4fT#A*jCK9KLo z?fu#TB$Ty{{Ro{rb_WQ4ZX4&ixeCKBcPB#$J{98#+b757Ki`!s8QTzXVat@IBZHK# zx?JYgWAncZkOn4vYx0S!_HTi`{W^zBT>R^IcjnIlaRk|}_y`U?L}|2#x6@XL+qa)6 zND#f!3+Fdd(O*{n;c)~*i2{Tp_Mpv#Y@wZlM5q19UGGc16+gi|v7GH)b+4C)ev~W& z7xr{Z5858mRbITYZpRJ_P8)fnVn;%6YUxDreq%m#-p}KgC4SrxA=`D|d)yooaYLM5 zCLb&fu+1K!am^kYZI-tib*Z@l#Jithm$%F`eZQmz+$7ksCnttp!4JQ*R+ouJ>F^OD zEW96gO&Z8KnW~zc1}vV>d|n>XGV=(xEI$|8W!?Pnn%(<9DYYx!yi?099-$4-gZQ)~ z#M_@3s=Y*?defyZLM?!iDChn59DNeT8L4h-NPHZ{C*6TLF{+0&zn@xPQ>kyA^1K0I zdT4Vl_~N(ui~jW7TY_Hb(#d#D%%KTUAx>Am@cFdYls)j z%b3fEWq(L$xo?>z^Mx52(GYA30@4utkwjrxq`nERHr#gtv(~7eqR|mCQsDn#D#c7* ztLB{Oh}j#?4w`~n=uqvh!q9oPV0DCxuPsEtL4Z(o-bpvtD&?!qeGK+B!*NEG+%I4L z@vwv7xp0ng9uLnn)3{|Ovh{o`hqfvHdhFeq&2{kj*e&0_AvE)4Yvt`FP{|L90f@EK zS$A=Om-z1LVSQxN!BZu_573MCKC0qwAGGyV+IH5u6g1vi&t%;j{22+h*WOx=s;#Kv zbs=svnmev?l+5#pD!kvl2%*&qh$mKVG z5;*AB*g4JvrHjPY@pbJyJbP3OOt$eG{}(uE>(nTG;Iz2z;8C>0qW zxT-SXE%Qi|)m5!&UR56P@P{m7RK)|x)*D{H#4wQ2a&wH`;GVTtLxhZRzv93n|IV}z z{i6+Q_SWqY@6U^Tqlrv=rj!ri%4V0=61NSSaQ&e>oS$;96UceH2_xVRACs0Zda*Ok zEex4OEN|kI?MqB*2MWx0E$Ul5N4+M@A$5mKouvnkRTh1Zz8$?xVvmYgXTJf&TpQ8Y zmnUJ3K?9dPi-mcl`<99`s}6ZVWcB&&!aO1~Jmz*uAvhRA%7gygS1ek2A}WOB3KTEf zf9;0%h_U#tS~8$o(sNCTg$rgHxaMbx*7H!&$y{GhJb@*t+h&O5BtJ?MLY8`sd7Gf? z?3e|LqN#%)$K`iT|0Wq}5#uR#zgY+?O^tMJ_)r`KlNkYj^6-nyI3xApMKAwOF5Zb| zi!*XN$rs$G1;4ToSYRUef>U=ix~jbocw@d_KwW1Mn4E<0!DdNU*#QP|LaM%3_-Il{Aykro?Y(UW|1nlf=* zoy0M`RQ~}-r7aCxPKpHr?!gYIQoN(NTbngcqPE)|znBY_znxLKaEDh=>9QapHHfOS z^9y3nDG0aRFuqjJkOZ01Q*)jI3L?|WSVMaqUyb>^k&`P3d%()&{8}76lA1gGBNLV$ zlyjOBXpE2^*{`z1)So*9%Op+V<1ZndEfRc;+r#Z1hZe6Ng$+mIJjya2utEjT2g7`j zgvfZL?=|k4=YiCU#3}qyQA<$p7^88v5CTZX+-JG4!vl9{y4{Gh^#Y!(uR`}NRx0XS z(r403h#*42gH$%c0)3*XV^Zu9U3=2$OhMM9@9iaLjI)4Rv^!?@oIxL|t3dczl7|zv zyd$Ei^8y0nF6`BP|IB9QZC05m?|{LoEPAa9N6Mc7)6y}Tgo+aXOdCtro398oAgz8wH8Uwv203&sXIGT^XttJ5dbxBE?OY;A z_?8+v>b`=zJl-D$c7Kas>7hSA1W$V2H#;jxh>QjdcUk)*H6^Vny8#1 z^mQIDYTrRiA9yPV-fB1{e4lru1X=902u+K>Wb+$$qZSLG%M3c-_^ojb)hVCL+h7mJV0$p6@}?8B9|i#8r<~z%L?V`u5i!)<^aW4x`KvA+2$-@iJK$6Dt(II#PPy=@Kfz zyM*)Im}St{PuQ3#K|uqwj&b*eg7?aEoYH$p+Z-X}pRW(4PL1*~0HvIonTaeof+xb; z^~dMrKpRaRESItg&SYD)odu2xeR=*yg!iMDVpm*!$G!1S`_fSFIO<8==GK;(ib{Xp zPCKJ|bek{qHx)FS`EFcVLmj*5jfLu@tzTPMYpPv-r*dMr`14$>xa&IOfFf7!gju`J z1~~rQ_|-xd-h_KV(i!^s9|V)0$|#UU&)|N?Ve;WKc+mj80(cEoFiy;!PHe+5mJem>==AwW)4_h*CEcq z)bMMrjgzWwU4eeO?JR_5s%}~`GiBjNYno3|a=K;Q3U^I++Y;4fcbLwiu(wKWIr)x% zuXjYOjagf`d|%wJNM7{F%%)z>uue9Dim_miv4+B~4v4W(Il_>a`9WFsxxldY9 zUHa4F=VQSqEO7dsxW(KfwVVxU!enZcPD6Gb#la`>HRFDnM*3cfcRaj477wBrOdk8< zfplZM9`{cCjlTSxe()<2O*DguNx*hjQHpMYkcKzwTI>CWFU)X*7cYbagN4_mHvEZ4 z7A+D+XWZ6XnC{y7Qng1&Vz4ZqWk|A8ia4W@YSn+i}RhjWovm) zzv3z1;x8d;uJ7A^&T2Af&kU-Y#;1ndq|!;F#cWl~)2nO_e&ID&5Obz%+d9SU0Z2GJ z!aR+J)6MsyKyWC50gT!Yn}kJTPI@W4TcpBzUhlEf8ZA0p`<%`LAR`ICi>|vbU&jR6L zR|r2ZY!ar9hF9F|Yw#uZl6=B~J6FZ1bQb!Gl81n*A9lj-JUC0I|< zw6EOpTLHKurQ|GTDPWtq`V%R`jyHu%!X2G=TU$#!UkIsE3c{6CpS3+Fk(06c-C%hDI2VPl z0`=FvVr5q1BqR1UjXM&kIJZ&49WYd9F)CWu*V0#iL5^O3U+cF1bjua;#L_Pt{d9Su zNdSHeeMbWW*Y8d1>zoBG(nQ8dQ&_+M;dtK`U5CeWK;OXntj~kp(4;o?s2Ik!Gpan~ z6tuH*?dS*6oA)1$hjGF@uKvf~V^vD%X+=?lUgpV>%YJeIFB-{QT~(EZiRESE&RlcI z^>%C!QMf=Ci}f=JSat$ZIiz*Pla{#s=5dn%`Up_j^6S1g5Bx6>D{e;aZelQ49f*p_ zN#)^dYxGvbg%%P<6%E2f1HC;%&vIcsEE*ezNTpWq>-}JRN+uztLlbbPo8k8HWgwWB zWd^H^L}I?eH4;|id=op0@q#I|7;#B9QcHR#3p|k)V@{AJ9Dm($o)$!T7KxW51-kq5UL3ASjMkUl-Q-5vPSY^UyDWdF58yiHWN?_)%wXEg>3giUzXG(Vz;3_;MOrI$TqVxg8rn zMRyS!Rk~6U%_kXEq+pJsCfc_A%V&0=HodNmaY0KXHp7scD&7_FMVo1FFqB*iJ`x8y z6M!lgzrl+-`KM1-^~*TP?IS>eO&>$0i4j&UtS-}DqM`j&Yopdx`z{tYIxQ%TY+xpI z_MI>L(ExNxX=9lA4Ib3VS3rR77FnX2FF7XPst0<)bZ&-(YJD;nI+r=O)#1{BwtkpR z!S2u(Z*U($l-OR#x#wDR!1~_V=T6zOX$C&6l)z#e8b>w9O>pPVE=U zawlsG?-iGlK8O=9n}Qs}05pB6S0_jVcA$6Zd$gRZzUQ$T#S{POn!e63Va!%QVBzK3 zU$l^27ND;GLlR+as3tmX^K|xCdn~TdP-XNwWGXY{e4(-Lwc}<|=w)i1?<}^TldYnU8J6*;1|~e66rn4411e(cuK*UGn?ACdF+`lPBhIIM*;P(2zW-|KBLz! zK@a$qn|a6D?S3(zeI1geSbx3d~EZste)*|t{Hl#Gh)(S6ilReeI4k7=t^Q1IHuvea$tv0y8)E+6cK#&PR4H7|C0}Aa0;H0WNwS5J8A1vGq=%p^Un1Nsf9|)7IX4!9?*IO=SH<=d+iCA1@&t z8xNNp2Zgk6E+U`f@wUHtPu}xDE35?tR57P>HN%j7R9&(w8)(Gt7PDy0c#|ThWz9m< zJz&OV8y`&FEs^U2XW$AP&6u@TU`@~nrg9fhe_9w6oOC_+`m<%qZf9Bp}DjlmsX%N+Yamm}Nf0Cv;SDUxp!IjXBJ4XHP@_%#5Y1 z%0H-K$$hoO<}(M*XcAtKHn{lwuQBr|Mr(2a2BHD@#F_5H2Q$Vn&hu6UG+F9_1yPiQ z$P1l5KmS3c$?ZQ)7szSBp8@UM{sT0Q(mIQ{hBN@{)tb-v*#cW7(ah36uj-F~{hLN+ zzdA+`o<#!eI3U!J2KxA70gca2cW-B3&gB=IhTbvWC#`hW=nQ7qd6iNJtx(+e?aS|* z&yHh6lt>+Q@l8^Iw&Q?4KHT$N$@2-)z*b)6b9Y%(JTYb6^flMOs2Iwuxz60tzvwW` zNj&MM#WSy&K{t^=2d7=C`@Uu-lZhF4bs(co95iFJv0U;jAC?EGm8)Sfw2oOy86U>+(^zh!p8HF5a3{ zdkiA;=}1=RxW*+6zG%6fGz5g4u=s;O4$`#E_SEXoJn?<|*sL(nVGHTUc|sE4h*EK_ zPS4DjAfq#)A1On)>fX9U4=j5fX`M{U2ffd%+&?Y{OSDG>&<zKjTMW=3Rpke?Y@i=qUrVw*HD7I^GDJ|Uus$H-K$J`c_&B(? zx4_&}?#sxm#Kkb8`qYBs2Y8_V7U~!Fqv56@(q}bv`dteGULPfGiFPWqfw^6+CSg-& z$WAeY8Drnl*!0`QliPYxVGcSs9szxN1ebn0z|Z9PL2D1WhyD=z*bNzI z8UNC#I!ErC$rwQ}`TFl3L!<4ha~k5_(fkTdYS^)4<%P1%)tC0S?IOq5%co?+!>EZA zWb5%^7>MMQzA`Gu3Trs$@#hArwBU!hs5Hwc##0c{Jbu3> zzP%}};>jg|QfVMH-k#@`Jt`+3Q6OZZL+^DcjeOFZaZ#@2fZ73VM1U572pC-c#k)bd z0J@-OxV>-bsZ0^H4-)JgEi3hGQvSpz|LIlJO7+O7Qme_*a|0Xm0pX|wHpJ*%3}pUD^%><%oCqL@1-vh(1t?!VEM@+R zHs-x$7jleauNjbmWfXXX_uGizB~BnzGS7C%q><3q6v);9n9mH`>BsH?7JEwqu!XPV z_Jm*wRYr2>3{-d$*MiLrdE~Scs{TwyCgi;1Dh>2(hA(zD^et^XZ?n<=y_i+2Fd?&V zLCh}GaTG^ib5ft25L%18fKx2RomX69hMuDT2?i%@4=tEn_6`r45YIZcZFkp|xtCCd zEoF?wl}7?CF+-s`Fhq;-VR7>YRp;TQ!!NsT$w3D^fJg&bfUacKj7Is7;oB(|2Q8Ug zQtzioob3$9U-zTt9%04A^#wjpLRg`)1CP=MNImwkEqOA-%zRLrhu6yjRd!|}|I#2i z`$v%e)!KoacIHljgp>%u`Ymg~Mh!FBH zAwuT|%RA*?1iW=UC+M{sS^Kx7EGtJN4*-&7fRgh~)3cd#SCyUWrI&wUNOhMj(C{G$ zFX+46RRC0ow${VXS5{dFys*AN14ATc)!{c9yRUCcTA1yV_kt()5Xigrx?><)!H{#mPT*;C9sW$(~(Vv>KNCd)@<3I z`v)t+fjrV@CC+LCJH@#gXn`6RHwTb%CYGLK2o~GVIbOD-V>;QwKZZWC%;W}rPgyru z0DY%MySE7^g!YHvwDK&Vz>3ZYyELo4Y1@m+g z%qIL_2+@MJAOI>sPlJrlNBxe}iHX#{r=I5f_mtkvS5imi)qy%DZ-s$i{+fh90S9kz z*SuC|47P?g@9NppPI@B|KOmIRIydV#n+jOe){X<9GnqG9>ZtCp%+z%LI>W-P!H~-< z2##sl>h^RNiqo}*-fGV%b#eY?lkl4kdrtt~;}z#_d3u~gHB|iJI{VQ|po6^0xxpl$ znhZGp5Uy@fHLxaN+qRRWdB zez~T<}LMFHE9Mz&mt?1FENXDyzT83zs5Sw(!kRol!ad zs?2BbJGbqW&qe|VRVK8$cTa#$2(l4;ZJ+@Z|4eJ5V!%59m?^11Mgf+^la_zJ{c65a zySe(A*pv;hCuCnLq!9#KQtw~8#CHM+sQ~=a4Z0r3BbfTb}Zlg`Oqzn&0Ng zgOjbh>{LWQMymrhyL&f`oBq7>7?o5^>(g0}`z zreyS{ZLDD|u;L#_jEd-YCfNUkTp)h|cmWs7*%!IH%m1Yd1mOZY1j!dad{a5=R~IfG zVZLYF^sir>iAwoh!fO%5e#&l4iP!#;fmiim6p*kdLl9R|CH~PoOEEjI$-s+LNjN2Q zX)R@KIqXc~pY16Mkdf3GVEWhl=NwbKoyvuf{<&Kj%M*DPM}-2{yotd1Mqn1BSPsry z<^AgLJOk`_pM5j!H#>~~Pm6W{QDkaU$mtJ>%4)l+D)}S3oqW@~J>vc*8Kzo;?Y}6- zE-SnYIz^*~&VoZa$KtJ8|AVp8fM(&=R-uk6Ae|KA|AB0*BBb;4roe;p!)DaA@K0U~ z5;FU0AtHAS4* z`%OtWmf}=44Y+xhoDncoL^_uaHpPHlEbT77Kz^Xx5H%HOzhV_rR`&fGZ?OTx&mCjT zi`E*;sD*Xz!skB(cJ@G^QyLO}0y798MlE{t`>bM0#oKk73NQh~?#($jO4YAiJpxuu z0GPWUzZyCrr+MH1{&P4gxL4-gG2Zcr{t;;pskz3jHo=`^khCwra!jAf61(f=e~NvWym@t6s& zoS!o%e9B(7cQPZ$GyevDh>;4k<4E4icy&Fr#MK@6*}ma{CMZD%ng9K+WTL&V-Y3ss zh8+OjfS|wI1If+mm%eojk_JjkE_CGFHCf3We?@5T4W1NE82l`3e}6seRWAQ?q&j}9 zdc$wD**7_8cckFmH$_qz_37P#{;20aOTH$^&IhRR7AZrlp}>&?V+^)}x5%RcSWkC)E;TL zPxy@ZN}eh!hMVtw)jh^#%uDV$*&D{`X6Z-iTO)$+;(qp(?JvTVWp54L+1~q4r z&uz3S9>{OAd@H)q%-J5kJ5C=5L7twoQ+?!_!_Iawc0(+c%M=1j_))#Wgf2OT-=N>a|w<)Si#Auh28uVm%0 zwwT0-XzQF)jK!|pxnB~$&IG6hE&2ZfL^1AesV591i#6UT?6|O_rLP1bTdt61{F>R? zPd+b4tU?hR-z6c3FqlRkaE=q`eXkhs^fP8v&oMF1Gc#YCjie!)l|O+~pB^DgRmpyxG-9B#D{kk%DUei@pXJ^?~r-dCz%p{4Z))fvy2|rw)NBS zylK5p0jh2Xl;23O)v0-q1Jq+&>_Vt!$ zoo0`cnB!dQ@wN%G%Dp!3X@N?=?3j6h`1=Pta8lwsH7QS^TWZ*9gqL>%j!*tf;~v)W z8MnFBp$)U2>eK@lF(OAD{d2v z64rW~3*^^N#_R%xOG<)gKmBzs(f_z336qQopB!U&d1N7dFBA~Zp5+MfU$bT9Bb+<6 zI+ryfRW#rZujpFGeH?S(1*ZLy(YRc_>FGUV1nY^DWcow)iqkmf_4qRaIfm9t=a;C6 ze6h{-?$YwQFJi{Y9Df{8NW=K-uUcmKSFD^F$YY>Sc&&36%E|8j9A8wut;weWTF5(% zp(7CB3W~K0FCJQQXq-ho_wseVc=fN%wRk-Q5F<--{?u@Hi5kVtiBW>!Kf3OdJrvnJ zg2ivNA&U-$N(d;Z4=U`T-1Ul;iIp8t*j)(3d~ZzJSzbI0)`HucR`9s(;!F(L+>D6q$|=zn)ISbl_Dh|C4eFz zp(CM40s;x0yW#&n&xiNk=i9ya{g7mLa(2#dW`1XO&hEq+>TA$YvQdISAQ~-ARU;7S z5*G+WluUjZkeKq5+y#CvKhe=p1$_gKKo+Yyq`(h_hvq{#2t?aW_z)r7KiC06GA}JX zHL^J>TGA_AM&o_LAP^TwOI7)S->%s{$B#2uwZ9N8nUNghrg1WoDkafwk) zVTr|}Hg^;xtnD$nlY=pjg5CGmKek~XmY27NDwcV*R#fQcmRn(y%KOhIQyRxUjX>uk^FxV|J&w^gMUx?|6H6naS4b-^vR@+ z>k}qVY$}hDs;W26XFt$M>Y5sV%T|KW9`xO!|kA-M%=1Vj~A{~ z9=G_oN{NwSrw$`Fd9I{MbdL{O3o^z1vTW92+F$ z-_<=9yv!i{bnY&TW&UMiK z-E+2tieg9f`=`*8*7B(4x3XhF4Yd6zO#iaZ3HGW3R8!|vI*I`Ryb$4cI)9x4+)5g} zL4M5yU*8DJS3D?BSx8x>`y!HeslF#CIh(12!EvEZ|D1!8Tai1G;ARcXtI$S>qA%?D zFijeHIce#ZrpX+C^ZDz+p~Gi38GXb(KOo$VS18$F;SSQVZRO`VoB7Ntpf^7G86aC$ z_p@GsB|aWkG0*2>QF6gB!4$7gLPjHKS%j{jLz0Bg`CR6D)pE{pP?~3U>T!;0m+nCd zJP+PBi|u`N29xfXI_SC#FftK2d8+dL5w&74%zn(uA~~NqIN{}^NO!^2} zcu2}k0#NoIkNfFi;398B{7NY}sg)z{)9DeWqt_}q0tsWeP3%T>EG9Etnzf38ppJ#fgD;7FQ%xAOqgddRU0iN0k_{0-hH5S>uB`9^NFY6>ad zkTWx%fT11GQr-Rd&t;(b0|`BBHu5A%(d9CU3D z-#!Z4TXhDLQsj*U4Luh03Zobw$hGQ&1wu{_$^@6@>T8?N`wm~*#hAWv#df7!Zuh}2 z4|j&6Ehj_T$|hZp@`grVir;^Ih^>k}C~sppq@!*_weQ{%f}* z`E>5?nDuX`B6Iy4K{o^6j;HP_yrI5}5N8d>&u7n~XHU}UiMhf+m224{?;)+M3nMv6 z?bUs@p4mL*5yTL^-1E9Gm_vg16PeleVj0imv6K-~K`2 zSd*~Nbm6ty2*tDI;pvFrz(Z73+-&TpUH4-nHq8>|4G!6|(uNq@;q{QBIQ)8mYw6|e zM`IA?%0tf!VwjKS2f2TLSR3l*8=}-FyRr4o=r!|5u^QY)<1yd0qG0N-UtdDvMi7iO zW*CpkN3+O6|C$Tvq6-G6=J3YNx|!1hRA)QOi`Kl-GaX6OyL8Oc!XG^p5BL0(G>cnH z3}|@r^XQATU#PP+Cu}9=%}_w%o`vX=69N3S_d_H}<&v&DXqdKc+_0?p>bqN!!y{V? zLUKqo7>AWMLu<8HBZh)+IeRNVM@Rl~dvH*wLf(1pI1IFRZ*~)g|2v(OAL99F+3lPI zwORPhzji14Q{%f2Mw@OX2pU-&3FJ^$b-z9VVZe*FpvhUA@-|RMhY00@OB0q$6Rx@s z3H-&Amo1HKnAgPa9!G-2HOWZcb>|Z#q3t=n5}nv%acPV#1oqGY%o zpSksndK4GSf_ag?b^873i33%;$f`qz3ktkbI_<9V2WQ73Q5#b;h5PP-aWiwBDfijU z_({FzJug#kq#^rGC{~SY&Rxo|iJ>PL~ z!}-buT+$fnK}W<*Or*OhZMGS$uSW6@uHO3c2a|KF-@b2C!5h;*d{0sMRQ`eq;tMnL zvpKUx?o2yn+2~eIwCQJ&wg-^3?;4cL<)65~8{*W|#oGLj3%$%u*ZoWHoviHUaD4Z@ zHQX9SA10MHO2o5-?5K!KOA93ZBj~Q?V!`y@KrlByWbP1Kw(%!M7_Vy7wFMW9!|Q6# z%ds+uWqP32LaPfWLlwRW<~G(;+!=BFgVMH{K@F@YxhsY|MdhZ?wN=C&<^K#B0DbmS z3cG=A4f)V49ka~0#FT`X<~H4G26I4b<8izFtQN0#6VJx6ID>VU1aEnq~FaOwxruG)agjBILZ*|HZ z=Hds|856u!jCxkfn!b|?Zv{~2y3FtAV{$`H+(h z*?eimDb-V?mkLn!ENBOy>F(BPF=VI3K9X+iDirkkb2;@czbG?vlLIDSU`{}-$myM} zTWFAxdAh+g8Q;>#OG`$j@*(lm-2=xiaNb=;xnGmBQ)kEJv8%_~u_Eu!&=KUos<&jF zKOYg0nt6Y`I*e)NfLSGvb*3=r$FD{wFn>o&@#~Tj*+~SQ+})cpQKlE7;DU4&icsr2 z_tS7sNX52ojFb+`W`79PBPSxE57WVlg z3e2;S8a*#1;_>5JYppiNPwcnXsO}Y8CD-j{G2jBgf`SRC*w(Zk*;v>2XBjFN=(I!E z12NRiEp@qQPd5dP3NHPz+j~y$K6e}+rWcqRcdP5um-)2IJrK$t68(yxJkxs&5~ksF zrfdC1Bizi9vUQTY+S&-MKWpG3Ce$N+HfJNU&}z4kHWu-g)c{q5Q7eS#aivs^I_43h zrM5sqWBl?g#ZD{Oy`7#x%;H@vmXg?J17f{i-wN&Sz(FYF@sc0zL<|ha`l+ez=IZ@8 zSHG~F3M)T9*7Iu1qe22&X`#$V!_q%-aPn&GkVBZ){8Nn%6I5r?ng>$x#Py2Ew^q{+ zA{+s)ndG#iBex2#r&2~}d{WV584J>2+V5aeA=CjXM=9>}w9PHvA=Vl;Yik^C4IVo( zrD>^>L|-;PL!!3ryU?h-6$Rhv+4fC3$esv3FnxxhnPu#xc`LaxR4f)mOx_u_Gug4F zKe@~|LTk2>WjiNHR@5|epT!3nO+3&!#{(I};;!_t67dD!=CN+FC9+ZLk+}4j*I|0L zZlNwIZVmoIPfNp2R=4)>v%tnVS0q8@*m1SH%hFDgudm!lR3a(mmQ%s9?yV4bjRA*n ziPxPYW@s8RMxk208fis)kE4t3cY0z!f;Y?E<^5UyMLgN7uxHVM$AO<@uM4*b=J{TZ zk3b5}cG&&(a=V{t(!(mrnZlMF<$V%_^Uc*Ww%VZ2-}i=e-9U(EV6vt-61luj^C@aI-Z3WVI?Cc zT5M&G906m8XS9f7NJEIuH_7ec1{YUT%jAl$fzTwv� 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 literal 0 HcmV?d00001 diff --git a/readme_images/monkey_lambertian_with_ao.PNG b/readme_images/monkey_lambertian_with_ao.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7f37820c67763bcf6b582378d6c8eb117c80c04e GIT binary patch literal 29282 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%0AJpV1ya?bgl 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�L*_w{XY%BItIZ1 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 literal 0 HcmV?d00001 From 516ef99268d9c057d189cc2638a2b0a8362b7b16 Mon Sep 17 00:00:00 2001 From: Danny Rerucha Date: Fri, 14 Nov 2014 01:24:51 -0500 Subject: [PATCH 11/11] Update README. --- README.md | 286 ++++++++++++------------------------------------------ 1 file changed, 62 insertions(+), 224 deletions(-) diff --git a/README.md b/README.md index da4c7e1..0627492 100644 --- a/README.md +++ b/README.md @@ -1,224 +1,62 @@ ------------------------------------------------------------------------------- -CIS565: Project 6 -- Deferred Shader -------------------------------------------------------------------------------- -Fall 2014 -------------------------------------------------------------------------------- -Due Wed, 11/12/2014 at Noon -------------------------------------------------------------------------------- - -------------------------------------------------------------------------------- -NOTE: -------------------------------------------------------------------------------- -This project requires any graphics card with support for a modern OpenGL -pipeline. Any AMD, NVIDIA, or Intel card from the past few years should work -fine, and every machine in the SIG Lab and Moore 100 is capable of running -this project. - -This project also requires a WebGL capable browser. The project is known to -have issues with Chrome on windows, but Firefox seems to run it fine. - -------------------------------------------------------------------------------- -INTRODUCTION: -------------------------------------------------------------------------------- - -In this project, you will get introduced to the basics of deferred shading. You will write GLSL and OpenGL code to perform various tasks in a deferred lighting pipeline such as creating and writing to a G-Buffer. - -------------------------------------------------------------------------------- -CONTENTS: -------------------------------------------------------------------------------- -The Project5 root directory contains the following subdirectories: - -* js/ contains the javascript files, including external libraries, necessary. -* assets/ contains the textures that will be used in the second half of the - assignment. -* resources/ contains the screenshots found in this readme file. - - This Readme file edited as described above in the README section. - -------------------------------------------------------------------------------- -OVERVIEW: -------------------------------------------------------------------------------- -The deferred shader you will write will have the following stages: - -Stage 1 renders the scene geometry to the G-Buffer -* pass.vert -* pass.frag - -Stage 2 renders the lighting passes and accumulates to the P-Buffer -* quad.vert -* diffuse.frag -* diagnostic.frag - -Stage 3 renders the post processing -* post.vert -* post.frag - -The keyboard controls are as follows: -WASDRF - Movement (along w the arrow keys) -* W - Zoom in -* S - Zoom out -* A - Left -* D - Right -* R - Up -* F - Down -* ^ - Up -* v - Down -* < - Left -* > - Right -* 1 - World Space Position -* 2 - Normals -* 3 - Color -* 4 - Depth -* 0 - Full deferred pipeline - -There are also mouse controls for camera rotation. - -------------------------------------------------------------------------------- -REQUIREMENTS: -------------------------------------------------------------------------------- - -In this project, you are given code for: -* Loading .obj file -* Deferred shading pipeline -* GBuffer pass - -You are required to implement: -* Either of the following effects - * Bloom - * "Toon" Shading (with basic silhouetting) -* Screen Space Ambient Occlusion -* Diffuse and Blinn-Phong shading - -**NOTE**: Implementing separable convolution will require another link in your pipeline and will count as an extra feature if you do performance analysis with a standard one-pass 2D convolution. The overhead of rendering and reading from a texture _may_ offset the extra computations for smaller 2D kernels. - -You must implement two of the following extras: -* The effect you did not choose above -* Compare performance to a normal forward renderer with - * No optimizations - * Coarse sort geometry front-to-back for early-z - * Z-prepass for early-z -* Optimize g-buffer format, e.g., pack things together, quantize, reconstruct z from normal x and y (because it is normalized), etc. - * Must be accompanied with a performance analysis to count -* Additional lighting and pre/post processing effects! (email first please, if they are good you may add multiple). - -------------------------------------------------------------------------------- -RUNNING THE CODE: -------------------------------------------------------------------------------- - -Since the code attempts to access files that are local to your computer, you -will either need to: - -* Run your browser under modified security settings, or -* Create a simple local server that serves the files - - -FIREFOX: change ``strict_origin_policy`` to false in about:config - -CHROME: run with the following argument : `--allow-file-access-from-files` - -(You can do this on OSX by running Chrome from /Applications/Google -Chrome/Contents/MacOS with `open -a "Google Chrome" --args ---allow-file-access-from-files`) - -* To check if you have set the flag properly, you can open chrome://version and - check under the flags - -RUNNING A SIMPLE SERVER: - -If you have Python installed, you can simply run a simple HTTP server off your -machine from the root directory of this repository with the following command: - -`python -m SimpleHTTPServer` - -------------------------------------------------------------------------------- -RESOURCES: -------------------------------------------------------------------------------- - -The following are articles and resources that have been chosen to help give you -a sense of each of the effects: - -* Bloom : [GPU Gems](http://http.developer.nvidia.com/GPUGems/gpugems_ch21.html) -* Screen Space Ambient Occlusion : [Floored - Article](http://floored.com/blog/2013/ssao-screen-space-ambient-occlusion.html) - -------------------------------------------------------------------------------- -README -------------------------------------------------------------------------------- -All students must replace or augment the contents of this Readme.md in a clear -manner with the following: - -* A brief description of the project and the specific features you implemented. -* At least one screenshot of your project running. -* A 30 second or longer video of your project running. To create the video you - can use [Open Broadcaster Software](http://obsproject.com) -* A performance evaluation (described in detail below). - -------------------------------------------------------------------------------- -PERFORMANCE EVALUATION -------------------------------------------------------------------------------- -The performance evaluation is where you will investigate how to make your -program more efficient using the skills you've learned in class. You must have -performed at least one experiment on your code to investigate the positive or -negative effects on performance. - -We encourage you to get creative with your tweaks. Consider places in your code -that could be considered bottlenecks and try to improve them. - -Each student should provide no more than a one page summary of their -optimizations along with tables and or graphs to visually explain any -performance differences. - -------------------------------------------------------------------------------- -THIRD PARTY CODE POLICY -------------------------------------------------------------------------------- -* Use of any third-party code must be approved by asking on the Google groups. - If it is approved, all students are welcome to use it. Generally, we approve - use of third-party code that is not a core part of the project. For example, - for the ray tracer, we would approve using a third-party library for loading - models, but would not approve copying and pasting a CUDA function for doing - refraction. -* Third-party code must be credited in README.md. -* Using third-party code without its approval, including using another - student's code, is an academic integrity violation, and will result in you - receiving an F for the semester. - -------------------------------------------------------------------------------- -SELF-GRADING -------------------------------------------------------------------------------- -* On the submission date, email your grade, on a scale of 0 to 100, to Harmony, - harmoli+cis565@seas.upenn.edu, with a one paragraph explanation. Be concise and - realistic. Recall that we reserve 30 points as a sanity check to adjust your - grade. Your actual grade will be (0.7 * your grade) + (0.3 * our grade). We - hope to only use this in extreme cases when your grade does not realistically - reflect your work - it is either too high or too low. In most cases, we plan - to give you the exact grade you suggest. -* Projects are not weighted evenly, e.g., Project 0 doesn't count as much as - the path tracer. We will determine the weighting at the end of the semester - based on the size of each project. - - ---- -SUBMISSION ---- -As with the previous projects, you should fork this project and work inside of -your fork. Upon completion, commit your finished project back to your fork, and -make a pull request to the master repository. You should include a README.md -file in the root directory detailing the following - -* A brief description of the project and specific features you implemented -* At least one screenshot of your project running. -* A link to a video of your project running. -* Instructions for building and running your project if they differ from the - base code. -* A performance writeup as detailed above. -* A list of all third-party code used. -* This Readme file edited as described above in the README section. - ---- -ACKNOWLEDGEMENTS ---- - -Many thanks to Cheng-Tso Lin, whose framework for CIS700 we used for this -assignment. - -This project makes use of [three.js](http://www.threejs.org). +CIS 565 project 06 : Deferred shader +=================== + +## INTRODUCTION + +This project is an implementation of an OpenGL/GLSL deferred shading pipeline. First, various maps are rendered out to G-buffers, including positions, normals, colors, and depths for the visible fragments. Lighting and post-processing effects are then computed using the information stored in these G-buffers. In this project, I explore multiple shading models, screen-space ambient occlusion, a toon shader, and a bloom effect. + +## G-BUFFERS + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_gbuffer_positions.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_gbuffer_normals.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_gbuffer_colors.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_gbuffer_depths.PNG) + +## LAMBERTIAN SHADING + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_lambertian.PNG) + +## BLINN-PHONG SHADING + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_blinn_phong.PNG) + +## SCREEN-SPACE AMBIENT OCCLUSION + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_ao.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_blinn_phong.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_blinn_phong_with_ao.PNG) + +## HORIZON-BASED AMBIENT OCCLUSION + +*Coming soon!* + +## TOON SHADING + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_toon_01.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_toon_02.PNG) + +## BLOOM + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_bloom_01.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_bloom_02.PNG) + +![alt tag](https://raw.githubusercontent.com/drerucha/Project6-DeferredShader/master/readme_images/monkey_bloom_03.PNG) + +## PERFORMANCE ANALYSIS + +*Coming soon!* + +*Note: As of 2014-11-13, I was having difficulties using WebGL Inspector and the Web Tracing Framework to time the execution of my shaders. Until I discover a workaround or an alternate tool to test performance, this section remains in-progress.* + +## SPECIAL THANKS + +I want to give a quick shout-out to Patrick Cozzi who led the fall 2014 CIS 565 course at Penn, Harmony Li who was the TA for the same course, and Cheng-Tso Lin who wrote much of the basecode. Thanks guys! + +Also, this project makes use of three.js, so thanks to the guys and gals responsible for that. \ No newline at end of file