diff --git a/examples/jsm/shaders/GTAOShader.js b/examples/jsm/shaders/GTAOShader.js index d6cc90d794fc5e..2ca4ef0f94ca80 100644 --- a/examples/jsm/shaders/GTAOShader.js +++ b/examples/jsm/shaders/GTAOShader.js @@ -91,8 +91,12 @@ const GTAOShader = { #define FRAGMENT_OUTPUT vec4(vec3(ao), 1.) #endif - vec3 getViewPosition(const in vec2 screenPosition, const in float depth) { - vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0); + vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) { + #ifdef USE_REVERSED_DEPTH_BUFFER + vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 ); + #else + vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 ); + #endif vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition; return viewSpacePosition.xyz / viewSpacePosition.w; } @@ -154,10 +158,19 @@ const GTAOShader = { void main() { float depth = getDepth(vUv.xy); - if (depth >= 1.0) { - discard; - return; - } + + #ifdef USE_REVERSED_DEPTH_BUFFER + if (depth <= 0.0) { + discard; + return; + } + #else + if (depth >= 1.0) { + discard; + return; + } + #endif + vec3 viewPos = getViewPosition(vUv, depth); vec3 viewNormal = getViewNormal(vUv); diff --git a/examples/jsm/shaders/PoissonDenoiseShader.js b/examples/jsm/shaders/PoissonDenoiseShader.js index 0a3a7bf138414d..ff3e45feb6d75d 100644 --- a/examples/jsm/shaders/PoissonDenoiseShader.js +++ b/examples/jsm/shaders/PoissonDenoiseShader.js @@ -86,8 +86,12 @@ const PoissonDenoiseShader = { const vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS; - vec3 getViewPosition(const in vec2 screenPosition, const in float depth) { - vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0); + vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) { + #ifdef USE_REVERSED_DEPTH_BUFFER + vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 ); + #else + vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 ); + #endif vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition; return viewSpacePosition.xyz / viewSpacePosition.w; } diff --git a/examples/jsm/shaders/SAOShader.js b/examples/jsm/shaders/SAOShader.js index 7ee8330457d08d..e3e2d9425a6c48 100644 --- a/examples/jsm/shaders/SAOShader.js +++ b/examples/jsm/shaders/SAOShader.js @@ -86,17 +86,6 @@ const SAOShader = { #include - #ifdef USE_REVERSED_DEPTH_BUFFER - - const float depthThreshold = 0.0 + EPSILON; - - #else - - const float depthThreshold = 1.0 - EPSILON; - - #endif - - vec4 getDefaultColor( const in vec2 screenPosition ) { #if DIFFUSE_TEXTURE == 1 return texture2D( tDiffuse, vUv ); @@ -164,9 +153,15 @@ const SAOShader = { angle += ANGLE_STEP; float sampleDepth = getDepth( sampleUv ); - if( sampleDepth >= depthThreshold ) { + #ifdef USE_REVERSED_DEPTH_BUFFER + if( sampleDepth <= 0.0 + EPSILON ) { continue; } + #else + if( sampleDepth >= 1.0 - EPSILON ) { + continue; + } + #endif float sampleViewZ = getViewZ( sampleDepth ); vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ ); @@ -181,9 +176,16 @@ const SAOShader = { void main() { float centerDepth = getDepth( vUv ); - if( centerDepth >= depthThreshold ) { - discard; - } + + #ifdef USE_REVERSED_DEPTH_BUFFER + if( centerDepth <= 0.0 + EPSILON ) { + discard; + } + #else + if( centerDepth >= 1.0 - EPSILON ) { + discard; + } + #endif float centerViewZ = getViewZ( centerDepth ); vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ ); diff --git a/src/cameras/CubeCamera.js b/src/cameras/CubeCamera.js index 9ba288946ed9e1..afaae16a8069a0 100644 --- a/src/cameras/CubeCamera.js +++ b/src/cameras/CubeCamera.js @@ -203,19 +203,27 @@ class CubeCamera extends Object3D { renderTarget.texture.generateMipmaps = false; + // https://github.com/mrdoob/three.js/issues/31413#issuecomment-3095966812 + const reversedDepthBuffer = !! ( renderer.isWebGLRenderer && renderer.state.buffers.depth.getReversed() ); + renderer.setRenderTarget( renderTarget, 0, activeMipmapLevel ); + if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth(); renderer.render( scene, cameraPX ); renderer.setRenderTarget( renderTarget, 1, activeMipmapLevel ); + if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth(); renderer.render( scene, cameraNX ); renderer.setRenderTarget( renderTarget, 2, activeMipmapLevel ); + if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth(); renderer.render( scene, cameraPY ); renderer.setRenderTarget( renderTarget, 3, activeMipmapLevel ); + if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth(); renderer.render( scene, cameraNY ); renderer.setRenderTarget( renderTarget, 4, activeMipmapLevel ); + if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth(); renderer.render( scene, cameraPZ ); // mipmaps are generated during the last call of render() @@ -224,6 +232,7 @@ class CubeCamera extends Object3D { renderTarget.texture.generateMipmaps = generateMipmaps; renderer.setRenderTarget( renderTarget, 5, activeMipmapLevel ); + if ( reversedDepthBuffer && renderer.autoClear === false ) renderer.clearDepth(); renderer.render( scene, cameraNZ ); renderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel ); diff --git a/src/core/Clock.js b/src/core/Clock.js index 5b3966f2ecf356..fc0f5e04620693 100644 --- a/src/core/Clock.js +++ b/src/core/Clock.js @@ -1,11 +1,16 @@ +import { warn } from '../utils.js'; + /** * Class for keeping track of time. + * + * @deprecated since r183. */ class Clock { /** * Constructs a new clock. * + * @deprecated since 183. * @param {boolean} [autoStart=true] - Whether to automatically start the clock when * `getDelta()` is called for the first time. */ @@ -53,6 +58,8 @@ class Clock { */ this.running = false; + warn( 'THREE.Clock: This module has been deprecated. Please use THREE.Timer instead.' ); // @deprecated, r183 + } /** diff --git a/src/renderers/webgl/WebGLState.js b/src/renderers/webgl/WebGLState.js index c49d48eff668be..674efa16a80fdd 100644 --- a/src/renderers/webgl/WebGLState.js +++ b/src/renderers/webgl/WebGLState.js @@ -214,6 +214,8 @@ function WebGLState( gl, extensions ) { if ( currentDepthClear !== depth ) { + currentDepthClear = depth; + if ( currentReversed ) { depth = 1 - depth; @@ -221,7 +223,6 @@ function WebGLState( gl, extensions ) { } gl.clearDepth( depth ); - currentDepthClear = depth; }