UNPKG

@playcanvas/splat-transform

Version:

Library and CLI tool for 3D Gaussian splat format conversion and transformation

166 lines (165 loc) 6.29 kB
/** * Collision mesh shape generated alongside voxel output. * * - `smooth` - marching cubes with lossless coplanar merge. * - `faces` - direct watertight voxel-boundary faces. */ type CollisionMeshShape = 'smooth' | 'faces'; /** * Options for read/write operations. */ type Options = { /** Number of iterations for SOG SH compression (higher = better quality). Default: 10 */ iterations: number; /** LOD levels to read from LCC input */ lodSelect: number[]; /** Viewer settings JSON for HTML output */ viewerSettingsJson?: any; /** Whether to generate unbundled HTML output with separate files */ unbundled: boolean; /** Approximate number of Gaussians per LOD chunk (in thousands). Default: 512 */ lodChunkCount: number; /** Approximate size of an LOD chunk in world units (meters). Default: 16 */ lodChunkExtent: number; /** SPZ format version to write. Default: 4. */ spzVersion?: 3 | 4; /** Size of each voxel in world units for voxel output. Default: 0.05 */ voxelResolution?: number; /** Opacity threshold for solid voxels - voxels below this are considered empty. Default: 0.1 */ opacityCutoff?: number; /** Exterior fill radius in world units. Enables exterior fill when set. Requires navSeed. */ navExteriorRadius?: number; /** Fill each voxel column upward from the bottom until hitting solid. Runs before carve. Default: false */ floorFill?: boolean; /** When `floorFill` is enabled, dilation radius in world units used to identify "interior" XZ columns to patch. Empty XZ areas larger than `2 * floorFillDilation` from any solid column are treated as exterior and left empty. Default: 0 (patch every empty column). */ floorFillDilation?: number; /** Capsule dimensions for carve. Height of 0 disables carve. Requires navSeed. */ navCapsule?: { height: number; radius: number; }; /** Seed position in world space for exterior fill and carve flood fill. */ navSeed?: { x: number; y: number; z: number; }; /** When set, a collision mesh (.collision.glb) is generated alongside the voxel output. `true` is equivalent to `smooth`. */ collisionMesh?: boolean | CollisionMeshShape; /** Camera projection for image output: `'pinhole'` (default) or `'equirect'` (360°×180° panorama). */ renderProjection?: 'pinhole' | 'equirect'; /** Camera position (world space) for image output. Default: (2, 1, -2). */ renderCameraPosition?: { x: number; y: number; z: number; }; /** Camera look-at target (world space) for image output. Default: (0, 0, 0). */ renderLookAt?: { x: number; y: number; z: number; }; /** World-space up vector for image output. Default: (0, 1, 0). */ renderUp?: { x: number; y: number; z: number; }; /** Vertical field of view in degrees for image output. Default: 60. */ renderFov?: number; /** Output image width in pixels. Default: 1280. */ renderWidth?: number; /** Output image height in pixels. Default: 720. */ renderHeight?: number; /** Near clip distance for image output. Default: 0.2. */ renderNear?: number; /** RGBA background (each channel in [0, 1]) for image output. Default: (0, 0, 0, 1). */ renderBackground?: { r: number; g: number; b: number; a: number; }; /** * Aperture as a photographic f-stop (e.g. 2.8, 5.6, 11) for image * output. Enables defocus blur / depth-of-field: smaller numbers = * stronger blur. Defaults to disabled. Pinhole projection only. */ renderFStop?: number; /** * Camera-space Z of the focus plane in world units for image output. * Defaults to the distance from the camera to the look-at point when * `renderFStop` is set. No effect without `renderFStop`. Pinhole * projection only. */ renderFocusDistance?: number; /** * Vertical sensor height in world units. Calibrates `renderFStop` * to your world scale. Default `0.024` (35mm full-frame in meters). * No effect without `renderFStop`. Pinhole projection only. */ renderSensorSize?: number; /** * End camera position for motion blur. When set, enables camera * motion blur: the renderer averages multiple sub-frames with the * camera interpolated between `renderCameraPosition` (shutter open) * and `renderCameraEndPosition` (shutter close). */ renderCameraEndPosition?: { x: number; y: number; z: number; }; /** * End look-at target for motion blur. Defaults to `renderLookAt` * when motion blur is enabled. Only meaningful with * `renderCameraEndPosition`. */ renderLookAtEnd?: { x: number; y: number; z: number; }; /** * End up vector for motion blur. Defaults to `renderUp` when * motion blur is enabled. Only meaningful with * `renderCameraEndPosition`. */ renderUpEnd?: { x: number; y: number; z: number; }; /** * Shutter fraction in `[0, 1]`. Controls what portion of the * start→end camera segment is integrated, centered on the midpoint * (standard shutter-angle convention: 1.0 = full motion, 0.5 = 180° * shutter). Default: `1`. No effect without `renderCameraEndPosition`. */ renderShutter?: number; /** * Number of sub-frames to accumulate for motion blur. More samples = * smoother streaks at proportionally higher cost. Default: `16`. * No effect without `renderCameraEndPosition`. */ renderMotionSamples?: number; }; /** * Parameter passed to MJS generator scripts. * @ignore */ type Param = { name: string; value: string; }; /** * A function that creates a PlayCanvas GraphicsDevice on demand. * * Used for GPU-accelerated operations such as SOG compression and voxelization. * The application is responsible for caching if needed. * * @returns Promise resolving to a GraphicsDevice instance. */ type DeviceCreator = () => Promise<import('playcanvas').GraphicsDevice>; export type { CollisionMeshShape, Options, Param, DeviceCreator };