@sparkjsdev/spark
Version:
An advanced 3D Gaussian Splatting renderer for THREE.js
88 lines (87 loc) • 3.6 kB
TypeScript
import { PackedSplats, SplatEncoding } from './PackedSplats';
import { RgbaArray } from './RgbaArray';
import { SplatEdit } from './SplatEdit';
import { GsplatModifier, SplatGenerator, SplatTransformer } from './SplatGenerator';
import { SplatFileType } from './SplatLoader';
import { SplatSkinning } from './SplatSkinning';
import { DynoFloat, DynoUsampler2DArray, DynoVal, DynoVec4, Gsplat } from './dyno';
import * as THREE from "three";
export type SplatMeshOptions = {
url?: string;
fileBytes?: Uint8Array | ArrayBuffer;
fileType?: SplatFileType;
fileName?: string;
packedSplats?: PackedSplats;
maxSplats?: number;
constructSplats?: (splats: PackedSplats) => Promise<void> | void;
onLoad?: (mesh: SplatMesh) => Promise<void> | void;
editable?: boolean;
onFrame?: ({ mesh, time, deltaTime, }: {
mesh: SplatMesh;
time: number;
deltaTime: number;
}) => void;
objectModifier?: GsplatModifier;
worldModifier?: GsplatModifier;
splatEncoding?: SplatEncoding;
};
export type SplatMeshContext = {
transform: SplatTransformer;
viewToWorld: SplatTransformer;
worldToView: SplatTransformer;
viewToObject: SplatTransformer;
recolor: DynoVec4<THREE.Vector4>;
time: DynoFloat;
deltaTime: DynoFloat;
};
export declare class SplatMesh extends SplatGenerator {
initialized: Promise<SplatMesh>;
isInitialized: boolean;
packedSplats: PackedSplats;
recolor: THREE.Color;
opacity: number;
context: SplatMeshContext;
onFrame?: ({ mesh, time, deltaTime, }: {
mesh: SplatMesh;
time: number;
deltaTime: number;
}) => void;
objectModifier?: GsplatModifier;
worldModifier?: GsplatModifier;
enableViewToObject: boolean;
enableViewToWorld: boolean;
enableWorldToView: boolean;
skinning: SplatSkinning | null;
edits: SplatEdit[] | null;
editable: boolean;
private rgbaDisplaceEdits;
splatRgba: RgbaArray | null;
maxSh: number;
constructor(options?: SplatMeshOptions);
asyncInitialize(options: SplatMeshOptions): Promise<void>;
static staticInitialized: Promise<void>;
static isStaticInitialized: boolean;
static dynoTime: DynoFloat<"value">;
static staticInitialize(): Promise<void>;
pushSplat(center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color): void;
forEachSplat(callback: (index: number, center: THREE.Vector3, scales: THREE.Vector3, quaternion: THREE.Quaternion, opacity: number, color: THREE.Color) => void): void;
dispose(): void;
getBoundingBox(centers_only?: boolean): THREE.Box3;
constructGenerator(context: SplatMeshContext): void;
updateGenerator(): void;
update({ time, viewToWorld, deltaTime, globalEdits, }: {
time: number;
viewToWorld: THREE.Matrix4;
deltaTime: number;
globalEdits: SplatEdit[];
}): void;
raycast(raycaster: THREE.Raycaster, intersects: {
distance: number;
point: THREE.Vector3;
object: THREE.Object3D;
}[]): void;
private ensureShTextures;
}
export declare function evaluateSH1(gsplat: DynoVal<typeof Gsplat>, sh1: DynoUsampler2DArray<"sh1", THREE.DataArrayTexture>, viewDir: DynoVal<"vec3">): DynoVal<"vec3">;
export declare function evaluateSH2(gsplat: DynoVal<typeof Gsplat>, sh2: DynoVal<"usampler2DArray">, viewDir: DynoVal<"vec3">): DynoVal<"vec3">;
export declare function evaluateSH3(gsplat: DynoVal<typeof Gsplat>, sh3: DynoVal<"usampler2DArray">, viewDir: DynoVal<"vec3">): DynoVal<"vec3">;