From 8df869155a3d6b6c30e816c991ad153cbc3e606b Mon Sep 17 00:00:00 2001 From: aardgoose Date: Thu, 5 Sep 2024 20:42:49 +0100 Subject: [PATCH 1/5] adapt for webGPU --- examples/files.json | 1 + examples/jsm/lights/LightProbeGenerator.js | 39 ++++-- .../webgpu_lightprobe_cubecamera.jpg | Bin 0 -> 23976 bytes examples/webgl_lightprobe_cubecamera.html | 6 +- examples/webgpu_lightprobe_cubecamera.html | 125 ++++++++++++++++++ 5 files changed, 159 insertions(+), 12 deletions(-) create mode 100644 examples/screenshots/webgpu_lightprobe_cubecamera.jpg create mode 100644 examples/webgpu_lightprobe_cubecamera.html diff --git a/examples/files.json b/examples/files.json index 7f401d6dfeebde..c49e86b945d86b 100644 --- a/examples/files.json +++ b/examples/files.json @@ -329,6 +329,7 @@ "webgpu_instance_uniform", "webgpu_instancing_morph", "webgpu_lightprobe", + "webgpu_lightprobe_cubecamera", "webgpu_lights_custom", "webgpu_lights_ies_spotlight", "webgpu_lights_phong", diff --git a/examples/jsm/lights/LightProbeGenerator.js b/examples/jsm/lights/LightProbeGenerator.js index 4bd9896c8cd3fd..aed07346824b6e 100644 --- a/examples/jsm/lights/LightProbeGenerator.js +++ b/examples/jsm/lights/LightProbeGenerator.js @@ -126,7 +126,17 @@ class LightProbeGenerator { } - static fromCubeRenderTarget( renderer, cubeRenderTarget ) { + static async fromCubeRenderTarget( renderer, cubeRenderTarget ) { + + let useAsync = false; + let flip = 1; + + if ( renderer.isWebGPURenderer ) { + + useAsync = true; + if ( renderer.backend.isWebGPUBackend ) flip = -1; + + } // The renderTarget must be set to RGBA in order to make readRenderTargetPixels works let totalWeight = 0; @@ -150,19 +160,28 @@ class LightProbeGenerator { let data; - if ( dataType === HalfFloatType ) { + if ( useAsync ) { - data = new Uint16Array( imageWidth * imageWidth * 4 ); + data = await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, 0, faceIndex ); } else { - // assuming UnsignedByteType - data = new Uint8Array( imageWidth * imageWidth * 4 ); + if ( dataType === HalfFloatType ) { + + data = new Uint16Array( imageWidth * imageWidth * 4 ); - } + } else { + + // assuming UnsignedByteType + + data = new Uint8Array( imageWidth * imageWidth * 4 ); + + } + + renderer.readRenderTargetPixels( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex ); - renderer.readRenderTargetPixels( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex ); + } const pixelSize = 2 / imageWidth; @@ -194,15 +213,15 @@ class LightProbeGenerator { const pixelIndex = i / 4; - const col = - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize; + const col = ( - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize ) * flip; const row = 1 - ( Math.floor( pixelIndex / imageWidth ) + 0.5 ) * pixelSize; switch ( faceIndex ) { - case 0: coord.set( 1, row, - col ); break; + case 0: coord.set( 1 * flip, row, - col * flip ); break; - case 1: coord.set( - 1, row, col ); break; + case 1: coord.set( - 1 * flip, row, col * flip ); break; case 2: coord.set( col, 1, - row ); break; diff --git a/examples/screenshots/webgpu_lightprobe_cubecamera.jpg b/examples/screenshots/webgpu_lightprobe_cubecamera.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d75a244773958c8d7797cc66a1cd8a377853e90 GIT binary patch literal 23976 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 + + + three.js webgpu - light probe from cubeCamera + + + + + + +
+ three.js webgpu - light probe from cubeCamera +
+ + + + + + + From b7d0fc88296de3379fb05e2eee45b98e3d14f16b Mon Sep 17 00:00:00 2001 From: aardgoose Date: Thu, 5 Sep 2024 20:52:43 +0100 Subject: [PATCH 2/5] improve backend detection --- examples/jsm/lights/LightProbeGenerator.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/jsm/lights/LightProbeGenerator.js b/examples/jsm/lights/LightProbeGenerator.js index aed07346824b6e..cf3e2d2a568b32 100644 --- a/examples/jsm/lights/LightProbeGenerator.js +++ b/examples/jsm/lights/LightProbeGenerator.js @@ -7,7 +7,8 @@ import { SRGBColorSpace, NoColorSpace, HalfFloatType, - DataUtils + DataUtils, + WebGPUCoordinateSystem } from 'three'; class LightProbeGenerator { @@ -134,7 +135,8 @@ class LightProbeGenerator { if ( renderer.isWebGPURenderer ) { useAsync = true; - if ( renderer.backend.isWebGPUBackend ) flip = -1; + + if ( renderer.coordinateSystem === WebGPUCoordinateSystem ) flip = -1; } From ead2964f7e74e41d0b884470e8baff62c2f44a12 Mon Sep 17 00:00:00 2001 From: aardgoose Date: Fri, 6 Sep 2024 08:33:28 +0100 Subject: [PATCH 3/5] rework --- examples/jsm/lights/LightProbeGenerator.js | 38 ++++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/examples/jsm/lights/LightProbeGenerator.js b/examples/jsm/lights/LightProbeGenerator.js index cf3e2d2a568b32..89aa03e1e35f3a 100644 --- a/examples/jsm/lights/LightProbeGenerator.js +++ b/examples/jsm/lights/LightProbeGenerator.js @@ -130,13 +130,13 @@ class LightProbeGenerator { static async fromCubeRenderTarget( renderer, cubeRenderTarget ) { let useAsync = false; - let flip = 1; + let flip = - 1; if ( renderer.isWebGPURenderer ) { useAsync = true; - if ( renderer.coordinateSystem === WebGPUCoordinateSystem ) flip = -1; + if ( renderer.coordinateSystem === WebGPUCoordinateSystem ) flip = 1; } @@ -155,33 +155,35 @@ class LightProbeGenerator { const shCoefficients = sh.coefficients; const dataType = cubeRenderTarget.texture.type; + const imageWidth = cubeRenderTarget.width; // assumed to be square - for ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) { - - const imageWidth = cubeRenderTarget.width; // assumed to be square + let data; - let data; + if ( ! useAsync ) { - if ( useAsync ) { + if ( dataType === HalfFloatType ) { - data = await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, 0, faceIndex ); + data = new Uint16Array( imageWidth * imageWidth * 4 ); } else { + // assuming UnsignedByteType - if ( dataType === HalfFloatType ) { + data = new Uint8Array( imageWidth * imageWidth * 4 ); - data = new Uint16Array( imageWidth * imageWidth * 4 ); + } - } else { + } - // assuming UnsignedByteType + for ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) { - data = new Uint8Array( imageWidth * imageWidth * 4 ); + if ( useAsync ) { - } + data = await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, 0, faceIndex ); + + } else { - renderer.readRenderTargetPixels( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex ); + await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex ); } @@ -215,15 +217,15 @@ class LightProbeGenerator { const pixelIndex = i / 4; - const col = ( - 1 + ( pixelIndex % imageWidth + 0.5 ) * pixelSize ) * flip; + const col = ( 1 - ( pixelIndex % imageWidth + 0.5 ) * pixelSize ) * flip; const row = 1 - ( Math.floor( pixelIndex / imageWidth ) + 0.5 ) * pixelSize; switch ( faceIndex ) { - case 0: coord.set( 1 * flip, row, - col * flip ); break; + case 0: coord.set( - 1 * flip, row, col * flip ); break; - case 1: coord.set( - 1 * flip, row, col * flip ); break; + case 1: coord.set( 1 * flip, row, - col * flip ); break; case 2: coord.set( col, 1, - row ); break; From fb244d8ab335be99101ca6ce240b85ab0ca3ae99 Mon Sep 17 00:00:00 2001 From: aardgoose Date: Sat, 7 Sep 2024 20:40:34 +0100 Subject: [PATCH 4/5] rework --- examples/jsm/lights/LightProbeGenerator.js | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/examples/jsm/lights/LightProbeGenerator.js b/examples/jsm/lights/LightProbeGenerator.js index 89aa03e1e35f3a..692c7c219518c7 100644 --- a/examples/jsm/lights/LightProbeGenerator.js +++ b/examples/jsm/lights/LightProbeGenerator.js @@ -8,7 +8,7 @@ import { NoColorSpace, HalfFloatType, DataUtils, - WebGPUCoordinateSystem + WebGLCoordinateSystem } from 'three'; class LightProbeGenerator { @@ -129,16 +129,7 @@ class LightProbeGenerator { static async fromCubeRenderTarget( renderer, cubeRenderTarget ) { - let useAsync = false; - let flip = - 1; - - if ( renderer.isWebGPURenderer ) { - - useAsync = true; - - if ( renderer.coordinateSystem === WebGPUCoordinateSystem ) flip = 1; - - } + const flip = renderer.coordinateSystem === WebGLCoordinateSystem ? -1 : 1; // The renderTarget must be set to RGBA in order to make readRenderTargetPixels works let totalWeight = 0; @@ -159,7 +150,7 @@ class LightProbeGenerator { let data; - if ( ! useAsync ) { + if ( renderer.isWebGLRenderer ) { if ( dataType === HalfFloatType ) { @@ -177,13 +168,13 @@ class LightProbeGenerator { for ( let faceIndex = 0; faceIndex < 6; faceIndex ++ ) { - if ( useAsync ) { + if ( renderer.isWebGLRenderer ) { - data = await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, 0, faceIndex ); + await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex ); } else { - await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex ); + data = await renderer.readRenderTargetPixelsAsync( cubeRenderTarget, 0, 0, imageWidth, imageWidth, 0, faceIndex ); } From 83a9d961e6ef0ec40c63582b92e5227eac1ddc49 Mon Sep 17 00:00:00 2001 From: aardgoose Date: Mon, 9 Sep 2024 14:29:34 +0100 Subject: [PATCH 5/5] exclude from tests --- test/e2e/puppeteer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index ed1d32d814ffd3..100af8c2098108 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -127,6 +127,7 @@ const exceptionList = [ // WebGPURenderer: Unknown problem 'webgpu_camera_logarithmicdepthbuffer', 'webgpu_clipping', + 'webgpu_lightprobe_cubecamera', 'webgpu_loader_materialx', 'webgpu_materials_video', 'webgpu_materialx_noise',