Skip to content

Commit 54bc177

Browse files
aardgooseaardgoose
andauthored
WebGPURenderer: GaussianBlurNode reduce overhead (#27447)
* use two quadmeshes * add tip --------- Co-authored-by: aardgoose <[email protected]>
1 parent 0f851ee commit 54bc177

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

examples/jsm/nodes/display/GaussianBlurNode.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import { uniform } from '../core/UniformNode.js';
88
import { Vector2, RenderTarget } from 'three';
99
import QuadMesh from '../../objects/QuadMesh.js';
1010

11-
const quadMesh = new QuadMesh();
11+
// WebGPU: The use of a single QuadMesh for both gaussian blur passes results in a single RenderObject with a SampledTexture binding that
12+
// alternates between source textures and triggers creation of new BindGroups and BindGroupLayouts every frame.
13+
14+
const quadMesh1 = new QuadMesh();
15+
const quadMesh2 = new QuadMesh();
1216

1317
class GaussianBlurNode extends TempNode {
1418

@@ -54,7 +58,8 @@ class GaussianBlurNode extends TempNode {
5458
const currentRenderTarget = renderer.getRenderTarget();
5559
const currentTexture = textureNode.value;
5660

57-
quadMesh.material = this._material;
61+
quadMesh1.material = this._material;
62+
quadMesh2.material = this._material;
5863

5964
this.setSize( map.image.width, map.image.height );
6065

@@ -64,7 +69,7 @@ class GaussianBlurNode extends TempNode {
6469

6570
this._passDirection.value.set( 1, 0 );
6671

67-
quadMesh.render( renderer );
72+
quadMesh1.render( renderer );
6873

6974
// vertical
7075

@@ -73,7 +78,7 @@ class GaussianBlurNode extends TempNode {
7378

7479
this._passDirection.value.set( 0, 1 );
7580

76-
quadMesh.render( renderer );
81+
quadMesh2.render( renderer );
7782

7883
// restore
7984

0 commit comments

Comments
 (0)