@realsee/five
Version:
Realsee Renderer SDK
75 lines (74 loc) • 3.31 kB
TypeScript
import * as THREE from "three";
import type { PBMClipperParameter } from "../materials/pbmMaterial";
export interface SplatData {
numPoints: number;
packedData: Uint32Array;
sh1?: Float32Array;
sh2?: Float32Array;
sh3?: Float32Array;
shDegree?: number;
/** 数据是否经过抗锯齿(Mip-Splatting)训练,来自 SPZ header flags bit0 */
antiAliased?: boolean;
}
export declare class PBMGaussianSplattingObject extends THREE.Points<THREE.BufferGeometry, THREE.ShaderMaterial> {
transformChanged: boolean;
selectedChanged: boolean;
/**
* 渲染参数(preBlurAmount / blurAmount)变化标记。
* 与 transformChanged 分开:这类参数不影响深度排序,只需重传 ObjectParamsStore,
* 不必触发重排序,也不必碰 transform 纹理。
*/
renderParamsChanged: boolean;
numPoints: number;
maxSHDegree: number;
usedSHDegree: number;
initAnimationEnabled: boolean;
gsViewLayerKey: string;
gsClippers: readonly PBMClipperParameter[];
/** 加载时在 worker 中预 pack 好的 GPU 数据(8 uint32/splat) */
packedData: Uint32Array;
/**
* 数据是否经过抗锯齿(Mip-Splatting)训练。来自 SPZ header flags bit0。
* 决定 preBlurAmount / blurAmount 的默认取值,即渲染端走纯 dilation
* 还是「2D mip + opacity 补偿」路径。
*/
readonly antiAliased: boolean;
private _preBlurAmount;
private _blurAmount;
private _selected;
private _boundingBox;
lastMatrixWorld: THREE.Matrix4 | null;
get sh1(): Float32Array | undefined;
get sh2(): Float32Array | undefined;
get sh3(): Float32Array | undefined;
/**
* 投影后 2D 协方差对角线上的「纯膨胀」量,单位屏幕空间方差 px²。
* 只放大 splat、**不**调整 opacity,用于让亚像素 splat 不至于消失/闪烁
* (即 Inria 原版 3DGS 的 dilation trick)。
* 默认:antiAliased 数据为 0(不需要兜底),否则为 0.3。
*/
get preBlurAmount(): number;
set preBlurAmount(value: number);
/**
* 投影后 2D 协方差对角线上的「低通核」量,单位屏幕空间方差 px²。
* 除膨胀协方差外还按 sqrt(det(Σ) / det(Σ + εI)) 补偿 opacity,使 splat 能量守恒
* —— 这就是 Mip-Splatting 在 2D 端的抗锯齿(EWA 低通近似)。
* 默认:antiAliased 数据为 0.3(须与训练一致),否则为 0(不启用)。
*/
get blurAmount(): number;
set blurAmount(value: number);
/** 清除手动覆盖,回到由 antiAliased 推导的默认值。 */
resetBlurAmounts(): void;
constructor(splatData?: SplatData);
get selected(): boolean;
set selected(selected: boolean);
get boundingBox(): THREE.Box3;
dispose(): void;
/**
* 从 packedData 即时解码第 index 个 splat 的 3D 协方差矩阵(half-precision → float)。
* 用于 BVH 法线拟合——只在命中点按需解码。
* packedData texel1 布局:[4]=cov00|cov01(half2), [5]=cov02|cov11(half2), [6]=cov12|cov22(half2)。
* 返回 6 个分量 [s00, s01, s02, s11, s12, s22],或 null 如果数据不足。
*/
decodeCov3D(index: number): Float32Array | null;
}