@sparkjsdev/spark 0.1.0

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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +212 -0
  3. package/dist/assets/worker-DQiiPuma.js.map +1 -0
  4. package/dist/assets/worker-DnqMl73p.js.map +1 -0
  5. package/dist/spark.cjs.js +12696 -0
  6. package/dist/spark.cjs.js.map +1 -0
  7. package/dist/spark.cjs.min.js +1086 -0
  8. package/dist/spark.cjs.min.js.map +1 -0
  9. package/dist/spark.module.js +12679 -0
  10. package/dist/spark.module.js.map +1 -0
  11. package/dist/spark.module.min.js +10048 -0
  12. package/dist/spark.module.min.js.map +1 -0
  13. package/dist/types/ForgeRenderer.d.ts +136 -0
  14. package/dist/types/ForgeViewpoint.d.ts +83 -0
  15. package/dist/types/PackedSplats.d.ts +87 -0
  16. package/dist/types/Readback.d.ts +50 -0
  17. package/dist/types/RgbaArray.d.ts +44 -0
  18. package/dist/types/SplatAccumulator.d.ts +27 -0
  19. package/dist/types/SplatEdit.d.ts +94 -0
  20. package/dist/types/SplatGenerator.d.ts +61 -0
  21. package/dist/types/SplatGeometry.d.ts +7 -0
  22. package/dist/types/SplatLoader.d.ts +80 -0
  23. package/dist/types/SplatMesh.d.ts +85 -0
  24. package/dist/types/SplatSkinning.d.ts +29 -0
  25. package/dist/types/antisplat.d.ts +5 -0
  26. package/dist/types/controls.d.ts +114 -0
  27. package/dist/types/defines.d.ts +17 -0
  28. package/dist/types/dyno/base.d.ts +174 -0
  29. package/dist/types/dyno/control.d.ts +6 -0
  30. package/dist/types/dyno/convert.d.ts +190 -0
  31. package/dist/types/dyno/logic.d.ts +103 -0
  32. package/dist/types/dyno/math.d.ts +214 -0
  33. package/dist/types/dyno/mathTypes.d.ts +47 -0
  34. package/dist/types/dyno/output.d.ts +25 -0
  35. package/dist/types/dyno/program.d.ts +30 -0
  36. package/dist/types/dyno/splats.d.ts +156 -0
  37. package/dist/types/dyno/texture.d.ts +50 -0
  38. package/dist/types/dyno/transform.d.ts +59 -0
  39. package/dist/types/dyno/trig.d.ts +94 -0
  40. package/dist/types/dyno/types.d.ts +62 -0
  41. package/dist/types/dyno/uniforms.d.ts +374 -0
  42. package/dist/types/dyno/util.d.ts +139 -0
  43. package/dist/types/dyno/value.d.ts +32 -0
  44. package/dist/types/dyno/vecmat.d.ts +226 -0
  45. package/dist/types/dyno.d.ts +16 -0
  46. package/dist/types/generators/snow.d.ts +65 -0
  47. package/dist/types/generators/static.d.ts +9 -0
  48. package/dist/types/generators.d.ts +2 -0
  49. package/dist/types/hands.d.ts +95 -0
  50. package/dist/types/index.d.ts +20 -0
  51. package/dist/types/ksplat.d.ts +6 -0
  52. package/dist/types/ply.d.ts +31 -0
  53. package/dist/types/shaders.d.ts +1 -0
  54. package/dist/types/splatConstructors.d.ts +46 -0
  55. package/dist/types/splatWorker.d.ts +20 -0
  56. package/dist/types/spz.d.ts +50 -0
  57. package/dist/types/utils.d.ts +150 -0
  58. package/dist/types/vrButton.d.ts +6 -0
  59. package/dist/types/worker.d.ts +1 -0
  60. package/package.json +63 -0
@@ -0,0 +1,136 @@
1
+ import { ForgeViewpoint, ForgeViewpointOptions } from './ForgeViewpoint';
2
+ import { RgbaArray } from './RgbaArray';
3
+ import { SplatAccumulator } from './SplatAccumulator';
4
+ import { SplatGenerator } from './SplatGenerator';
5
+ import * as THREE from "three";
6
+ export type ForgeRendererOptions = {
7
+ renderer: THREE.WebGLRenderer;
8
+ clock?: THREE.Clock;
9
+ autoUpdate?: boolean;
10
+ preUpdate?: boolean;
11
+ originDistance?: number;
12
+ maxStdDev?: number;
13
+ enable2DGS?: boolean;
14
+ preBlurAmount?: number;
15
+ blurAmount?: number;
16
+ falloff?: number;
17
+ clipXY?: number;
18
+ view?: ForgeViewpointOptions;
19
+ };
20
+ export declare class ForgeRenderer extends THREE.Mesh {
21
+ renderer: THREE.WebGLRenderer;
22
+ material: THREE.ShaderMaterial;
23
+ uniforms: ReturnType<typeof ForgeRenderer.makeUniforms>;
24
+ autoUpdate: boolean;
25
+ preUpdate: boolean;
26
+ originDistance: number;
27
+ maxStdDev: number;
28
+ enable2DGS: boolean;
29
+ preBlurAmount: number;
30
+ blurAmount: number;
31
+ falloff: number;
32
+ clipXY: number;
33
+ time?: number;
34
+ deltaTime?: number;
35
+ clock: THREE.Clock;
36
+ active: SplatAccumulator;
37
+ private freeAccumulators;
38
+ private accumulatorCount;
39
+ defaultView: ForgeViewpoint;
40
+ autoViewpoints: ForgeViewpoint[];
41
+ private rotateToAccumulator;
42
+ private translateToAccumulator;
43
+ private modifier;
44
+ private lastFrame;
45
+ private lastUpdateTime;
46
+ private defaultCameras;
47
+ viewpoint: ForgeViewpoint;
48
+ private pendingUpdate;
49
+ private envViewpoint;
50
+ private static cubeRender;
51
+ private static pmrem;
52
+ constructor(options: ForgeRendererOptions);
53
+ static makeUniforms(): {
54
+ renderSize: {
55
+ value: THREE.Vector2;
56
+ };
57
+ numSplats: {
58
+ value: number;
59
+ };
60
+ renderToViewQuat: {
61
+ value: THREE.Quaternion;
62
+ };
63
+ renderToViewPos: {
64
+ value: THREE.Vector3;
65
+ };
66
+ maxStdDev: {
67
+ value: number;
68
+ };
69
+ enable2DGS: {
70
+ value: boolean;
71
+ };
72
+ preBlurAmount: {
73
+ value: number;
74
+ };
75
+ blurAmount: {
76
+ value: number;
77
+ };
78
+ falloff: {
79
+ value: number;
80
+ };
81
+ clipXY: {
82
+ value: number;
83
+ };
84
+ packedSplats: {
85
+ type: string;
86
+ value: THREE.DataArrayTexture;
87
+ };
88
+ time: {
89
+ value: number;
90
+ };
91
+ deltaTime: {
92
+ value: number;
93
+ };
94
+ encodeLinear: {
95
+ value: boolean;
96
+ };
97
+ debugFlag: {
98
+ value: boolean;
99
+ };
100
+ };
101
+ private canAllocAccumulator;
102
+ private maybeAllocAccumulator;
103
+ releaseAccumulator(accumulator: SplatAccumulator): void;
104
+ newViewpoint(options: ForgeViewpointOptions): ForgeViewpoint;
105
+ onBeforeRender(renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera): void;
106
+ prepareViewpoint(viewpoint?: ForgeViewpoint): void;
107
+ update({ scene, viewToWorld, }: {
108
+ scene: THREE.Scene;
109
+ viewToWorld?: THREE.Matrix4;
110
+ }): void;
111
+ updateInternal({ scene, originToWorld, viewToWorld, }: {
112
+ scene: THREE.Scene;
113
+ originToWorld?: THREE.Matrix4;
114
+ viewToWorld?: THREE.Matrix4;
115
+ }): boolean;
116
+ private compileScene;
117
+ renderEnvMap({ renderer, scene, worldCenter, size, near, far, hideObjects, update, }: {
118
+ renderer?: THREE.WebGLRenderer;
119
+ scene: THREE.Scene;
120
+ worldCenter: THREE.Vector3;
121
+ size?: number;
122
+ near?: number;
123
+ far?: number;
124
+ hideObjects?: THREE.Object3D[];
125
+ update?: boolean;
126
+ }): Promise<THREE.Texture>;
127
+ recurseSetEnvMap(root: THREE.Object3D, envMap: THREE.Texture): void;
128
+ getRgba({ generator, rgba, }: {
129
+ generator: SplatGenerator;
130
+ rgba?: RgbaArray;
131
+ }): RgbaArray;
132
+ readRgba({ generator, rgba, }: {
133
+ generator: SplatGenerator;
134
+ rgba?: RgbaArray;
135
+ }): Promise<Uint8Array>;
136
+ }
@@ -0,0 +1,83 @@
1
+ import { ForgeRenderer } from './ForgeRenderer';
2
+ import { SplatAccumulator } from './SplatAccumulator';
3
+ import { SplatGeometry } from './SplatGeometry';
4
+ import * as THREE from "three";
5
+ export type ForgeViewpointOptions = {
6
+ autoUpdate?: boolean;
7
+ camera?: THREE.Camera;
8
+ viewToWorld?: THREE.Matrix4;
9
+ target?: {
10
+ width: number;
11
+ height: number;
12
+ doubleBuffer?: boolean;
13
+ superXY?: number;
14
+ };
15
+ onTextureUpdated?: (texture: THREE.Texture) => void;
16
+ sortRadial?: boolean;
17
+ sortDistance?: number;
18
+ sortCoorient?: boolean;
19
+ depthBias?: number;
20
+ sort360?: boolean;
21
+ };
22
+ export declare class ForgeViewpoint {
23
+ forge: ForgeRenderer;
24
+ autoUpdate: boolean;
25
+ camera?: THREE.Camera;
26
+ viewToWorld: THREE.Matrix4;
27
+ lastTime: number | null;
28
+ target?: THREE.WebGLRenderTarget;
29
+ private back?;
30
+ onTextureUpdated?: (texture: THREE.Texture) => void;
31
+ encodeLinear: boolean;
32
+ superXY: number;
33
+ private superPixels?;
34
+ private pixels?;
35
+ sortRadial: boolean;
36
+ sortDistance?: number;
37
+ sortCoorient?: boolean;
38
+ depthBias?: number;
39
+ sort360?: boolean;
40
+ display: {
41
+ accumulator: SplatAccumulator;
42
+ viewToWorld: THREE.Matrix4;
43
+ geometry: SplatGeometry;
44
+ } | null;
45
+ private sorting;
46
+ private pending;
47
+ private sortingCheck;
48
+ private readback;
49
+ private orderingFreelist;
50
+ constructor(options: ForgeViewpointOptions & {
51
+ forge: ForgeRenderer;
52
+ });
53
+ dispose(): void;
54
+ setAutoUpdate(autoUpdate: boolean): void;
55
+ prepare({ scene, camera, viewToWorld, update, forceOrigin, }: {
56
+ scene: THREE.Scene;
57
+ camera?: THREE.Camera;
58
+ viewToWorld?: THREE.Matrix4;
59
+ update?: boolean;
60
+ forceOrigin?: boolean;
61
+ }): Promise<void>;
62
+ renderTarget({ scene, camera, }: {
63
+ scene: THREE.Scene;
64
+ camera?: THREE.Camera;
65
+ }): void;
66
+ readTarget(): Promise<Uint8Array>;
67
+ prepareRenderPixels({ scene, camera, viewToWorld, update, forceOrigin, }: {
68
+ scene: THREE.Scene;
69
+ camera?: THREE.Camera;
70
+ viewToWorld?: THREE.Matrix4;
71
+ update?: boolean;
72
+ forceOrigin?: boolean;
73
+ }): Promise<Uint8Array<ArrayBufferLike>>;
74
+ autoPoll({ accumulator }: {
75
+ accumulator?: SplatAccumulator;
76
+ }): void;
77
+ private driveSort;
78
+ private sortUpdate;
79
+ private updateDisplay;
80
+ static EMPTY_TEXTURE: THREE.Texture;
81
+ private static dynos;
82
+ private static makeSorter;
83
+ }
@@ -0,0 +1,87 @@
1
+ import { GsplatGenerator } from './SplatGenerator';
2
+ import { SplatFileType } from './SplatLoader';
3
+ import { DynoProgram, DynoProgramTemplate, DynoUniform } from './dyno';
4
+ import { TPackedSplats } from './dyno/splats';
5
+ import * as THREE from "three";
6
+ export type PackedSplatsOptions = {
7
+ url?: string;
8
+ fileBytes?: Uint8Array | ArrayBuffer;
9
+ fileType?: SplatFileType;
10
+ fileName?: string;
11
+ maxSplats?: number;
12
+ packedArray?: Uint32Array;
13
+ numSplats?: number;
14
+ construct?: (splats: PackedSplats) => Promise<void> | void;
15
+ extra?: Record<string, unknown>;
16
+ };
17
+ export declare class PackedSplats {
18
+ maxSplats: number;
19
+ numSplats: number;
20
+ packedArray: Uint32Array | null;
21
+ extra: Record<string, unknown>;
22
+ initialized: Promise<PackedSplats>;
23
+ isInitialized: boolean;
24
+ target: THREE.WebGLArrayRenderTarget | null;
25
+ source: THREE.DataArrayTexture | null;
26
+ needsUpdate: boolean;
27
+ dyno: DynoUniform<typeof TPackedSplats, "packedSplats">;
28
+ constructor(options?: PackedSplatsOptions);
29
+ reinitialize(options: PackedSplatsOptions): void;
30
+ initialize(options: PackedSplatsOptions): void;
31
+ asyncInitialize(options: PackedSplatsOptions): Promise<void>;
32
+ dispose(): void;
33
+ ensureSplats(numSplats: number): Uint32Array;
34
+ ensureSplatsSh(level: number, numSplats: number): Uint32Array;
35
+ getSplat(index: number): {
36
+ center: THREE.Vector3;
37
+ scales: THREE.Vector3;
38
+ quaternion: THREE.Quaternion;
39
+ opacity: number;
40
+ color: THREE.Color;
41
+ };
42
+ setSplat(index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color): void;
43
+ pushSplat(center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color): void;
44
+ forEachSplat(callback: (index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => void): void;
45
+ ensureGenerate(maxSplats: number): boolean;
46
+ generateMapping(splatCounts: number[]): {
47
+ maxSplats: number;
48
+ mapping: {
49
+ base: number;
50
+ count: number;
51
+ }[];
52
+ };
53
+ getTexture(): THREE.DataArrayTexture;
54
+ private maybeUpdateSource;
55
+ private static emptySource;
56
+ static getEmpty(): THREE.DataArrayTexture;
57
+ prepareProgramMaterial(generator: GsplatGenerator): {
58
+ program: DynoProgram;
59
+ material: THREE.RawShaderMaterial;
60
+ };
61
+ private saveRenderState;
62
+ private resetRenderState;
63
+ generate({ generator, base, count, renderer, }: {
64
+ generator: GsplatGenerator;
65
+ base: number;
66
+ count: number;
67
+ renderer: THREE.WebGLRenderer;
68
+ }): {
69
+ nextBase: number;
70
+ };
71
+ static programTemplate: DynoProgramTemplate | null;
72
+ static generatorProgram: Map<GsplatGenerator, DynoProgram>;
73
+ static geometry: THREE.PlaneGeometry;
74
+ static mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.RawShaderMaterial, THREE.Object3DEventMap>;
75
+ static scene: THREE.Scene;
76
+ static camera: THREE.Camera;
77
+ }
78
+ export declare const dynoPackedSplats: (packedSplats?: PackedSplats) => DynoPackedSplats;
79
+ export declare class DynoPackedSplats extends DynoUniform<typeof TPackedSplats, "packedSplats", {
80
+ texture: THREE.DataArrayTexture;
81
+ numSplats: number;
82
+ }> {
83
+ packedSplats?: PackedSplats;
84
+ constructor({ packedSplats }?: {
85
+ packedSplats?: PackedSplats;
86
+ });
87
+ }
@@ -0,0 +1,50 @@
1
+ import { Dyno } from './dyno';
2
+ import { DynoProgram, DynoProgramTemplate } from './dyno/program';
3
+ import * as THREE from "three";
4
+ export type Rgba8Readback = Dyno<{
5
+ index: "int";
6
+ }, {
7
+ rgba8: "vec4";
8
+ }>;
9
+ export type ReadbackBuffer = ArrayBuffer | Uint8Array | Int8Array | Uint16Array | Int16Array | Uint32Array | Int32Array | Float32Array;
10
+ export declare class Readback {
11
+ renderer?: THREE.WebGLRenderer;
12
+ target?: THREE.WebGLArrayRenderTarget;
13
+ capacity: number;
14
+ count: number;
15
+ constructor({ renderer }?: {
16
+ renderer?: THREE.WebGLRenderer;
17
+ });
18
+ dispose(): void;
19
+ ensureBuffer<B extends ReadbackBuffer>(count: number, buffer: B): B;
20
+ ensureCapacity(capacity: number): void;
21
+ prepareProgramMaterial(reader: Rgba8Readback): {
22
+ program: DynoProgram;
23
+ material: THREE.RawShaderMaterial;
24
+ };
25
+ private saveRenderState;
26
+ private resetRenderState;
27
+ private process;
28
+ private read;
29
+ render({ reader, count, renderer, }: {
30
+ reader: Rgba8Readback;
31
+ count: number;
32
+ renderer?: THREE.WebGLRenderer;
33
+ }): void;
34
+ readback<B extends ReadbackBuffer>({ readback, }: {
35
+ readback: B;
36
+ }): Promise<B>;
37
+ renderReadback<B extends ReadbackBuffer>({ reader, count, renderer, readback, }: {
38
+ reader: Rgba8Readback;
39
+ count: number;
40
+ renderer?: THREE.WebGLRenderer;
41
+ readback: B;
42
+ }): Promise<B>;
43
+ getTexture(): THREE.DataArrayTexture | undefined;
44
+ static programTemplate: DynoProgramTemplate | null;
45
+ static readbackProgram: Map<Rgba8Readback, DynoProgram>;
46
+ static geometry: THREE.PlaneGeometry;
47
+ static mesh: THREE.Mesh<THREE.PlaneGeometry, THREE.RawShaderMaterial, THREE.Object3DEventMap>;
48
+ static scene: THREE.Scene;
49
+ static camera: THREE.Camera;
50
+ }
@@ -0,0 +1,44 @@
1
+ import { PackedSplats } from './PackedSplats';
2
+ import { Readback, Rgba8Readback } from './Readback';
3
+ import { DynoUniform, DynoVal } from './dyno';
4
+ import * as THREE from "three";
5
+ export type RgbaArrayOptions = {
6
+ capacity?: number;
7
+ array?: Uint8Array;
8
+ count?: number;
9
+ };
10
+ export declare class RgbaArray {
11
+ capacity: number;
12
+ count: number;
13
+ array: Uint8Array | null;
14
+ readback: Readback | null;
15
+ source: THREE.DataArrayTexture | null;
16
+ needsUpdate: boolean;
17
+ dyno: DynoUniform<typeof TRgbaArray, "rgbaArray">;
18
+ constructor(options?: RgbaArrayOptions);
19
+ dispose(): void;
20
+ ensureCapacity(capacity: number): Uint8Array;
21
+ getTexture(): THREE.DataArrayTexture;
22
+ private maybeUpdateSource;
23
+ render({ reader, count, renderer, }: {
24
+ reader: Rgba8Readback;
25
+ count: number;
26
+ renderer: THREE.WebGLRenderer;
27
+ }): void;
28
+ fromPackedSplats({ packedSplats, base, count, renderer, }: {
29
+ packedSplats: PackedSplats;
30
+ base: number;
31
+ count: number;
32
+ renderer: THREE.WebGLRenderer;
33
+ }): this;
34
+ read(): Promise<Uint8Array>;
35
+ private static emptySource;
36
+ static getEmpty(): THREE.DataArrayTexture;
37
+ private static dynos;
38
+ private static makeDynos;
39
+ }
40
+ export declare const TRgbaArray: {
41
+ type: "RgbaArray";
42
+ };
43
+ export declare const defineRgbaArray: string;
44
+ export declare function readRgbaArray(rgba: DynoVal<typeof TRgbaArray>, index: DynoVal<"int">): DynoVal<"vec4">;
@@ -0,0 +1,27 @@
1
+ import { PackedSplats } from './PackedSplats';
2
+ import { GsplatGenerator, SplatGenerator, SplatModifier } from './SplatGenerator';
3
+ import * as THREE from "three";
4
+ export type GeneratorMapping = {
5
+ node: SplatGenerator;
6
+ generator?: GsplatGenerator;
7
+ version: number;
8
+ base: number;
9
+ count: number;
10
+ };
11
+ export declare class SplatAccumulator {
12
+ splats: PackedSplats;
13
+ toWorld: THREE.Matrix4;
14
+ mapping: GeneratorMapping[];
15
+ refCount: number;
16
+ splatsVersion: number;
17
+ mappingVersion: number;
18
+ ensureGenerate(maxSplats: number): void;
19
+ generateSplats({ renderer, modifier, generators, forceUpdate, originToWorld, }: {
20
+ renderer: THREE.WebGLRenderer;
21
+ modifier: SplatModifier;
22
+ generators: GeneratorMapping[];
23
+ forceUpdate?: boolean;
24
+ originToWorld: THREE.Matrix4;
25
+ }): boolean;
26
+ hasCorrespondence(other: SplatAccumulator): boolean;
27
+ }
@@ -0,0 +1,94 @@
1
+ import { DynoUniform, DynoVal, Gsplat } from './dyno';
2
+ import * as THREE from "three";
3
+ export declare enum SplatEditSdfType {
4
+ ALL = "all",
5
+ PLANE = "plane",
6
+ SPHERE = "sphere",
7
+ BOX = "box",
8
+ ELLIPSOID = "ellipsoid",
9
+ CYLINDER = "cylinder",
10
+ CAPSULE = "capsule",
11
+ INFINITE_CONE = "infinite_cone"
12
+ }
13
+ export declare enum SplatEditRgbaBlendMode {
14
+ MULTIPLY = "multiply",
15
+ SET_RGB = "set_rgb",
16
+ ADD_RGBA = "add_rgba"
17
+ }
18
+ export type SplatEditSdfOptions = {
19
+ type?: SplatEditSdfType;
20
+ invert?: boolean;
21
+ opacity?: number;
22
+ color?: THREE.Color;
23
+ displace?: THREE.Vector3;
24
+ radius?: number;
25
+ };
26
+ export declare class SplatEditSdf extends THREE.Object3D {
27
+ type: SplatEditSdfType;
28
+ invert: boolean;
29
+ opacity: number;
30
+ color: THREE.Color;
31
+ displace: THREE.Vector3;
32
+ radius: number;
33
+ constructor(options?: SplatEditSdfOptions);
34
+ }
35
+ export type SplatEditOptions = {
36
+ name?: string;
37
+ rgbaBlendMode?: SplatEditRgbaBlendMode;
38
+ sdfSmooth?: number;
39
+ softEdge?: number;
40
+ invert?: boolean;
41
+ sdfs?: SplatEditSdf[];
42
+ };
43
+ export declare class SplatEdit extends THREE.Object3D {
44
+ ordering: number;
45
+ rgbaBlendMode: SplatEditRgbaBlendMode;
46
+ sdfSmooth: number;
47
+ softEdge: number;
48
+ invert: boolean;
49
+ sdfs: SplatEditSdf[] | null;
50
+ static nextOrdering: number;
51
+ constructor(options?: SplatEditOptions);
52
+ addSdf(sdf: SplatEditSdf): void;
53
+ removeSdf(sdf: SplatEditSdf): void;
54
+ }
55
+ export declare class SplatEdits {
56
+ maxSdfs: number;
57
+ numSdfs: number;
58
+ sdfData: Uint32Array;
59
+ sdfFloatData: Float32Array;
60
+ sdfTexture: THREE.DataTexture;
61
+ dynoSdfArray: DynoUniform<typeof SdfArray, "sdfArray">;
62
+ maxEdits: number;
63
+ numEdits: number;
64
+ editData: Uint32Array;
65
+ editFloatData: Float32Array;
66
+ dynoNumEdits: DynoUniform<"int", "numEdits">;
67
+ dynoEdits: DynoUniform<"uvec4", "edits">;
68
+ constructor({ maxSdfs, maxEdits }: {
69
+ maxSdfs?: number;
70
+ maxEdits?: number;
71
+ });
72
+ private newSdfTexture;
73
+ private newEdits;
74
+ private ensureCapacity;
75
+ private updateEditData;
76
+ private updateEditFloatData;
77
+ private encodeEdit;
78
+ private updateSdfData;
79
+ private updateSdfFloatData;
80
+ private encodeSdf;
81
+ update(edits: {
82
+ edit: SplatEdit;
83
+ sdfs: SplatEditSdf[];
84
+ }[]): {
85
+ updated: boolean;
86
+ dynoUpdated: boolean;
87
+ };
88
+ modify(gsplat: DynoVal<typeof Gsplat>): DynoVal<typeof Gsplat>;
89
+ }
90
+ export declare const SdfArray: {
91
+ type: "SdfArray";
92
+ };
93
+ export declare const defineSdfArray: string;
94
+ export declare const defineEdit: string;
@@ -0,0 +1,61 @@
1
+ import { SplatEdit } from './SplatEdit';
2
+ import { Dyno, DynoFloat, DynoVal, DynoVec3, DynoVec4, Gsplat } from './dyno';
3
+ import * as THREE from "three";
4
+ export type GsplatGenerator = Dyno<{
5
+ index: "int";
6
+ }, {
7
+ gsplat: typeof Gsplat;
8
+ }>;
9
+ export type GsplatModifier = Dyno<{
10
+ gsplat: typeof Gsplat;
11
+ }, {
12
+ gsplat: typeof Gsplat;
13
+ }>;
14
+ export declare class SplatModifier {
15
+ modifier: GsplatModifier;
16
+ cache: Map<GsplatGenerator, GsplatGenerator>;
17
+ constructor(modifier: GsplatModifier);
18
+ apply(generator: GsplatGenerator): GsplatGenerator;
19
+ }
20
+ export declare class SplatTransformer {
21
+ scale: DynoFloat;
22
+ rotate: DynoVec4<THREE.Quaternion>;
23
+ translate: DynoVec3<THREE.Vector3>;
24
+ constructor();
25
+ apply(position: DynoVal<"vec3">): DynoVal<"vec3">;
26
+ applyDir(dir: DynoVal<"vec3">): DynoVal<"vec3">;
27
+ applyGsplat(gsplat: DynoVal<typeof Gsplat>): DynoVal<typeof Gsplat>;
28
+ updateFromMatrix(transform: THREE.Matrix4): boolean;
29
+ update(object: THREE.Object3D): boolean;
30
+ }
31
+ export declare class SplatGenerator extends THREE.Object3D {
32
+ numSplats: number;
33
+ generator?: GsplatGenerator;
34
+ generatorError?: unknown;
35
+ frameUpdate?: ({ object, time, deltaTime, viewToWorld, globalEdits, }: {
36
+ object: SplatGenerator;
37
+ time: number;
38
+ deltaTime: number;
39
+ viewToWorld: THREE.Matrix4;
40
+ globalEdits: SplatEdit[];
41
+ }) => void;
42
+ version: number;
43
+ constructor({ numSplats, generator, construct, update, }: {
44
+ numSplats?: number;
45
+ generator?: GsplatGenerator;
46
+ construct?: (object: SplatGenerator) => {
47
+ generator?: GsplatGenerator;
48
+ numSplats?: number;
49
+ frameUpdate?: (object: SplatGenerator) => void;
50
+ };
51
+ update?: ({ object, time, deltaTime, viewToWorld, globalEdits, }: {
52
+ object: SplatGenerator;
53
+ time: number;
54
+ deltaTime: number;
55
+ viewToWorld: THREE.Matrix4;
56
+ globalEdits: SplatEdit[];
57
+ }) => void;
58
+ });
59
+ updateVersion(): void;
60
+ set needsUpdate(value: boolean);
61
+ }
@@ -0,0 +1,7 @@
1
+ import * as THREE from "three";
2
+ export declare class SplatGeometry extends THREE.InstancedBufferGeometry {
3
+ ordering: Uint32Array;
4
+ attribute: THREE.InstancedBufferAttribute;
5
+ constructor(ordering: Uint32Array, activeSplats: number);
6
+ update(ordering: Uint32Array, activeSplats: number): void;
7
+ }
@@ -0,0 +1,80 @@
1
+ import { FileLoader, Loader, LoadingManager } from 'three';
2
+ import { PackedSplats } from './PackedSplats';
3
+ import { SplatMesh } from './SplatMesh';
4
+ export declare class SplatLoader extends Loader {
5
+ fileLoader: FileLoader;
6
+ fileType?: SplatFileType;
7
+ constructor(manager?: LoadingManager);
8
+ load(url: string, onLoad?: (decoded: PackedSplats) => void, onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
9
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<PackedSplats>;
10
+ parse(packedSplats: PackedSplats): SplatMesh;
11
+ }
12
+ export declare enum SplatFileType {
13
+ PLY = "ply",
14
+ SPZ = "spz",
15
+ SPLAT = "splat",
16
+ KSPLAT = "ksplat"
17
+ }
18
+ export declare function getSplatFileType(fileBytes: Uint8Array): SplatFileType | undefined;
19
+ export declare function getFileExtension(pathOrUrl: string): string;
20
+ export declare function getSplatFileTypeFromPath(pathOrUrl: string): SplatFileType | undefined;
21
+ export declare function unpackSplats({ input, fileType, pathOrUrl, }: {
22
+ input: Uint8Array | ArrayBuffer;
23
+ fileType?: SplatFileType;
24
+ pathOrUrl?: string;
25
+ }): Promise<{
26
+ packedArray: Uint32Array;
27
+ numSplats: number;
28
+ extra?: Record<string, unknown>;
29
+ }>;
30
+ export declare class SplatData {
31
+ numSplats: number;
32
+ maxSplats: number;
33
+ centers: Float32Array;
34
+ scales: Float32Array;
35
+ quaternions: Float32Array;
36
+ opacities: Float32Array;
37
+ colors: Float32Array;
38
+ sh1?: Float32Array;
39
+ sh2?: Float32Array;
40
+ sh3?: Float32Array;
41
+ constructor({ maxSplats }?: {
42
+ maxSplats?: number;
43
+ });
44
+ pushSplat(): number;
45
+ unpushSplat(index: number): void;
46
+ ensureCapacity(numSplats: number): void;
47
+ ensureIndex(index: number): void;
48
+ setCenter(index: number, x: number, y: number, z: number): void;
49
+ setScale(index: number, scaleX: number, scaleY: number, scaleZ: number): void;
50
+ setQuaternion(index: number, x: number, y: number, z: number, w: number): void;
51
+ setOpacity(index: number, opacity: number): void;
52
+ setColor(index: number, r: number, g: number, b: number): void;
53
+ setSh1(index: number, sh1: Float32Array): void;
54
+ setSh2(index: number, sh2: Float32Array): void;
55
+ setSh3(index: number, sh3: Float32Array): void;
56
+ }
57
+ export declare function transcodeSpz(input: TranscodeSpzInput): Promise<{
58
+ input: TranscodeSpzInput;
59
+ fileBytes: Uint8Array;
60
+ }>;
61
+ export type FileInput = {
62
+ fileBytes: Uint8Array;
63
+ fileType?: SplatFileType;
64
+ pathOrUrl?: string;
65
+ transform?: {
66
+ translate?: number[];
67
+ quaternion?: number[];
68
+ scale?: number;
69
+ };
70
+ };
71
+ export type TranscodeSpzInput = {
72
+ inputs: FileInput[];
73
+ maxSh?: number;
74
+ clipXyz?: {
75
+ min: number[];
76
+ max: number[];
77
+ };
78
+ fractionalBits?: number;
79
+ opacityThreshold?: number;
80
+ };