From c4dcfc5f255d089132e8020227c81343176b2256 Mon Sep 17 00:00:00 2001 From: Daniel Sturk Date: Mon, 24 Jun 2019 12:11:01 -0400 Subject: [PATCH 01/21] WIP: Added hdr support to cubeTexturePass # Conflicts: # examples/js/postprocessing/CubeTexturePass.js # src/renderers/shaders/ShaderChunk.d.ts # src/renderers/shaders/ShaderLib.d.ts --- examples/js/postprocessing/CubeTexturePass.js | 44 +++-- .../webgl_postprocessing_backgrounds.html | 31 +++- src/materials/Materials.d.ts | 1 + src/materials/Materials.js | 1 + src/materials/MeshCubeMaterial.d.ts | 24 +++ src/materials/MeshCubeMaterial.js | 51 +++++ src/renderers/shaders/ShaderChunk.d.ts | 174 +++++++++--------- src/renderers/shaders/ShaderChunk.js | 4 + src/renderers/shaders/ShaderLib.d.ts | 29 +-- src/renderers/shaders/ShaderLib.js | 23 +++ .../shaders/ShaderLib/cubeEnv_frag.glsl.js | 52 ++++++ .../shaders/ShaderLib/cubeEnv_vert.glsl.js | 25 +++ src/renderers/webgl/WebGLPrograms.js | 3 +- 13 files changed, 336 insertions(+), 126 deletions(-) create mode 100644 src/materials/MeshCubeMaterial.d.ts create mode 100644 src/materials/MeshCubeMaterial.js create mode 100644 src/renderers/shaders/ShaderLib/cubeEnv_frag.glsl.js create mode 100644 src/renderers/shaders/ShaderLib/cubeEnv_vert.glsl.js diff --git a/examples/js/postprocessing/CubeTexturePass.js b/examples/js/postprocessing/CubeTexturePass.js index 9fed85b4f46f6c..87b34f98cfa26f 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.MeshCubeMaterial(); + 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,19 +34,29 @@ 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 ); - - renderer.setRenderTarget( this.renderToScreen ? null : readBuffer ); - if ( this.clear ) renderer.clear(); - renderer.render( this.cubeScene, this.cubeCamera ); + this.cubeCamera.projectionMatrix.copy( camera.projectionMatrix ); + this.cubeCamera.near = 0.01; + this.cubeCamera.far = 20; + this.cubeCamera.aspect = camera.aspect; + this.cubeCamera.updateProjectionMatrix(); + this.cubeCamera.quaternion.setFromRotationMatrix( camera.matrixWorld ); + 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(); + renderer.render( this.cubeScene, this.cubeCamera); renderer.autoClear = oldAutoClear; diff --git a/examples/webgl_postprocessing_backgrounds.html b/examples/webgl_postprocessing_backgrounds.html index bcaac2b68cb6d3..7ba5e385969cb5 100644 --- a/examples/webgl_postprocessing_backgrounds.html +++ b/examples/webgl_postprocessing_backgrounds.html @@ -48,6 +48,9 @@ + + +