diff --git a/examples/js/postprocessing/CubeTexturePass.js b/examples/js/postprocessing/CubeTexturePass.js index 0f16e2f20fc211..31447c03e12397 100644 --- a/examples/js/postprocessing/CubeTexturePass.js +++ b/examples/js/postprocessing/CubeTexturePass.js @@ -10,21 +10,17 @@ THREE.CubeTexturePass = function ( camera, envMap, opacity ) { this.needsSwap = false; - this.cubeShader = THREE.ShaderLib[ 'cube' ]; + this.cubeMaterial = new THREE.SkyboxMaterial(); + this.cubeMesh = new THREE.Mesh( new THREE.BoxBufferGeometry( 10, 10, 10 ), - new THREE.ShaderMaterial( { - uniforms: this.cubeShader.uniforms, - vertexShader: this.cubeShader.vertexShader, - fragmentShader: this.cubeShader.fragmentShader, - depthTest: false, - depthWrite: false, - side: THREE.BackSide - } ) + this.cubeMaterial ); this.envMap = envMap; + this.envMapIntensity = 1.0; this.opacity = ( opacity !== undefined ) ? opacity : 1.0; + this.roughness = 0.0; this.cubeScene = new THREE.Scene(); this.cubeCamera = new THREE.PerspectiveCamera(); @@ -38,18 +34,28 @@ THREE.CubeTexturePass.prototype = Object.assign( Object.create( THREE.Pass.proto render: function ( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) { + var camera = this.camera; + var oldAutoClear = renderer.autoClear; renderer.autoClear = false; - this.cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix ); - this.cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld ); - - this.cubeMesh.material.uniforms[ "tCube" ].value = this.envMap; - this.cubeMesh.material.uniforms[ "opacity" ].value = this.opacity; - this.cubeMesh.material.transparent = ( this.opacity < 1.0 ); + this.cubeCamera.copy( camera ); + this.cubeCamera.near = 0.01; + this.cubeCamera.far = 20; + this.cubeCamera.position.set(0, 0, 0); + this.cubeCamera.quaternion.setFromRotationMatrix( camera.matrixWorld ); + this.cubeCamera.updateProjectionMatrix(); + if( this.cubeMaterial.envMap != this.envMap ) { + this.cubeMaterial.envMap = this.envMap; + this.cubeMaterial.needsUpdate = true; + } + this.cubeMaterial.envMapIntensity = this.envMapIntensity; + this.cubeMaterial.roughness = this.roughness; + this.cubeMaterial.opacity = this.opacity; + this.cubeMaterial.transparent = ( this.opacity < 1.0 ); renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); - if ( this.clear ) renderer.clear(); + if( this.clear ) renderer.clear(); renderer.render( this.cubeScene, this.cubeCamera ); renderer.autoClear = oldAutoClear; diff --git a/examples/jsm/postprocessing/CubeTexturePass.js b/examples/jsm/postprocessing/CubeTexturePass.js index 7857b608f743e0..ca2a676c93ea9d 100644 --- a/examples/jsm/postprocessing/CubeTexturePass.js +++ b/examples/jsm/postprocessing/CubeTexturePass.js @@ -3,13 +3,11 @@ */ import { - BackSide, BoxBufferGeometry, Mesh, PerspectiveCamera, Scene, - ShaderLib, - ShaderMaterial + SkyboxMaterial } from "../../../build/three.module.js"; import { Pass } from "../postprocessing/Pass.js"; @@ -21,21 +19,17 @@ var CubeTexturePass = function ( camera, envMap, opacity ) { this.needsSwap = false; - this.cubeShader = ShaderLib[ 'cube' ]; + this.cubeMaterial = new SkyboxMaterial(); + this.cubeMesh = new Mesh( new BoxBufferGeometry( 10, 10, 10 ), - new ShaderMaterial( { - uniforms: this.cubeShader.uniforms, - vertexShader: this.cubeShader.vertexShader, - fragmentShader: this.cubeShader.fragmentShader, - depthTest: false, - depthWrite: false, - side: BackSide - } ) + this.cubeMaterial ); this.envMap = envMap; + this.envMapIntensity = 1.0; this.opacity = ( opacity !== undefined ) ? opacity : 1.0; + this.roughness = 0.0; this.cubeScene = new Scene(); this.cubeCamera = new PerspectiveCamera(); @@ -49,18 +43,28 @@ CubeTexturePass.prototype = Object.assign( Object.create( Pass.prototype ), { render: function ( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) { + var camera = this.camera; + var oldAutoClear = renderer.autoClear; renderer.autoClear = false; - this.cubeCamera.projectionMatrix.copy( this.camera.projectionMatrix ); - this.cubeCamera.quaternion.setFromRotationMatrix( this.camera.matrixWorld ); - - this.cubeMesh.material.uniforms[ "tCube" ].value = this.envMap; - this.cubeMesh.material.uniforms[ "opacity" ].value = this.opacity; - this.cubeMesh.material.transparent = ( this.opacity < 1.0 ); + this.cubeCamera.copy( camera ); + this.cubeCamera.near = 0.01; + this.cubeCamera.far = 20; + this.cubeCamera.position.set(0, 0, 0); + this.cubeCamera.quaternion.setFromRotationMatrix( camera.matrixWorld ); + this.cubeCamera.updateProjectionMatrix(); + if( this.cubeMaterial.envMap != this.envMap ) { + this.cubeMaterial.envMap = this.envMap; + this.cubeMaterial.needsUpdate = true; + } + this.cubeMaterial.envMapIntensity = this.envMapIntensity; + this.cubeMaterial.roughness = this.roughness; + this.cubeMaterial.opacity = this.opacity; + this.cubeMaterial.transparent = ( this.opacity < 1.0 ); renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); - if ( this.clear ) renderer.clear(); + if( this.clear ) renderer.clear(); renderer.render( this.cubeScene, this.cubeCamera ); renderer.autoClear = oldAutoClear; diff --git a/examples/webgl_postprocessing_backgrounds.html b/examples/webgl_postprocessing_backgrounds.html index 9e417bbe129ec5..63d19c3422d00c 100644 --- a/examples/webgl_postprocessing_backgrounds.html +++ b/examples/webgl_postprocessing_backgrounds.html @@ -15,8 +15,7 @@