From 96072fed27bcdb745ce5cd85366ce9dd2bbd704b Mon Sep 17 00:00:00 2001 From: Garrett Johnson Date: Sat, 18 May 2024 22:51:40 +0900 Subject: [PATCH 1/3] Add proof of concept for transmission speed improvement --- src/renderers/TransmissionUtils.js | 73 ++++++++++++++++++++++++++++++ src/renderers/WebGLRenderer.js | 19 +++++++- 2 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/renderers/TransmissionUtils.js diff --git a/src/renderers/TransmissionUtils.js b/src/renderers/TransmissionUtils.js new file mode 100644 index 00000000000000..c1ab215a0e64fb --- /dev/null +++ b/src/renderers/TransmissionUtils.js @@ -0,0 +1,73 @@ +import { PlaneGeometry } from '../geometries/PlaneGeometry.js'; +import { ShaderMaterial } from '../materials/ShaderMaterial.js'; +import { Mesh } from '../objects/Mesh.js'; + +class CopyColorDepthMaterial extends ShaderMaterial { + + set map( v ) { + + this.uniforms.map.value = v; + + } + + set depthMap( v ) { + + this.uniforms.depthMap.value = v; + + } + + constructor() { + + super( { + + name: 'CopyColorDepthMaterial', + + uniforms: { + + 'map': { value: null }, + 'depthMap': { value: null } + + }, + + vertexShader: /* glsl */` + + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = vec4( position.xy, 1.0, 1.0 ); + + } + + `, + + fragmentShader: /* glsl */` + + uniform sampler2D map; + uniform sampler2D depthMap; + + varying vec2 vUv; + + void main() { + + vec4 texel = texture2D( map, vUv ); + gl_FragColor.rgb = vec3( int( texel.r * 1000.0 ) % 2 ); + gl_FragColor.a = 1.0; + + gl_FragColor.rgb = texel.rgb; + gl_FragDepth = texture2D( depthMap, vUv ).r; + + #include + #include + + } + ` + + } ); + + } + +} + +export const transmissionMesh = new Mesh( new PlaneGeometry( 2, 2 ), new CopyColorDepthMaterial() ); diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index e43ba7233626ef..92b1ff32a24aaa 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -56,6 +56,8 @@ import { WebGLMaterials } from './webgl/WebGLMaterials.js'; import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js'; import { createCanvasElement, probeAsync } from '../utils.js'; import { ColorManagement } from '../math/ColorManagement.js'; +import { transmissionMesh } from './TransmissionUtils.js'; +import { DepthTexture } from '../textures/DepthTexture.js'; class WebGLRenderer { @@ -1215,6 +1217,19 @@ class WebGLRenderer { if ( renderBackground ) background.render( scene ); + const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ]; + if ( transmissiveObjects.length > 0 ) { + + currentRenderList.opaque.length = 0; + + const geometry = objects.update( transmissionMesh ); + const material = transmissionMesh.material; + material.map = transmissionRenderTarget.texture; + material.depthMap = transmissionRenderTarget.depthTexture; + renderObject( transmissionMesh, scene, camera, geometry, material, null ); + + } + renderScene( currentRenderList, scene, camera ); } @@ -1429,8 +1444,8 @@ class WebGLRenderer { minFilter: LinearMipmapLinearFilter, samples: 4, stencilBuffer: stencil, - resolveDepthBuffer: false, - resolveStencilBuffer: false + resolveStencilBuffer: false, + depthTexture: new DepthTexture(), } ); // debug From 0dcbcabe3095968efd69b05af69d9f18f4fd5f43 Mon Sep 17 00:00:00 2001 From: Garrett Johnson Date: Sun, 19 May 2024 14:02:01 +0900 Subject: [PATCH 2/3] Update blending --- src/renderers/TransmissionUtils.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/renderers/TransmissionUtils.js b/src/renderers/TransmissionUtils.js index c1ab215a0e64fb..69971d7b79ec39 100644 --- a/src/renderers/TransmissionUtils.js +++ b/src/renderers/TransmissionUtils.js @@ -51,11 +51,7 @@ class CopyColorDepthMaterial extends ShaderMaterial { void main() { - vec4 texel = texture2D( map, vUv ); - gl_FragColor.rgb = vec3( int( texel.r * 1000.0 ) % 2 ); - gl_FragColor.a = 1.0; - - gl_FragColor.rgb = texel.rgb; + gl_FragColor = texture2D( map, vUv ); gl_FragDepth = texture2D( depthMap, vUv ).r; #include From 353fbe67bf059d8254d05c43d49cfd27eb3273cf Mon Sep 17 00:00:00 2001 From: Garrett Johnson Date: Mon, 20 May 2024 00:07:13 +0900 Subject: [PATCH 3/3] Update blending --- src/renderers/TransmissionUtils.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/renderers/TransmissionUtils.js b/src/renderers/TransmissionUtils.js index 69971d7b79ec39..dcd6f84fa75571 100644 --- a/src/renderers/TransmissionUtils.js +++ b/src/renderers/TransmissionUtils.js @@ -1,3 +1,4 @@ +import { CustomBlending } from '../constants.js'; import { PlaneGeometry } from '../geometries/PlaneGeometry.js'; import { ShaderMaterial } from '../materials/ShaderMaterial.js'; import { Mesh } from '../objects/Mesh.js'; @@ -21,6 +22,7 @@ class CopyColorDepthMaterial extends ShaderMaterial { super( { name: 'CopyColorDepthMaterial', + blending: CustomBlending, uniforms: {