playcanvas 2.24.0-beta.32 → 2.24.0-beta.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/playcanvas/src/core/core.js +2 -2
- package/build/playcanvas/src/extras/input/controllers/orbit-controller.d.ts +9 -0
- package/build/playcanvas/src/extras/input/controllers/orbit-controller.js +8 -2
- package/build/playcanvas/src/framework/components/gsplat/component.d.ts +4 -4
- package/build/playcanvas/src/framework/components/particle-system/component.d.ts +5 -5
- package/build/playcanvas/src/framework/parsers/sog-bundle.js +20 -3
- package/build/playcanvas/src/framework/parsers/sog.js +23 -7
- package/build/playcanvas/src/scene/gsplat/gsplat-data.d.ts +7 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-data.js +1 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-resource-base.d.ts +8 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-resource-base.js +3 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-resource.d.ts +2 -1
- package/build/playcanvas/src/scene/gsplat/gsplat-resource.js +8 -1
- package/build/playcanvas/src/scene/gsplat/gsplat-sog-blind.d.ts +55 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-sog-blind.js +55 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-sog-data.d.ts +9 -3
- package/build/playcanvas/src/scene/gsplat/gsplat-sog-data.js +58 -29
- package/build/playcanvas/src/scene/gsplat/gsplat-sog-resource.d.ts +8 -0
- package/build/playcanvas/src/scene/gsplat/gsplat-sog-resource.js +29 -8
- package/build/playcanvas/src/scene/gsplat-unified/gsplat-octree.resource.d.ts +8 -0
- package/build/playcanvas/src/scene/gsplat-unified/gsplat-octree.resource.js +3 -0
- package/build/playcanvas/src/scene/gsplat-unified/gsplat-params.d.ts +3 -2
- package/build/playcanvas/src/scene/gsplat-unified/gsplat-params.js +4 -4
- package/build/playcanvas/src/scene/gsplat-unified/gsplat-projector.js +1 -1
- package/build/playcanvas/src/scene/materials/lit-material-options-builder.js +0 -2
- package/build/playcanvas/src/scene/materials/lit-material.js +5 -0
- package/build/playcanvas/src/scene/materials/material-property.d.ts +9 -0
- package/build/playcanvas/src/scene/materials/material-property.js +4 -0
- package/build/playcanvas/src/scene/materials/standard-material-options-builder.js +1 -3
- package/build/playcanvas/src/scene/materials/standard-material.js +19 -4
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.js +10 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.js +25 -5
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.d.ts +2 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.d.ts +2 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.js +5 -2
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.js +4 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
- package/build/playcanvas/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.d.ts +2 -0
- package/build/playcanvas/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.js +2 -0
- package/build/playcanvas/src/scene/shader-lib/programs/lit-shader-options.d.ts +0 -8
- package/build/playcanvas/src/scene/shader-lib/programs/lit-shader-options.js +0 -2
- package/build/playcanvas/src/scene/shader-lib/programs/lit-shader.js +0 -2
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.js +2 -2
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.js +11 -2
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.js +28 -8
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.d.ts +2 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.d.ts +2 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.js +18 -3
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.js +4 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.js +12 -5
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.d.ts +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.js +1 -1
- package/build/playcanvas/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.d.ts +2 -0
- package/build/playcanvas/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.js +2 -0
- package/build/playcanvas.d.ts +63 -23
- package/build/playcanvas.dbg/src/core/core.js +2 -2
- package/build/playcanvas.dbg/src/extras/input/controllers/orbit-controller.js +14 -2
- package/build/playcanvas.dbg/src/framework/parsers/sog-bundle.js +20 -3
- package/build/playcanvas.dbg/src/framework/parsers/sog.js +23 -7
- package/build/playcanvas.dbg/src/scene/gsplat/gsplat-data.js +7 -0
- package/build/playcanvas.dbg/src/scene/gsplat/gsplat-resource-base.js +10 -0
- package/build/playcanvas.dbg/src/scene/gsplat/gsplat-resource.js +10 -2
- package/build/playcanvas.dbg/src/scene/gsplat/gsplat-sog-blind.js +65 -0
- package/build/playcanvas.dbg/src/scene/gsplat/gsplat-sog-data.js +66 -32
- package/build/playcanvas.dbg/src/scene/gsplat/gsplat-sog-resource.js +42 -8
- package/build/playcanvas.dbg/src/scene/gsplat-unified/gsplat-octree.resource.js +10 -0
- package/build/playcanvas.dbg/src/scene/gsplat-unified/gsplat-params.js +7 -6
- package/build/playcanvas.dbg/src/scene/gsplat-unified/gsplat-projector.js +1 -1
- package/build/playcanvas.dbg/src/scene/materials/lit-material-options-builder.js +0 -2
- package/build/playcanvas.dbg/src/scene/materials/lit-material.js +6 -0
- package/build/playcanvas.dbg/src/scene/materials/material-property.js +4 -0
- package/build/playcanvas.dbg/src/scene/materials/standard-material-options-builder.js +1 -3
- package/build/playcanvas.dbg/src/scene/materials/standard-material.js +19 -4
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.js +2 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.js +15 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.js +3 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.js +30 -6
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.js +27 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js +9 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.js +6 -3
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.js +7 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.js +6 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.js +15 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.js +4 -6
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +8 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.js +4 -3
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.js +2 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/programs/lit-shader-options.js +0 -8
- package/build/playcanvas.dbg/src/scene/shader-lib/programs/lit-shader.js +0 -2
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.js +4 -2
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.js +2 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.js +15 -2
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.js +3 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.js +33 -9
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.js +27 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js +9 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.js +19 -4
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.js +7 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.js +6 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.js +15 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.js +16 -5
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.js +4 -6
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +8 -0
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.js +4 -3
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.js +1 -1
- package/build/playcanvas.dbg/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.js +2 -0
- package/build/playcanvas.dbg.js +608 -145
- package/build/playcanvas.dbg.mjs +608 -145
- package/build/playcanvas.js +454 -127
- package/build/playcanvas.min.js +936 -789
- package/build/playcanvas.min.mjs +923 -776
- package/build/playcanvas.mjs +449 -127
- package/build/playcanvas.prf/src/core/core.js +2 -2
- package/build/playcanvas.prf/src/extras/input/controllers/orbit-controller.js +8 -2
- package/build/playcanvas.prf/src/framework/parsers/sog-bundle.js +20 -3
- package/build/playcanvas.prf/src/framework/parsers/sog.js +23 -7
- package/build/playcanvas.prf/src/scene/gsplat/gsplat-data.js +1 -0
- package/build/playcanvas.prf/src/scene/gsplat/gsplat-resource-base.js +3 -0
- package/build/playcanvas.prf/src/scene/gsplat/gsplat-resource.js +8 -1
- package/build/playcanvas.prf/src/scene/gsplat/gsplat-sog-blind.js +55 -0
- package/build/playcanvas.prf/src/scene/gsplat/gsplat-sog-data.js +58 -29
- package/build/playcanvas.prf/src/scene/gsplat/gsplat-sog-resource.js +29 -8
- package/build/playcanvas.prf/src/scene/gsplat-unified/gsplat-octree.resource.js +3 -0
- package/build/playcanvas.prf/src/scene/gsplat-unified/gsplat-params.js +4 -4
- package/build/playcanvas.prf/src/scene/gsplat-unified/gsplat-projector.js +1 -1
- package/build/playcanvas.prf/src/scene/materials/lit-material-options-builder.js +0 -2
- package/build/playcanvas.prf/src/scene/materials/lit-material.js +5 -0
- package/build/playcanvas.prf/src/scene/materials/material-property.js +4 -0
- package/build/playcanvas.prf/src/scene/materials/standard-material-options-builder.js +1 -3
- package/build/playcanvas.prf/src/scene/materials/standard-material.js +19 -4
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/frag/gsplat.js +10 -1
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sog.js +25 -5
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/formats/sogSH.js +5 -2
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplat.js +4 -1
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
- package/build/playcanvas.prf/src/scene/shader-lib/glsl/collections/gsplat-chunks-glsl.js +2 -0
- package/build/playcanvas.prf/src/scene/shader-lib/programs/lit-shader-options.js +0 -2
- package/build/playcanvas.prf/src/scene/shader-lib/programs/lit-shader.js +0 -2
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/compute-gsplat-projector.js +2 -2
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/frag/formats/containerCompactWrite.js +1 -1
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/frag/gsplat.js +11 -2
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/containerCompactRead.js +2 -1
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sog.js +28 -8
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlind.js +19 -0
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js +6 -0
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/formats/sogSH.js +18 -3
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplat.js +4 -1
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatCommon.js +5 -1
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHelpers.js +4 -0
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/gsplat/vert/gsplatHybrid.js +12 -5
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardBackend.js +2 -6
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardDeclaration.js +6 -0
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardMain.js +2 -2
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/lit/frag/pass-forward/litForwardPreCode.js +1 -1
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/chunks/particle/vert/particleAnimFrameClamp.js +1 -1
- package/build/playcanvas.prf/src/scene/shader-lib/wgsl/collections/gsplat-chunks-wgsl.js +2 -0
- package/build/playcanvas.prf.js +454 -127
- package/build/playcanvas.prf.mjs +449 -127
- package/package.json +1 -1
- package/scripts/esm/blurred-planar-reflection.mjs +10 -4
- package/scripts/esm/camera-controls.mjs +283 -13
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* view around the focus within {@link yawRange} and {@link pitchRange}, the first two `move`
|
|
4
4
|
* components pan the focus point, and the third scales the distance within {@link zoomRange}.
|
|
5
5
|
* Motion is smoothed with {@link rotateDamping}, {@link moveDamping} and {@link zoomDamping}.
|
|
6
|
+
* With {@link horizontalPan}, the pan moves the focus point across the ground instead of the
|
|
7
|
+
* plane of the view.
|
|
6
8
|
*
|
|
7
9
|
* @category Input
|
|
8
10
|
* @alpha
|
|
@@ -42,6 +44,13 @@ export class OrbitController extends InputController {
|
|
|
42
44
|
* The zoom damping. A higher value means more damping. A value of 0 means no damping.
|
|
43
45
|
*/
|
|
44
46
|
zoomDamping: number;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the pan moves the focus point across the horizontal plane, as when dragging a map,
|
|
49
|
+
* instead of across the plane of the view. The first two `move` components are then the
|
|
50
|
+
* distances to move the focus point to the right and forward, level with the ground, so the
|
|
51
|
+
* height of the focus point does not change. Default is false.
|
|
52
|
+
*/
|
|
53
|
+
horizontalPan: boolean;
|
|
45
54
|
set pitchRange(range: import("../../../index.js").Vec2);
|
|
46
55
|
get pitchRange(): import("../../../index.js").Vec2;
|
|
47
56
|
set yawRange(range: import("../../../index.js").Vec2);
|
|
@@ -15,6 +15,7 @@ class OrbitController extends InputController {
|
|
|
15
15
|
rotateDamping = 0.98;
|
|
16
16
|
moveDamping = 0.98;
|
|
17
17
|
zoomDamping = 0.98;
|
|
18
|
+
horizontalPan = false;
|
|
18
19
|
set pitchRange(range) {
|
|
19
20
|
this._targetRootPose.pitchRange.copy(range);
|
|
20
21
|
this._rootPose.copy(this._targetRootPose.rotate(Vec3.ZERO));
|
|
@@ -50,8 +51,13 @@ class OrbitController extends InputController {
|
|
|
50
51
|
}
|
|
51
52
|
update(frame, dt) {
|
|
52
53
|
const { move, rotate } = frame.read();
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
if (this.horizontalPan) {
|
|
55
|
+
offset.set(move[0], 0, -move[1]);
|
|
56
|
+
rotation.setFromEulerAngles(0, this._rootPose.angles.y, 0).transformVector(offset, offset);
|
|
57
|
+
} else {
|
|
58
|
+
offset.set(move[0], move[1], 0);
|
|
59
|
+
rotation.setFromEulerAngles(this._rootPose.angles).transformVector(offset, offset);
|
|
60
|
+
}
|
|
55
61
|
this._targetRootPose.move(offset);
|
|
56
62
|
const { z: dist } = this._targetChildPose.position;
|
|
57
63
|
this._targetChildPose.move(offset.set(0, 0, dist * (1 + move[2]) - dist));
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
* - [Billions of Splats](https://playcanvas.github.io/#/gaussian-splatting/billions)
|
|
30
30
|
* - [Downtown Streaming](https://playcanvas.github.io/#/gaussian-splatting/downtown)
|
|
31
31
|
* - [Global Sorting](https://playcanvas.github.io/#/gaussian-splatting/global-sorting)
|
|
32
|
-
* - [LOD Instances](https://playcanvas.github.io/#/gaussian-splatting/
|
|
32
|
+
* - [LOD Instances](https://playcanvas.github.io/#/gaussian-splatting/streamed-instances)
|
|
33
33
|
* - [Multi-Splat](https://playcanvas.github.io/#/gaussian-splatting/multi-splat)
|
|
34
34
|
* - [Multi-View](https://playcanvas.github.io/#/gaussian-splatting/multi-view)
|
|
35
35
|
* - [Picking](https://playcanvas.github.io/#/gaussian-splatting/picking)
|
|
36
|
-
* - [Reveal Effect](https://playcanvas.github.io/#/gaussian-splatting/reveal)
|
|
37
|
-
* - [Shader Effects](https://playcanvas.github.io/#/gaussian-splatting/shader-effects)
|
|
38
|
-
* - [Spherical Harmonics](https://playcanvas.github.io/#/gaussian-splatting/
|
|
36
|
+
* - [Reveal Effect](https://playcanvas.github.io/#/gaussian-splatting-fx/reveal)
|
|
37
|
+
* - [Shader Effects](https://playcanvas.github.io/#/gaussian-splatting-fx/shader-effects)
|
|
38
|
+
* - [Spherical Harmonics](https://playcanvas.github.io/#/gaussian-splatting/simple-sh)
|
|
39
39
|
* - [Streamed LCC2](https://playcanvas.github.io/#/gaussian-splatting/streamed-lcc2)
|
|
40
40
|
* - [Streamed SOG](https://playcanvas.github.io/#/gaussian-splatting/streamed-sog)
|
|
41
41
|
* - [Streamed SOG with Spherical Harmonics](https://playcanvas.github.io/#/gaussian-splatting/streamed-sog-sh)
|
|
@@ -39,11 +39,11 @@ export const _properties: string[];
|
|
|
39
39
|
*
|
|
40
40
|
* Relevant Engine API examples:
|
|
41
41
|
*
|
|
42
|
-
* - [Particle Animated Index](https://playcanvas.github.io/#/
|
|
43
|
-
* - [Particle Mesh](https://playcanvas.github.io/#/
|
|
44
|
-
* - [Particle Random Sprites](https://playcanvas.github.io/#/
|
|
45
|
-
* - [Particle Snow](https://playcanvas.github.io/#/
|
|
46
|
-
* - [Particle Spark](https://playcanvas.github.io/#/
|
|
42
|
+
* - [Particle Animated Index](https://playcanvas.github.io/#/particles/anim-index)
|
|
43
|
+
* - [Particle Mesh](https://playcanvas.github.io/#/particles/mesh)
|
|
44
|
+
* - [Particle Random Sprites](https://playcanvas.github.io/#/particles/random-sprites)
|
|
45
|
+
* - [Particle Snow](https://playcanvas.github.io/#/particles/snow)
|
|
46
|
+
* - [Particle Spark](https://playcanvas.github.io/#/particles/spark)
|
|
47
47
|
* - [Particles in a user interface](https://playcanvas.github.io/#/user-interface/particle-system)
|
|
48
48
|
*
|
|
49
49
|
* @hideconstructor
|
|
@@ -159,7 +159,14 @@ class SogBundleParser {
|
|
|
159
159
|
callback(`Error parsing meta.json: ${err}`);
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
|
-
|
|
162
|
+
if (meta.version !== void 0 && meta.version !== 2 && meta.version !== 3) {
|
|
163
|
+
callback(`Error loading gsplat: unsupported SOG version ${meta.version} in ${url.original}`);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const filenames = [
|
|
167
|
+
...["means", "scales", "quats", "sh0", "shN"].map((key) => meta[key]?.files ?? []).flat(),
|
|
168
|
+
...(meta.blind ?? []).map((t) => t.files[0])
|
|
169
|
+
];
|
|
163
170
|
const promises = [];
|
|
164
171
|
for (const filename of filenames) {
|
|
165
172
|
const file = files.find((f) => f.filename === filename);
|
|
@@ -194,7 +201,7 @@ class SogBundleParser {
|
|
|
194
201
|
promises.push(promise);
|
|
195
202
|
}
|
|
196
203
|
Object.values(textures).forEach((t) => this.app.assets.load(t));
|
|
197
|
-
await Promise.allSettled(promises);
|
|
204
|
+
const results = await Promise.allSettled(promises);
|
|
198
205
|
if (this._shouldAbort(asset, unloaded)) {
|
|
199
206
|
Object.values(textures).forEach((t) => {
|
|
200
207
|
assets.remove(t);
|
|
@@ -203,6 +210,15 @@ class SogBundleParser {
|
|
|
203
210
|
callback(null, null);
|
|
204
211
|
return;
|
|
205
212
|
}
|
|
213
|
+
const failed = results.findIndex((r) => r.status === "rejected");
|
|
214
|
+
if (failed !== -1) {
|
|
215
|
+
Object.values(textures).forEach((t) => {
|
|
216
|
+
assets.remove(t);
|
|
217
|
+
t.unload();
|
|
218
|
+
});
|
|
219
|
+
callback(`Error loading gsplat: failed to load ${filenames[failed]} in ${url.original}: ${results[failed].reason}`);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
206
222
|
Object.values(textures).forEach((t) => {
|
|
207
223
|
if (t.file) {
|
|
208
224
|
t.file.contents = null;
|
|
@@ -215,11 +231,12 @@ class SogBundleParser {
|
|
|
215
231
|
data.numSplats = meta.count;
|
|
216
232
|
data.means_l = textures[meta.means.files[0]].resource;
|
|
217
233
|
data.means_u = textures[meta.means.files[1]].resource;
|
|
218
|
-
data.quats = textures[meta.quats.files[0]].resource;
|
|
234
|
+
data.quats = meta.quats ? textures[meta.quats.files[0]].resource : null;
|
|
219
235
|
data.scales = textures[meta.scales.files[0]].resource;
|
|
220
236
|
data.sh0 = textures[meta.sh0.files[0]].resource;
|
|
221
237
|
data.sh_centroids = textures[meta.shN?.files[0]]?.resource;
|
|
222
238
|
data.sh_labels = textures[meta.shN?.files[1]]?.resource;
|
|
239
|
+
data.blind = (meta.blind ?? []).map((t) => textures[t.files[0]].resource);
|
|
223
240
|
data.shBands = GSplatSogData.calcBands(data.sh_centroids?.width);
|
|
224
241
|
if (!decompress) {
|
|
225
242
|
if (this._shouldAbort(asset, unloaded)) {
|
|
@@ -81,16 +81,19 @@ class SogParser {
|
|
|
81
81
|
}
|
|
82
82
|
async loadTextures(url, callback, asset, meta) {
|
|
83
83
|
const gsplatCentersEnabledAtLoad = this.app.scene?.gsplatCentersEnabled !== false;
|
|
84
|
-
if (meta.version
|
|
84
|
+
if (meta.version === void 0) {
|
|
85
85
|
meta = upgradeMeta(meta);
|
|
86
|
+
} else if (meta.version !== 2 && meta.version !== 3) {
|
|
87
|
+
callback(`Error loading gsplat: unsupported SOG version ${meta.version} in ${url.original}`);
|
|
88
|
+
return;
|
|
86
89
|
}
|
|
87
90
|
const { assets } = this.app;
|
|
88
|
-
const subs = ["means", "quats", "scales", "sh0", "shN"];
|
|
91
|
+
const subs = ["means", "quats", "scales", "sh0", "shN", "blind"];
|
|
89
92
|
const textures = {};
|
|
90
93
|
const promises = [];
|
|
91
94
|
const base = window.document?.baseURI ?? window.location.href;
|
|
92
95
|
subs.forEach((sub) => {
|
|
93
|
-
const files = meta[sub]?.files ?? [];
|
|
96
|
+
const files = sub === "blind" ? (meta.blind ?? []).map((t) => t.files[0]) : meta[sub]?.files ?? [];
|
|
94
97
|
textures[sub] = files.map((filename) => {
|
|
95
98
|
const texture = new Asset(filename, "texture", {
|
|
96
99
|
url: asset.options?.mapUrl?.(filename) ?? new URL(filename, new URL(url.load, base).toString()).toString(),
|
|
@@ -125,7 +128,7 @@ class SogParser {
|
|
|
125
128
|
});
|
|
126
129
|
combineProgress(asset, textureAssets);
|
|
127
130
|
textureAssets.forEach((t) => assets.load(t));
|
|
128
|
-
await Promise.allSettled(promises);
|
|
131
|
+
const results = await Promise.allSettled(promises);
|
|
129
132
|
if (this._shouldAbort(asset, unloaded)) {
|
|
130
133
|
textureAssets.forEach((t) => {
|
|
131
134
|
assets.remove(t);
|
|
@@ -134,17 +137,27 @@ class SogParser {
|
|
|
134
137
|
callback(null, null);
|
|
135
138
|
return;
|
|
136
139
|
}
|
|
140
|
+
const failed = results.findIndex((r) => r.status === "rejected");
|
|
141
|
+
if (failed !== -1) {
|
|
142
|
+
textureAssets.forEach((t) => {
|
|
143
|
+
assets.remove(t);
|
|
144
|
+
t.unload();
|
|
145
|
+
});
|
|
146
|
+
callback(`Error loading gsplat: failed to load ${textureAssets[failed].file.filename} in ${url.original}: ${results[failed].reason}`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
137
149
|
const data = new GSplatSogData();
|
|
138
150
|
data.url = url.original;
|
|
139
151
|
data.meta = meta;
|
|
140
152
|
data.numSplats = meta.count;
|
|
141
153
|
data.means_l = textures.means[0].resource;
|
|
142
154
|
data.means_u = textures.means[1].resource;
|
|
143
|
-
data.quats = textures.quats[0]
|
|
155
|
+
data.quats = textures.quats[0]?.resource ?? null;
|
|
144
156
|
data.scales = textures.scales[0].resource;
|
|
145
157
|
data.sh0 = textures.sh0[0].resource;
|
|
146
158
|
data.sh_centroids = textures.shN?.[0]?.resource;
|
|
147
159
|
data.sh_labels = textures.shN?.[1]?.resource;
|
|
160
|
+
data.blind = textures.blind.map((t) => t.resource);
|
|
148
161
|
data.shBands = GSplatSogData.calcBands(data.sh_centroids?.width);
|
|
149
162
|
const decompress = asset.data?.decompress;
|
|
150
163
|
if (!decompress) {
|
|
@@ -180,8 +193,11 @@ class SogParser {
|
|
|
180
193
|
callback(null, resource);
|
|
181
194
|
}
|
|
182
195
|
load(url, callback, asset) {
|
|
196
|
+
const loadTextures = (meta) => {
|
|
197
|
+
this.loadTextures(url, callback, asset, meta).catch((err) => callback(`Error loading gsplat: ${url.original} [${err}]`));
|
|
198
|
+
};
|
|
183
199
|
if (asset.data?.means) {
|
|
184
|
-
|
|
200
|
+
loadTextures(asset.data);
|
|
185
201
|
} else {
|
|
186
202
|
if (typeof url === "string") {
|
|
187
203
|
url = {
|
|
@@ -200,7 +216,7 @@ class SogParser {
|
|
|
200
216
|
return;
|
|
201
217
|
}
|
|
202
218
|
if (!err) {
|
|
203
|
-
|
|
219
|
+
loadTextures(meta);
|
|
204
220
|
} else {
|
|
205
221
|
callback(`Error loading gsplat meta: ${url.original} [${err}]`);
|
|
206
222
|
}
|
|
@@ -28,6 +28,13 @@ export class GSplatData {
|
|
|
28
28
|
* @type {boolean}
|
|
29
29
|
*/
|
|
30
30
|
activated: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Application-defined data stored with the splat file, as in glTF's `extras`: the `extras`
|
|
33
|
+
* value of a decompressed SOG's meta.json. Undefined when the source has none.
|
|
34
|
+
*
|
|
35
|
+
* @type {*}
|
|
36
|
+
*/
|
|
37
|
+
extras: any;
|
|
31
38
|
getProp(name: any, elementName?: string): import("../../framework/parsers/ply.js").DataType;
|
|
32
39
|
getElement(name: any): PlyElement;
|
|
33
40
|
addProp(name: any, storage: any): void;
|
|
@@ -171,6 +171,14 @@ export class GSplatResourceBase {
|
|
|
171
171
|
* @ignore
|
|
172
172
|
*/
|
|
173
173
|
get supportsWorkBufferGeometry(): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* Application-defined data stored with the splat file, as in glTF's `extras`: the `extras`
|
|
176
|
+
* value of a SOG's meta.json. The engine attaches no meaning to it. Undefined when the file
|
|
177
|
+
* has none, and for formats that cannot carry it.
|
|
178
|
+
*
|
|
179
|
+
* @type {*}
|
|
180
|
+
*/
|
|
181
|
+
get extras(): any;
|
|
174
182
|
/**
|
|
175
183
|
* Gets the number of splats in the resource.
|
|
176
184
|
*
|
|
@@ -77,6 +77,9 @@ class GSplatResourceBase {
|
|
|
77
77
|
get supportsWorkBufferGeometry() {
|
|
78
78
|
return false;
|
|
79
79
|
}
|
|
80
|
+
get extras() {
|
|
81
|
+
return void 0;
|
|
82
|
+
}
|
|
80
83
|
static createMesh(device) {
|
|
81
84
|
const splatInstanceSize = GSplatResourceBase.instanceSize;
|
|
82
85
|
const meshPositions = new Float32Array(12 * splatInstanceSize);
|
|
@@ -22,7 +22,8 @@ export class GSplatResource extends GSplatResourceBase {
|
|
|
22
22
|
/**
|
|
23
23
|
* Updates pixel data of splatColor texture based on the supplied color components and opacity.
|
|
24
24
|
* Assumes that the texture is using an RGBA format where RGB are color components influenced
|
|
25
|
-
* by SH spherical harmonics and A is opacity after a sigmoid transformation
|
|
25
|
+
* by SH spherical harmonics and A is opacity after a sigmoid transformation, plus the optional
|
|
26
|
+
* `opacity_excess` property: the opacity above 1 that merged (decimated) gaussians carry.
|
|
26
27
|
*
|
|
27
28
|
* @param {GSplatData} gsplatData - The source data
|
|
28
29
|
* @ignore
|
|
@@ -57,6 +57,9 @@ class GSplatResource extends GSplatResourceBase {
|
|
|
57
57
|
configureMaterialDefines(defines) {
|
|
58
58
|
defines.set("SH_BANDS", this.shBands);
|
|
59
59
|
}
|
|
60
|
+
get extras() {
|
|
61
|
+
return this.gsplatData.extras;
|
|
62
|
+
}
|
|
60
63
|
updateColorData(gsplatData) {
|
|
61
64
|
const texture = this.streams.getTexture("splatColor");
|
|
62
65
|
if (!texture) {
|
|
@@ -68,13 +71,17 @@ class GSplatResource extends GSplatResourceBase {
|
|
|
68
71
|
const cg = gsplatData.getProp("f_dc_1");
|
|
69
72
|
const cb = gsplatData.getProp("f_dc_2");
|
|
70
73
|
const ca = gsplatData.getProp("opacity");
|
|
74
|
+
const excess = gsplatData.getProp("opacity_excess");
|
|
71
75
|
const activated = gsplatData.activated;
|
|
72
76
|
const SH_C0 = 0.28209479177387814;
|
|
73
77
|
for (let i = 0; i < this.numSplats; ++i) {
|
|
74
78
|
const r = cr[i] * SH_C0 + 0.5;
|
|
75
79
|
const g = cg[i] * SH_C0 + 0.5;
|
|
76
80
|
const b = cb[i] * SH_C0 + 0.5;
|
|
77
|
-
|
|
81
|
+
let a = activated ? ca[i] : 1 / (1 + Math.exp(-ca[i]));
|
|
82
|
+
if (excess && excess[i] > 0) {
|
|
83
|
+
a = Math.min(a + excess[i], 1.5625);
|
|
84
|
+
}
|
|
78
85
|
data[i * 4 + 0] = float2Half(r);
|
|
79
86
|
data[i * 4 + 1] = float2Half(g);
|
|
80
87
|
data[i * 4 + 2] = float2Half(b);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type BlindField = {
|
|
2
|
+
/**
|
|
3
|
+
* - Index of the field's texture in `meta.blind`.
|
|
4
|
+
*/
|
|
5
|
+
texture: number;
|
|
6
|
+
/**
|
|
7
|
+
* - The field name.
|
|
8
|
+
*/
|
|
9
|
+
name: string;
|
|
10
|
+
/**
|
|
11
|
+
* - Shader identifier suffix derived from the name.
|
|
12
|
+
*/
|
|
13
|
+
id: string;
|
|
14
|
+
/**
|
|
15
|
+
* - The encoding.
|
|
16
|
+
*/
|
|
17
|
+
type: string;
|
|
18
|
+
/**
|
|
19
|
+
* - Index of the field's first byte in the texel (0 = R).
|
|
20
|
+
*/
|
|
21
|
+
offset: number;
|
|
22
|
+
/**
|
|
23
|
+
* - Number of bytes.
|
|
24
|
+
*/
|
|
25
|
+
bytes: number;
|
|
26
|
+
/**
|
|
27
|
+
* - Value of the smallest code (unorm encodings).
|
|
28
|
+
*/
|
|
29
|
+
min: number;
|
|
30
|
+
/**
|
|
31
|
+
* - Value of the largest code (unorm encodings).
|
|
32
|
+
*/
|
|
33
|
+
max: number;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Shader code for the blind field accessors, appended to the SOG read code: the
|
|
37
|
+
* `gsplatSogBlindVS` decoding helpers, then one accessor per field from the `sogBlindField`
|
|
38
|
+
* template. The textures are declared as streams `blind0`, `blind1`, ... whose generated
|
|
39
|
+
* `loadBlind<i>()` returns the RGBA8 texel as normalized floats.
|
|
40
|
+
*
|
|
41
|
+
* @param {BlindField[]} fields - The fields, from {@link parseBlindFields}.
|
|
42
|
+
* @param {boolean} wgsl - Generate WGSL (else GLSL).
|
|
43
|
+
* @returns {string} The accessor functions, empty when there are no fields.
|
|
44
|
+
*/
|
|
45
|
+
export function blindAccessors(fields: BlindField[], wgsl: boolean): string;
|
|
46
|
+
/**
|
|
47
|
+
* The fields of a SOG meta's blind textures, each with its texture index, byte offset and shader
|
|
48
|
+
* identifier. Fields are packed in order, so each starts where the previous field of its texture
|
|
49
|
+
* ended. The data is assumed valid, as the tools writing it check it; debug builds report
|
|
50
|
+
* problems.
|
|
51
|
+
*
|
|
52
|
+
* @param {object} meta - The SOG meta.json.
|
|
53
|
+
* @returns {BlindField[]} The fields.
|
|
54
|
+
*/
|
|
55
|
+
export function parseBlindFields(meta: object): BlindField[];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import glslBlindField from "../shader-lib/glsl/chunks/gsplat/vert/formats/sogBlindField.js";
|
|
2
|
+
import wgslBlindField from "../shader-lib/wgsl/chunks/gsplat/vert/formats/sogBlindField.js";
|
|
3
|
+
const BLIND_TYPE_BYTES = { u8: 1, u16: 2, u24: 3, u32: 4, f16: 2, f32: 4, unorm8: 1, unorm16: 2 };
|
|
4
|
+
const DEFAULT_RANGE = [0, 1];
|
|
5
|
+
const isIntegerType = (type) => type[0] === "u" && !type.startsWith("unorm");
|
|
6
|
+
const RE_ID = /\{id\}/g;
|
|
7
|
+
const RE_RETURN_TYPE = /\{returnType\}/g;
|
|
8
|
+
const RE_TEXTURE = /\{texture\}/g;
|
|
9
|
+
const RE_OFFSET = /\{offset\}/g;
|
|
10
|
+
const RE_BYTES = /\{bytes\}/g;
|
|
11
|
+
const RE_DECODE = /\{decode\}/g;
|
|
12
|
+
const blindFieldId = (name) => name.replace(/\W/g, "_").replace(/_+/g, "_").replace(/^_|_$/g, "");
|
|
13
|
+
const parseBlindFields = (meta) => {
|
|
14
|
+
const fields = [];
|
|
15
|
+
(meta.blind ?? []).forEach((texture, t) => {
|
|
16
|
+
let offset = 0;
|
|
17
|
+
for (const f of texture.fields) {
|
|
18
|
+
const bytes = BLIND_TYPE_BYTES[f.type];
|
|
19
|
+
const [min, max] = f.range ?? DEFAULT_RANGE;
|
|
20
|
+
fields.push({ texture: t, name: f.name, id: blindFieldId(f.name), type: f.type, offset, bytes, min, max });
|
|
21
|
+
offset += bytes;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return fields;
|
|
25
|
+
};
|
|
26
|
+
const floatLiteral = (v) => {
|
|
27
|
+
const s = String(v);
|
|
28
|
+
return /[.e]/i.test(s) ? s : `${s}.0`;
|
|
29
|
+
};
|
|
30
|
+
const blindAccessors = (fields, wgsl) => {
|
|
31
|
+
if (!fields.length) {
|
|
32
|
+
return "";
|
|
33
|
+
}
|
|
34
|
+
const template = wgsl ? wgslBlindField : glslBlindField;
|
|
35
|
+
const accessors = fields.map((f) => {
|
|
36
|
+
const integer = isIntegerType(f.type);
|
|
37
|
+
let decode = "bits";
|
|
38
|
+
if (f.type === "f16") {
|
|
39
|
+
decode = "sogBlindF16(bits)";
|
|
40
|
+
} else if (f.type === "f32") {
|
|
41
|
+
decode = "sogBlindF32(bits)";
|
|
42
|
+
} else if (!integer) {
|
|
43
|
+
const steps = f.type === "unorm8" ? "255.0" : "65535.0";
|
|
44
|
+
decode = `sogBlindUnorm(bits, ${steps}, ${floatLiteral(f.min)}, ${floatLiteral(f.max)})`;
|
|
45
|
+
}
|
|
46
|
+
return template.replace(RE_ID, f.id).replace(RE_RETURN_TYPE, integer ? wgsl ? "u32" : "uint" : wgsl ? "f32" : "float").replace(RE_TEXTURE, String(f.texture)).replace(RE_OFFSET, String(f.offset)).replace(RE_BYTES, String(f.bytes)).replace(RE_DECODE, decode);
|
|
47
|
+
});
|
|
48
|
+
return `
|
|
49
|
+
#include "gsplatSogBlindVS"
|
|
50
|
+
${accessors.join("")}`;
|
|
51
|
+
};
|
|
52
|
+
export {
|
|
53
|
+
blindAccessors,
|
|
54
|
+
parseBlindFields
|
|
55
|
+
};
|
|
@@ -10,7 +10,13 @@ export class GSplatSogData {
|
|
|
10
10
|
sh_centroids: any;
|
|
11
11
|
sh_labels: any;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* V3 per-gaussian blind data textures (RGBA8), one per `meta.blind` entry.
|
|
14
|
+
*
|
|
15
|
+
* @type {Texture[]}
|
|
16
|
+
*/
|
|
17
|
+
blind: Texture[];
|
|
18
|
+
/**
|
|
19
|
+
* V2/V3 codebook LUT (256x1 RGBA32F): .r = scales, .g = sh0, .b = shN, .a unused.
|
|
14
20
|
* Built from meta codebooks in prepareCodebook(). Null for V1 assets.
|
|
15
21
|
*
|
|
16
22
|
* @type {Texture|null}
|
|
@@ -49,8 +55,8 @@ export class GSplatSogData {
|
|
|
49
55
|
decompress(): Promise<GSplatData>;
|
|
50
56
|
generateCenters(): Promise<void>;
|
|
51
57
|
/**
|
|
52
|
-
* Creates the V2 codebook LUT texture. Packs the
|
|
53
|
-
*
|
|
58
|
+
* Creates the V2/V3 codebook LUT texture. Packs the 256-entry scalar codebooks into a
|
|
59
|
+
* single 256x1 RGBA32F texture:
|
|
54
60
|
* - .r = scales codebook
|
|
55
61
|
* - .g = sh0 codebook
|
|
56
62
|
* - .b = shN codebook
|