gaussian-splat-lite 1.2.2 → 1.3.1
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/CHANGELOG.md +61 -2
- package/CONTRIBUTING.md +4 -2
- package/README.md +4 -3
- package/dist/gaussian-splat-lite.cjs +6782 -1661
- package/dist/gaussian-splat-lite.cjs.map +1 -1
- package/dist/gaussian-splat-lite.min.cjs +991 -15
- package/dist/gaussian-splat-lite.min.cjs.map +1 -1
- package/dist/gaussian-splat-lite.module.js +6328 -1207
- package/dist/gaussian-splat-lite.module.js.map +1 -1
- package/dist/gaussian-splat-lite.module.min.js +8208 -3572
- package/dist/gaussian-splat-lite.module.min.js.map +1 -1
- package/dist/types/addons/NeuralDenoiseNode.d.cts +72 -0
- package/dist/types/addons/NeuralDenoiseNode.d.ts +72 -0
- package/dist/types/addons/NeuralDenoisePass.d.cts +34 -0
- package/dist/types/addons/NeuralDenoisePass.d.ts +34 -0
- package/dist/types/addons/TAANode.d.cts +46 -33
- package/dist/types/addons/TAANode.d.ts +46 -33
- package/dist/types/addons/TAAPass.d.cts +47 -32
- package/dist/types/addons/TAAPass.d.ts +47 -32
- package/dist/types/addons/neuralDenoiseGL.d.cts +25 -0
- package/dist/types/addons/neuralDenoiseGL.d.ts +25 -0
- package/dist/types/addons/neuralDenoiseGLSL.d.cts +8 -0
- package/dist/types/addons/neuralDenoiseGLSL.d.ts +8 -0
- package/dist/types/addons/neuralDenoisePasses.d.cts +26 -0
- package/dist/types/addons/neuralDenoisePasses.d.ts +26 -0
- package/dist/types/addons/neuralDenoiseShaders.d.cts +38 -0
- package/dist/types/addons/neuralDenoiseShaders.d.ts +38 -0
- package/dist/types/addons/neuralDenoiseWeights.d.cts +118 -0
- package/dist/types/addons/neuralDenoiseWeights.d.ts +118 -0
- package/dist/types/addons/stochasticCoverage.d.cts +14 -0
- package/dist/types/addons/stochasticCoverage.d.ts +14 -0
- package/dist/types/addons/taaShared.d.cts +58 -39
- package/dist/types/addons/taaShared.d.ts +58 -39
- package/dist/types/capture/SplatCapture.d.cts +54 -53
- package/dist/types/capture/SplatCapture.d.ts +54 -53
- package/dist/types/capture/WebGLCapture.d.cts +10 -10
- package/dist/types/capture/WebGLCapture.d.ts +10 -10
- package/dist/types/capture/WebGPUCapture.d.cts +14 -14
- package/dist/types/capture/WebGPUCapture.d.ts +14 -14
- package/dist/types/capture/pixels.d.cts +15 -4
- package/dist/types/capture/pixels.d.ts +15 -4
- package/dist/types/capture/rendererState.d.cts +5 -2
- package/dist/types/capture/rendererState.d.ts +5 -2
- package/dist/types/data/IndexedSplats.d.cts +83 -58
- package/dist/types/data/IndexedSplats.d.ts +83 -58
- package/dist/types/data/RadPagedSplats.d.cts +66 -61
- package/dist/types/data/RadPagedSplats.d.ts +66 -61
- package/dist/types/data/SogRegionSplats.d.cts +25 -19
- package/dist/types/data/SogRegionSplats.d.ts +25 -19
- package/dist/types/data/SplatOpacityTable.d.cts +36 -29
- package/dist/types/data/SplatOpacityTable.d.ts +36 -29
- package/dist/types/data/Splats.d.cts +99 -69
- package/dist/types/data/Splats.d.ts +99 -69
- package/dist/types/data/defines.d.cts +24 -24
- package/dist/types/data/defines.d.ts +24 -24
- package/dist/types/data/raycast.d.cts +13 -9
- package/dist/types/data/raycast.d.ts +13 -9
- package/dist/types/data/splatCodec.d.cts +29 -5
- package/dist/types/data/splatCodec.d.ts +29 -5
- package/dist/types/data/splatData.d.cts +18 -11
- package/dist/types/data/splatData.d.ts +18 -11
- package/dist/types/data/splatRange.d.cts +6 -2
- package/dist/types/data/splatRange.d.ts +6 -2
- package/dist/types/data/textureLayout.d.cts +9 -6
- package/dist/types/data/textureLayout.d.ts +9 -6
- package/dist/types/data/unpack.d.cts +16 -9
- package/dist/types/data/unpack.d.ts +16 -9
- package/dist/types/index.d.cts +65 -19
- package/dist/types/index.d.ts +65 -19
- package/dist/types/loaders/SplatLoader.d.cts +27 -14
- package/dist/types/loaders/SplatLoader.d.ts +27 -14
- package/dist/types/loaders/loadSplatData.d.cts +35 -17
- package/dist/types/loaders/loadSplatData.d.ts +35 -17
- package/dist/types/loaders/loadTypes.d.cts +46 -40
- package/dist/types/loaders/loadTypes.d.ts +46 -40
- package/dist/types/loaders/morton.d.cts +9 -3
- package/dist/types/loaders/morton.d.ts +9 -3
- package/dist/types/loaders/postDecode/builder.d.cts +222 -127
- package/dist/types/loaders/postDecode/builder.d.ts +222 -127
- package/dist/types/loaders/postDecode/compiler.d.cts +25 -11
- package/dist/types/loaders/postDecode/compiler.d.ts +25 -11
- package/dist/types/loaders/postDecode/operations.d.cts +22 -3
- package/dist/types/loaders/postDecode/operations.d.ts +22 -3
- package/dist/types/loaders/postDecode/optimizer.d.cts +5 -2
- package/dist/types/loaders/postDecode/optimizer.d.ts +5 -2
- package/dist/types/loaders/postDecode/program.d.cts +13 -6
- package/dist/types/loaders/postDecode/program.d.ts +13 -6
- package/dist/types/loaders/postDecode/protocol.d.cts +136 -111
- package/dist/types/loaders/postDecode/protocol.d.ts +136 -111
- package/dist/types/loaders/postDecode/registers.d.cts +12 -7
- package/dist/types/loaders/postDecode/registers.d.ts +12 -7
- package/dist/types/loaders/postDecode/runtime.d.cts +9 -2
- package/dist/types/loaders/postDecode/runtime.d.ts +9 -2
- package/dist/types/loaders/rad/RadSource.d.cts +81 -66
- package/dist/types/loaders/rad/RadSource.d.ts +81 -66
- package/dist/types/loaders/rad/radFormat.d.cts +41 -36
- package/dist/types/loaders/rad/radFormat.d.ts +41 -36
- package/dist/types/loaders/rad.d.cts +4 -4
- package/dist/types/loaders/rad.d.ts +4 -4
- package/dist/types/loaders/sog/SogSource.d.cts +14 -4
- package/dist/types/loaders/sog/SogSource.d.ts +14 -4
- package/dist/types/loaders/sog/sogZip.d.cts +12 -12
- package/dist/types/loaders/sog/sogZip.d.ts +12 -12
- package/dist/types/loaders/sog.d.cts +3 -3
- package/dist/types/loaders/sog.d.ts +3 -3
- package/dist/types/loaders/source.d.cts +43 -15
- package/dist/types/loaders/source.d.ts +43 -15
- package/dist/types/loaders/stream/StreamCameras.d.cts +27 -18
- package/dist/types/loaders/stream/StreamCameras.d.ts +27 -18
- package/dist/types/loaders/stream/StreamWorkerPool.d.cts +37 -37
- package/dist/types/loaders/stream/StreamWorkerPool.d.ts +37 -37
- package/dist/types/loaders/stream/rad-stream/RadSelectionState.d.cts +20 -13
- package/dist/types/loaders/stream/rad-stream/RadSelectionState.d.ts +20 -13
- package/dist/types/loaders/stream/rad-stream/RadStreamBatch.d.cts +13 -9
- package/dist/types/loaders/stream/rad-stream/RadStreamBatch.d.ts +13 -9
- package/dist/types/loaders/stream/rad-stream/RadStreamLoader.d.cts +69 -51
- package/dist/types/loaders/stream/rad-stream/RadStreamLoader.d.ts +69 -51
- package/dist/types/loaders/stream/rad-stream/RadStreamScheduler.d.cts +126 -102
- package/dist/types/loaders/stream/rad-stream/RadStreamScheduler.d.ts +126 -102
- package/dist/types/loaders/stream/rad-stream/RadStreamWorker.d.cts +4 -4
- package/dist/types/loaders/stream/rad-stream/RadStreamWorker.d.ts +4 -4
- package/dist/types/loaders/stream/rad-stream/prepareRadSelection.d.cts +20 -17
- package/dist/types/loaders/stream/rad-stream/prepareRadSelection.d.ts +20 -17
- package/dist/types/loaders/stream/rad-stream/radFade.d.cts +13 -8
- package/dist/types/loaders/stream/rad-stream/radFade.d.ts +13 -8
- package/dist/types/loaders/stream/rad-stream/radLod.d.cts +29 -27
- package/dist/types/loaders/stream/rad-stream/radLod.d.ts +29 -27
- package/dist/types/loaders/stream/rad-stream/worker.d.cts +3 -59
- package/dist/types/loaders/stream/rad-stream/worker.d.ts +3 -59
- package/dist/types/loaders/stream/rad-stream/workerHandlers.d.cts +58 -61
- package/dist/types/loaders/stream/rad-stream/workerHandlers.d.ts +58 -61
- package/dist/types/loaders/stream/sog-stream/SogStreamBatch.d.cts +16 -12
- package/dist/types/loaders/stream/sog-stream/SogStreamBatch.d.ts +16 -12
- package/dist/types/loaders/stream/sog-stream/SogStreamLoader.d.cts +56 -41
- package/dist/types/loaders/stream/sog-stream/SogStreamLoader.d.ts +56 -41
- package/dist/types/loaders/stream/sog-stream/SogStreamScheduler.d.cts +102 -81
- package/dist/types/loaders/stream/sog-stream/SogStreamScheduler.d.ts +102 -81
- package/dist/types/loaders/stream/sog-stream/SogStreamWorker.d.cts +3 -3
- package/dist/types/loaders/stream/sog-stream/SogStreamWorker.d.ts +3 -3
- package/dist/types/loaders/stream/sog-stream/sogLod.d.cts +67 -46
- package/dist/types/loaders/stream/sog-stream/sogLod.d.ts +67 -46
- package/dist/types/loaders/stream/sog-stream/sogVisibility.d.cts +28 -22
- package/dist/types/loaders/stream/sog-stream/sogVisibility.d.ts +28 -22
- package/dist/types/loaders/stream/sog-stream/worker.d.cts +7 -40
- package/dist/types/loaders/stream/sog-stream/worker.d.ts +7 -40
- package/dist/types/loaders/stream/sog-stream/workerHandlers.d.cts +63 -44
- package/dist/types/loaders/stream/sog-stream/workerHandlers.d.ts +63 -44
- package/dist/types/loaders/stream/streamOptions.d.cts +43 -33
- package/dist/types/loaders/stream/streamOptions.d.ts +43 -33
- package/dist/types/loaders/workerDecode.d.cts +30 -12
- package/dist/types/loaders/workerDecode.d.ts +30 -12
- package/dist/types/patches/threeR186.d.cts +3 -0
- package/dist/types/patches/threeR186.d.ts +3 -0
- package/dist/types/rendering/GaussianSplatRenderer.d.cts +393 -376
- package/dist/types/rendering/GaussianSplatRenderer.d.ts +393 -376
- package/dist/types/rendering/MaterialState.d.cts +9 -0
- package/dist/types/rendering/MaterialState.d.ts +9 -0
- package/dist/types/rendering/SortCenterCache.d.cts +17 -17
- package/dist/types/rendering/SortCenterCache.d.ts +17 -17
- package/dist/types/rendering/SplatAccumulator.d.cts +93 -77
- package/dist/types/rendering/SplatAccumulator.d.ts +93 -77
- package/dist/types/rendering/SplatGeometry.d.cts +2 -2
- package/dist/types/rendering/SplatGeometry.d.ts +2 -2
- package/dist/types/rendering/StochasticSplatMaterial.d.cts +14 -0
- package/dist/types/rendering/StochasticSplatMaterial.d.ts +14 -0
- package/dist/types/rendering/backend.d.cts +30 -18
- package/dist/types/rendering/backend.d.ts +30 -18
- package/dist/types/rendering/blueNoise.d.cts +1 -1
- package/dist/types/rendering/blueNoise.d.ts +1 -1
- package/dist/types/rendering/rendererUtils.d.cts +25 -10
- package/dist/types/rendering/rendererUtils.d.ts +25 -10
- package/dist/types/rendering/tsl/GenerateProgram.d.cts +19 -17
- package/dist/types/rendering/tsl/GenerateProgram.d.ts +19 -17
- package/dist/types/rendering/tsl/ProjectionProgram.d.cts +38 -33
- package/dist/types/rendering/tsl/ProjectionProgram.d.ts +38 -33
- package/dist/types/rendering/tsl/SplatBackend.d.cts +22 -10
- package/dist/types/rendering/tsl/SplatBackend.d.ts +22 -10
- package/dist/types/rendering/tsl/SplatMaterial.d.cts +38 -25
- package/dist/types/rendering/tsl/SplatMaterial.d.ts +38 -25
- package/dist/types/rendering/tsl/shaderUtils.d.cts +55 -17
- package/dist/types/rendering/tsl/shaderUtils.d.ts +55 -17
- package/dist/types/rendering/tsl/stochasticCoverage.d.cts +7 -0
- package/dist/types/rendering/tsl/stochasticCoverage.d.ts +7 -0
- package/dist/types/rendering/tsl/viewUniforms.d.cts +19 -9
- package/dist/types/rendering/tsl/viewUniforms.d.ts +19 -9
- package/dist/types/rendering/uniforms.d.cts +83 -83
- package/dist/types/rendering/uniforms.d.ts +83 -83
- package/dist/types/rendering/webgl/AccumulatorGenerator.d.cts +28 -12
- package/dist/types/rendering/webgl/AccumulatorGenerator.d.ts +28 -12
- package/dist/types/rendering/webgl/OrderingTexture.d.cts +10 -7
- package/dist/types/rendering/webgl/OrderingTexture.d.ts +10 -7
- package/dist/types/rendering/webgl/SplatBackend.d.cts +20 -15
- package/dist/types/rendering/webgl/SplatBackend.d.ts +20 -15
- package/dist/types/rendering/webgl/SplatMaterial.d.cts +9 -4
- package/dist/types/rendering/webgl/SplatMaterial.d.ts +9 -4
- package/dist/types/rendering/webgl/textureUtils.d.cts +10 -3
- package/dist/types/rendering/webgl/textureUtils.d.ts +10 -3
- package/dist/types/rendering/webgl-fallback/AccumulatorGenerator.d.cts +8 -10
- package/dist/types/rendering/webgl-fallback/AccumulatorGenerator.d.ts +8 -10
- package/dist/types/rendering/webgl-fallback/SplatBackend.d.cts +18 -14
- package/dist/types/rendering/webgl-fallback/SplatBackend.d.ts +18 -14
- package/dist/types/rendering/webgpu/ProjectedSplats.d.cts +76 -66
- package/dist/types/rendering/webgpu/ProjectedSplats.d.ts +76 -66
- package/dist/types/rendering/webgpu/ProjectionCache.d.cts +43 -28
- package/dist/types/rendering/webgpu/ProjectionCache.d.ts +43 -28
- package/dist/types/rendering/webgpu/ProjectionKernel.d.cts +22 -0
- package/dist/types/rendering/webgpu/ProjectionKernel.d.ts +22 -0
- package/dist/types/rendering/webgpu/RadixSort.d.cts +44 -40
- package/dist/types/rendering/webgpu/RadixSort.d.ts +44 -40
- package/dist/types/rendering/webgpu/SplatBackend.d.cts +14 -12
- package/dist/types/rendering/webgpu/SplatBackend.d.ts +14 -12
- package/dist/types/runtime/SplatWorker.d.cts +17 -13
- package/dist/types/runtime/SplatWorker.d.ts +17 -13
- package/dist/types/runtime/WorkerRpc.d.cts +26 -20
- package/dist/types/runtime/WorkerRpc.d.ts +26 -20
- package/dist/types/runtime/abort.d.cts +10 -5
- package/dist/types/runtime/abort.d.ts +10 -5
- package/dist/types/runtime/retry.d.cts +6 -6
- package/dist/types/runtime/retry.d.ts +6 -6
- package/dist/types/runtime/wasmCall.d.cts +3 -3
- package/dist/types/runtime/wasmCall.d.ts +3 -3
- package/dist/types/runtime/worker.d.cts +44 -24
- package/dist/types/runtime/worker.d.ts +44 -24
- package/dist/types/runtime/workerServer.d.cts +3 -1
- package/dist/types/runtime/workerServer.d.ts +3 -1
- package/dist/types/scene/SplatEdit.d.cts +74 -67
- package/dist/types/scene/SplatEdit.d.ts +74 -67
- package/dist/types/scene/SplatMesh.d.cts +92 -70
- package/dist/types/scene/SplatMesh.d.ts +92 -70
- package/dist/types/utils/index.d.cts +15 -7
- package/dist/types/utils/index.d.ts +15 -7
- package/dist/types/utils/three.d.cts +3 -3
- package/dist/types/utils/three.d.ts +3 -3
- package/dist/types/utils/transforms.d.cts +10 -3
- package/dist/types/utils/transforms.d.ts +10 -3
- package/docs/GaussianSplatRenderer.md +3 -1
- package/docs/NeuralDenoiseNode.md +148 -0
- package/docs/RadStreamScheduler.md +14 -5
- package/docs/SogStreamScheduler.md +8 -6
- package/docs/SplatMesh.md +1 -1
- package/docs/StochasticRendering.md +36 -10
- package/docs/TAAPass.md +20 -3
- package/package.json +9 -11
- package/dist/types/capture/sceneView.d.cts +0 -3
- package/dist/types/capture/sceneView.d.ts +0 -3
- package/dist/types/loaders/stream/StreamByteBudget.d.cts +0 -7
- package/dist/types/loaders/stream/StreamByteBudget.d.ts +0 -7
- package/dist/types/rendering/tsl/tslCompat.d.cts +0 -68
- package/dist/types/rendering/tsl/tslCompat.d.ts +0 -68
- package/docs/Architecture.md +0 -200
|
@@ -1,86 +1,107 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
1
|
+
import type * as THREE from "three";
|
|
2
|
+
import type { StreamSchedulerOptions, StreamStats } from "../streamOptions.cjs";
|
|
3
|
+
import type { SogStreamLoaderOptions } from "./SogStreamLoader.cjs";
|
|
4
|
+
import type { SogBudgetMode } from "./sogLod.cjs";
|
|
5
|
+
export type SogStreamSchedulerOptions = SogStreamLoaderOptions &
|
|
6
|
+
StreamSchedulerOptions & {
|
|
7
|
+
/** Defaults to "target". "limit" caps detail at the configured distance bands. */
|
|
8
|
+
splatBudgetMode?: SogBudgetMode;
|
|
9
|
+
/** Base LOD distance in world units for "limit" mode; defaults to 100. Must be finite and positive. */
|
|
10
|
+
lodBaseDistance?: number;
|
|
11
|
+
/** Distance multiplier between LOD levels in both modes; defaults to 2. Must be finite and at least 1. */
|
|
12
|
+
lodMultiplier?: number;
|
|
13
|
+
};
|
|
5
14
|
export type SogStreamStats = StreamStats & {
|
|
6
|
-
|
|
15
|
+
visibleRegions: number;
|
|
7
16
|
};
|
|
8
17
|
/** Camera-driven Streamed SOG loading with per-chunk sources and region fades. */
|
|
9
18
|
export declare class SogStreamScheduler {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
19
|
+
readonly group: THREE.Group;
|
|
20
|
+
readonly initialized: Promise<this>;
|
|
21
|
+
readonly firstRenderable: Promise<this>;
|
|
22
|
+
readonly cooldownMs: number;
|
|
23
|
+
readonly fadeDurationMs: number;
|
|
24
|
+
readonly maxConcurrentLoads: number;
|
|
25
|
+
private _splatBudget;
|
|
26
|
+
private _splatBudgetMode;
|
|
27
|
+
private _lodBaseDistance;
|
|
28
|
+
private _lodMultiplier;
|
|
29
|
+
private readonly options;
|
|
30
|
+
private readonly loader;
|
|
31
|
+
private readonly abort;
|
|
32
|
+
private readonly streamCameras;
|
|
33
|
+
private manifest?;
|
|
34
|
+
private readonly lodLeaves;
|
|
35
|
+
private view?;
|
|
36
|
+
private lastRequestedKey;
|
|
37
|
+
private selecting;
|
|
38
|
+
private selection;
|
|
39
|
+
private chunks;
|
|
40
|
+
/** Chunks with a batch, cached source or in-flight load. */
|
|
41
|
+
private readonly activeChunks;
|
|
42
|
+
private environment?;
|
|
43
|
+
private leaves;
|
|
44
|
+
private wanted;
|
|
45
|
+
private readonly fades;
|
|
46
|
+
private shown;
|
|
47
|
+
private disposed;
|
|
48
|
+
private resolveFirst;
|
|
49
|
+
private rejectFirst;
|
|
50
|
+
constructor(options: SogStreamSchedulerOptions);
|
|
51
|
+
/** Visible-point budget, including the environment. Reassign to reselect LODs. */
|
|
52
|
+
get splatBudget(): number;
|
|
53
|
+
set splatBudget(value: number);
|
|
54
|
+
/** Fill the budget, or limit detail to the configured distance bands. */
|
|
55
|
+
get splatBudgetMode(): SogBudgetMode;
|
|
56
|
+
set splatBudgetMode(value: SogBudgetMode);
|
|
57
|
+
/** Base LOD distance in world units for limit mode. Higher retains more detail. */
|
|
58
|
+
get lodBaseDistance(): number;
|
|
59
|
+
set lodBaseDistance(value: number);
|
|
60
|
+
/** Distance multiplier between LOD levels; affects both budget modes. */
|
|
61
|
+
get lodMultiplier(): number;
|
|
62
|
+
set lodMultiplier(value: number);
|
|
63
|
+
get stats(): SogStreamStats;
|
|
64
|
+
/** Group-local bounds from the index; available after initialized resolves. */
|
|
65
|
+
getBoundingBox(): THREE.Box3;
|
|
66
|
+
private initialize;
|
|
67
|
+
/** Cameras that select detail, in registration order. */
|
|
68
|
+
get cameras(): readonly THREE.Camera[];
|
|
69
|
+
hasCamera(camera: THREE.Camera): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Select detail for this camera on each update. Detail follows distance,
|
|
72
|
+
* so it needs no resolution. For WebXR register renderer.xr.getCamera(): it
|
|
73
|
+
* selects the greatest detail needed by any eye that sees the region. Returns whether the camera was
|
|
74
|
+
* newly added.
|
|
75
|
+
*/
|
|
76
|
+
setCamera(camera: THREE.Camera): boolean;
|
|
77
|
+
/** Stop selecting detail for this camera. Returns whether it was registered. */
|
|
78
|
+
deleteCamera(camera: THREE.Camera): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Call before rendering. Returns whether the displayed data changed. Each
|
|
81
|
+
* leaf uses the distance of the nearest registered camera that sees it.
|
|
82
|
+
*/
|
|
83
|
+
update(): boolean;
|
|
84
|
+
private requestSelection;
|
|
85
|
+
private updateRequests;
|
|
86
|
+
private selectRegions;
|
|
87
|
+
private leafState;
|
|
88
|
+
private chunkFor;
|
|
89
|
+
private applySelection;
|
|
90
|
+
private updateRegionVisibility;
|
|
91
|
+
private attachPendingRegions;
|
|
92
|
+
private queueExtractions;
|
|
93
|
+
private addBatchRange;
|
|
94
|
+
private fadeRegion;
|
|
95
|
+
private updateFades;
|
|
96
|
+
private extract;
|
|
97
|
+
private releaseUnused;
|
|
98
|
+
private pump;
|
|
99
|
+
private load;
|
|
100
|
+
private pruneChunk;
|
|
101
|
+
private releaseRegion;
|
|
102
|
+
private changed;
|
|
103
|
+
private failed;
|
|
104
|
+
private readonly retryTimer;
|
|
105
|
+
private rejectFirstIfUnavailable;
|
|
106
|
+
dispose(): void;
|
|
86
107
|
}
|
|
@@ -1,86 +1,107 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
1
|
+
import type * as THREE from "three";
|
|
2
|
+
import type { StreamSchedulerOptions, StreamStats } from "../streamOptions.js";
|
|
3
|
+
import type { SogStreamLoaderOptions } from "./SogStreamLoader.js";
|
|
4
|
+
import type { SogBudgetMode } from "./sogLod.js";
|
|
5
|
+
export type SogStreamSchedulerOptions = SogStreamLoaderOptions &
|
|
6
|
+
StreamSchedulerOptions & {
|
|
7
|
+
/** Defaults to "target". "limit" caps detail at the configured distance bands. */
|
|
8
|
+
splatBudgetMode?: SogBudgetMode;
|
|
9
|
+
/** Base LOD distance in world units for "limit" mode; defaults to 100. Must be finite and positive. */
|
|
10
|
+
lodBaseDistance?: number;
|
|
11
|
+
/** Distance multiplier between LOD levels in both modes; defaults to 2. Must be finite and at least 1. */
|
|
12
|
+
lodMultiplier?: number;
|
|
13
|
+
};
|
|
5
14
|
export type SogStreamStats = StreamStats & {
|
|
6
|
-
|
|
15
|
+
visibleRegions: number;
|
|
7
16
|
};
|
|
8
17
|
/** Camera-driven Streamed SOG loading with per-chunk sources and region fades. */
|
|
9
18
|
export declare class SogStreamScheduler {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
19
|
+
readonly group: THREE.Group;
|
|
20
|
+
readonly initialized: Promise<this>;
|
|
21
|
+
readonly firstRenderable: Promise<this>;
|
|
22
|
+
readonly cooldownMs: number;
|
|
23
|
+
readonly fadeDurationMs: number;
|
|
24
|
+
readonly maxConcurrentLoads: number;
|
|
25
|
+
private _splatBudget;
|
|
26
|
+
private _splatBudgetMode;
|
|
27
|
+
private _lodBaseDistance;
|
|
28
|
+
private _lodMultiplier;
|
|
29
|
+
private readonly options;
|
|
30
|
+
private readonly loader;
|
|
31
|
+
private readonly abort;
|
|
32
|
+
private readonly streamCameras;
|
|
33
|
+
private manifest?;
|
|
34
|
+
private readonly lodLeaves;
|
|
35
|
+
private view?;
|
|
36
|
+
private lastRequestedKey;
|
|
37
|
+
private selecting;
|
|
38
|
+
private selection;
|
|
39
|
+
private chunks;
|
|
40
|
+
/** Chunks with a batch, cached source or in-flight load. */
|
|
41
|
+
private readonly activeChunks;
|
|
42
|
+
private environment?;
|
|
43
|
+
private leaves;
|
|
44
|
+
private wanted;
|
|
45
|
+
private readonly fades;
|
|
46
|
+
private shown;
|
|
47
|
+
private disposed;
|
|
48
|
+
private resolveFirst;
|
|
49
|
+
private rejectFirst;
|
|
50
|
+
constructor(options: SogStreamSchedulerOptions);
|
|
51
|
+
/** Visible-point budget, including the environment. Reassign to reselect LODs. */
|
|
52
|
+
get splatBudget(): number;
|
|
53
|
+
set splatBudget(value: number);
|
|
54
|
+
/** Fill the budget, or limit detail to the configured distance bands. */
|
|
55
|
+
get splatBudgetMode(): SogBudgetMode;
|
|
56
|
+
set splatBudgetMode(value: SogBudgetMode);
|
|
57
|
+
/** Base LOD distance in world units for limit mode. Higher retains more detail. */
|
|
58
|
+
get lodBaseDistance(): number;
|
|
59
|
+
set lodBaseDistance(value: number);
|
|
60
|
+
/** Distance multiplier between LOD levels; affects both budget modes. */
|
|
61
|
+
get lodMultiplier(): number;
|
|
62
|
+
set lodMultiplier(value: number);
|
|
63
|
+
get stats(): SogStreamStats;
|
|
64
|
+
/** Group-local bounds from the index; available after initialized resolves. */
|
|
65
|
+
getBoundingBox(): THREE.Box3;
|
|
66
|
+
private initialize;
|
|
67
|
+
/** Cameras that select detail, in registration order. */
|
|
68
|
+
get cameras(): readonly THREE.Camera[];
|
|
69
|
+
hasCamera(camera: THREE.Camera): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Select detail for this camera on each update. Detail follows distance,
|
|
72
|
+
* so it needs no resolution. For WebXR register renderer.xr.getCamera(): it
|
|
73
|
+
* selects the greatest detail needed by any eye that sees the region. Returns whether the camera was
|
|
74
|
+
* newly added.
|
|
75
|
+
*/
|
|
76
|
+
setCamera(camera: THREE.Camera): boolean;
|
|
77
|
+
/** Stop selecting detail for this camera. Returns whether it was registered. */
|
|
78
|
+
deleteCamera(camera: THREE.Camera): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Call before rendering. Returns whether the displayed data changed. Each
|
|
81
|
+
* leaf uses the distance of the nearest registered camera that sees it.
|
|
82
|
+
*/
|
|
83
|
+
update(): boolean;
|
|
84
|
+
private requestSelection;
|
|
85
|
+
private updateRequests;
|
|
86
|
+
private selectRegions;
|
|
87
|
+
private leafState;
|
|
88
|
+
private chunkFor;
|
|
89
|
+
private applySelection;
|
|
90
|
+
private updateRegionVisibility;
|
|
91
|
+
private attachPendingRegions;
|
|
92
|
+
private queueExtractions;
|
|
93
|
+
private addBatchRange;
|
|
94
|
+
private fadeRegion;
|
|
95
|
+
private updateFades;
|
|
96
|
+
private extract;
|
|
97
|
+
private releaseUnused;
|
|
98
|
+
private pump;
|
|
99
|
+
private load;
|
|
100
|
+
private pruneChunk;
|
|
101
|
+
private releaseRegion;
|
|
102
|
+
private changed;
|
|
103
|
+
private failed;
|
|
104
|
+
private readonly retryTimer;
|
|
105
|
+
private rejectFirstIfUnavailable;
|
|
106
|
+
dispose(): void;
|
|
86
107
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WorkerRpc } from
|
|
2
|
-
import { SogStreamRpcHandlers } from
|
|
1
|
+
import { WorkerRpc } from "../../../runtime/WorkerRpc.cjs";
|
|
2
|
+
import type { SogStreamRpcHandlers } from "./worker.cjs";
|
|
3
3
|
/** Worker assigned either LOD traversal or retained chunk decoding. */
|
|
4
4
|
export declare class SogStreamWorker extends WorkerRpc<SogStreamRpcHandlers> {
|
|
5
|
-
|
|
5
|
+
constructor(onDispose?: () => void);
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WorkerRpc } from
|
|
2
|
-
import { SogStreamRpcHandlers } from
|
|
1
|
+
import { WorkerRpc } from "../../../runtime/WorkerRpc.js";
|
|
2
|
+
import type { SogStreamRpcHandlers } from "./worker.js";
|
|
3
3
|
/** Worker assigned either LOD traversal or retained chunk decoding. */
|
|
4
4
|
export declare class SogStreamWorker extends WorkerRpc<SogStreamRpcHandlers> {
|
|
5
|
-
|
|
5
|
+
constructor(onDispose?: () => void);
|
|
6
6
|
}
|
|
@@ -1,70 +1,91 @@
|
|
|
1
|
-
import { Box3 } from
|
|
1
|
+
import type { Box3 } from "three";
|
|
2
2
|
export type SogLodRange = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
leaf: number;
|
|
4
|
+
level: number;
|
|
5
|
+
/** -1 for an empty LOD, which has no backing file. */
|
|
6
|
+
file: number;
|
|
7
|
+
offset: number;
|
|
8
|
+
count: number;
|
|
9
9
|
};
|
|
10
10
|
export type SogLodLeaf = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
id: number;
|
|
12
|
+
/** Coarse to fine, with strictly decreasing levels. */
|
|
13
|
+
lods: SogLodRange[];
|
|
14
14
|
};
|
|
15
15
|
export type SogLodNode = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
bound: Box3;
|
|
17
|
+
children?: SogLodNode[];
|
|
18
|
+
leaf?: SogLodLeaf;
|
|
19
19
|
};
|
|
20
20
|
export type SogLodFile = {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
url: string;
|
|
22
|
+
count: number;
|
|
23
|
+
ranges: SogLodRange[];
|
|
24
24
|
};
|
|
25
25
|
export type SogLodManifest = {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
environment?: string;
|
|
26
|
+
tree: SogLodNode;
|
|
27
|
+
leaves: SogLodLeaf[];
|
|
28
|
+
lodLevels: number;
|
|
29
|
+
files: SogLodFile[];
|
|
30
|
+
environment?: string;
|
|
32
31
|
};
|
|
33
32
|
export declare const SOG_LOD_STRIDE = 4;
|
|
34
33
|
/** Packed worker index. Float64 preserves source bounds and safe-integer counts. */
|
|
35
34
|
export type SogLodIndex = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
environment?: string;
|
|
35
|
+
/** Preorder nodes: min XYZ, max XYZ, next index after the subtree, leaf ID (-1 for interiors). */
|
|
36
|
+
nodes: Float64Array;
|
|
37
|
+
leafOffsets: Uint32Array;
|
|
38
|
+
/** Per level: level, file, offset, count. */
|
|
39
|
+
lods: Float64Array;
|
|
40
|
+
lodLevels: number;
|
|
41
|
+
urls: string[];
|
|
42
|
+
counts: Float64Array;
|
|
43
|
+
environment?: string;
|
|
46
44
|
};
|
|
47
45
|
/** Scheduler metadata; the complete spatial tree stays in the LOD worker. */
|
|
48
|
-
export type SogLodMetadata = Omit<SogLodIndex, "nodes" | "
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
export type SogLodMetadata = Omit<SogLodIndex, "nodes" | "lodLevels"> & {
|
|
47
|
+
/** Root min XYZ and max XYZ. */
|
|
48
|
+
bounds: Float64Array;
|
|
51
49
|
};
|
|
52
50
|
/** Flatten the tree and ranges into transferable typed arrays. */
|
|
53
51
|
export declare function packSogLodIndex(manifest: SogLodManifest): SogLodIndex;
|
|
54
52
|
/** Materialize only leaves visited by the camera, preserving stable range identities. */
|
|
55
|
-
export declare function readSogLodLeaf(
|
|
53
|
+
export declare function readSogLodLeaf(
|
|
54
|
+
index: Pick<SogLodIndex, "leafOffsets" | "lods">,
|
|
55
|
+
id: number,
|
|
56
|
+
): SogLodLeaf;
|
|
56
57
|
/** Streamed SOG v1, including the earlier unversioned manifests. */
|
|
57
|
-
export declare function parseSogLodManifest(
|
|
58
|
+
export declare function parseSogLodManifest(
|
|
59
|
+
value: unknown,
|
|
60
|
+
baseUrl: string,
|
|
61
|
+
): SogLodManifest;
|
|
58
62
|
export type SogVisibleLeaf = {
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
leaf: SogLodLeaf;
|
|
64
|
+
/** World-space distance to the region, compensated for the camera's field of view. */
|
|
65
|
+
distance: number;
|
|
66
|
+
};
|
|
67
|
+
export type SogBudgetMode = "target" | "limit";
|
|
68
|
+
export type SogLodOptions = {
|
|
69
|
+
budget: number;
|
|
70
|
+
splatBudgetMode: SogBudgetMode;
|
|
71
|
+
lodBaseDistance: number;
|
|
72
|
+
lodMultiplier: number;
|
|
61
73
|
};
|
|
62
74
|
/** Reuse cached refinements up to the target, then split gaps of four or more. */
|
|
63
|
-
export declare function resolveSogLod(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
export declare function resolveSogLod(
|
|
76
|
+
leaf: SogLodLeaf,
|
|
77
|
+
target: SogLodRange,
|
|
78
|
+
current: SogLodRange | undefined,
|
|
79
|
+
isLoaded: (range: SogLodRange) => boolean,
|
|
80
|
+
): {
|
|
81
|
+
range: SogLodRange | undefined;
|
|
82
|
+
load?: SogLodRange;
|
|
83
|
+
/** Wait until range is attached before requesting the next LOD. */
|
|
84
|
+
refinement?: boolean;
|
|
68
85
|
};
|
|
69
|
-
/**
|
|
70
|
-
export declare function selectSogLods(
|
|
86
|
+
/** Select distance bands, fitting their common base distance to the splat budget. */
|
|
87
|
+
export declare function selectSogLods(
|
|
88
|
+
visible: SogVisibleLeaf[],
|
|
89
|
+
lodLevels: number,
|
|
90
|
+
options: SogLodOptions,
|
|
91
|
+
): Map<number, SogLodRange>;
|