11import * as THREE from "three" ;
2+ import { FullScreenQuad } from "three/addons/postprocessing/Pass.js" ;
23
34import type { GsplatGenerator } from "./SplatGenerator" ;
45import { type SplatFileType , SplatLoader , unpackSplats } from "./SplatLoader" ;
@@ -498,7 +499,7 @@ export class PackedSplats {
498499
499500 // Prepare and update our material we'll use to render the Gsplats
500501 const material = program . prepareMaterial ( ) ;
501- PackedSplats . mesh . material = material ;
502+ PackedSplats . fullScreenQuad . material = material ;
502503 return { program, material } ;
503504 }
504505
@@ -579,7 +580,7 @@ export class PackedSplats {
579580 renderer . setRenderTarget ( this . target , layer ) ;
580581 renderer . xr . enabled = false ;
581582 renderer . autoClear = false ;
582- renderer . render ( PackedSplats . scene , PackedSplats . camera ) ;
583+ PackedSplats . fullScreenQuad . render ( renderer ) ;
583584
584585 base += SPLAT_TEX_WIDTH * ( layerYEnd - layerYStart ) ;
585586 }
@@ -593,14 +594,10 @@ export class PackedSplats {
593594 // Cache for GsplatGenerator programs
594595 static generatorProgram = new Map < GsplatGenerator , DynoProgram > ( ) ;
595596
596- // Static Three.js objects for pseudo-compute shader rendering
597- static geometry = new THREE . PlaneGeometry ( 2 , 2 ) ;
598- static mesh = new THREE . Mesh (
599- PackedSplats . geometry ,
597+ // Static full-screen quad for pseudo-compute shader rendering
598+ static fullScreenQuad = new FullScreenQuad (
600599 new THREE . RawShaderMaterial ( { visible : false } ) ,
601600 ) ;
602- static scene = new THREE . Scene ( ) . add ( PackedSplats . mesh ) ;
603- static camera = new THREE . Camera ( ) ;
604601}
605602
606603// You can use a PackedSplats as a dyno block using the function
0 commit comments