From e75ead434089ccbf4d96fa6e5aad4b74a73494e2 Mon Sep 17 00:00:00 2001 From: Gernot Steinegger Date: Wed, 13 Dec 2023 07:34:34 +0100 Subject: [PATCH] GTAOPass: distance dependent horizon search --- examples/jsm/postprocessing/GTAOPass.js | 7 +++++++ examples/jsm/shaders/GTAOShader.js | 8 +++++--- .../screenshots/webgl_postprocessing_gtao.jpg | Bin 21539 -> 20206 bytes examples/webgl_postprocessing_gtao.html | 6 ++---- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/examples/jsm/postprocessing/GTAOPass.js b/examples/jsm/postprocessing/GTAOPass.js index e1b1c9c1ccb839..f298e85eaf2444 100644 --- a/examples/jsm/postprocessing/GTAOPass.js +++ b/examples/jsm/postprocessing/GTAOPass.js @@ -241,6 +241,13 @@ class GTAOPass extends Pass { } + if ( parameters.distanceFallOff !== undefined ) { + + this.gtaoMaterial.uniforms.distanceFallOff.value = parameters.distanceFallOff; + this.gtaoMaterial.needsUpdate = true; + + } + if ( parameters.scale !== undefined ) { this.gtaoMaterial.uniforms.scale.value = parameters.scale; diff --git a/examples/jsm/shaders/GTAOShader.js b/examples/jsm/shaders/GTAOShader.js index efbb99d4274230..04a12e8ad40f16 100644 --- a/examples/jsm/shaders/GTAOShader.js +++ b/examples/jsm/shaders/GTAOShader.js @@ -63,6 +63,7 @@ const GTAOShader = { radius: { value: 0.25 }, distanceExponent: { value: 1. }, thickness: { value: 1. }, + distanceFallOff: { value: 1. }, scale: { value: 1. }, sceneBoxMin: { value: new Vector3( - 1, - 1, - 1 ) }, sceneBoxMax: { value: new Vector3( 1, 1, 1 ) }, @@ -91,6 +92,7 @@ const GTAOShader = { uniform float radius; uniform float distanceExponent; uniform float thickness; + uniform float distanceFallOff; uniform float scale; #if SCENE_CLIP_BOX == 1 uniform vec3 sceneBoxMin; @@ -224,7 +226,7 @@ const GTAOShader = { vec3 viewDelta = sampleSceneViewPos - viewPos; if (abs(viewDelta.z) < thickness) { float sampleCosHorizon = dot(viewDir, normalize(viewDelta)); - cosHorizons.x = max(cosHorizons.x, sampleCosHorizon); + cosHorizons.x += max(0., (sampleCosHorizon - cosHorizons.x) * mix(1., 2. / float(j + 2), distanceFallOff)); } sampleSceneUvDepth = getSceneUvAndDepth(viewPos - sampleViewOffset); @@ -232,7 +234,7 @@ const GTAOShader = { viewDelta = sampleSceneViewPos - viewPos; if (abs(viewDelta.z) < thickness) { float sampleCosHorizon = dot(viewDir, normalize(viewDelta)); - cosHorizons.y = max(cosHorizons.y, sampleCosHorizon); + cosHorizons.y += max(0., (sampleCosHorizon - cosHorizons.y) * mix(1., 2. / float(j + 2), distanceFallOff)); } } @@ -353,7 +355,7 @@ function generateMagicSquareNoise( size = 5 ) { data[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255; data[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255; data[ inx * 4 + 2 ] = 127; - data[ inx * 4 + 3 ] = 0; + data[ inx * 4 + 3 ] = 255; } diff --git a/examples/screenshots/webgl_postprocessing_gtao.jpg b/examples/screenshots/webgl_postprocessing_gtao.jpg index f2445e4d45b8051095f7e38327b0e1e2ec559780..de9cce610c116903beaf7430349290d17a9808ef 100644 GIT binary patch delta 18104 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 T04}o;Qx5@?fC3i;{{a8lD4z|! delta 19453 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 gtaoPass.updateGtaoMaterial( aoParameters ) ); gui.add( aoParameters, 'distanceExponent' ).min( 1 ).max( 4 ).step( 0.01 ).onChange( () => gtaoPass.updateGtaoMaterial( aoParameters ) ); gui.add( aoParameters, 'thickness' ).min( 0.01 ).max( 10 ).step( 0.01 ).onChange( () => gtaoPass.updateGtaoMaterial( aoParameters ) ); + gui.add( aoParameters, 'distanceFallOff' ).min( 0 ).max( 1 ).step( 0.01 ).onChange( () => gtaoPass.updateGtaoMaterial( aoParameters ) ); gui.add( aoParameters, 'scale' ).min( 0.01 ).max( 2.0 ).step( 0.01 ).onChange( () => gtaoPass.updateGtaoMaterial( aoParameters ) ); gui.add( aoParameters, 'samples' ).min( 2 ).max( 32 ).step( 1 ).onChange( () => gtaoPass.updateGtaoMaterial( aoParameters ) ); gui.add( aoParameters, 'screenSpaceRadius' ).onChange( () => gtaoPass.updateGtaoMaterial( aoParameters ) );