@spatialwalk/avatarkit
Version:
SPAvatar SDK - 3D Gaussian Splatting Avatar Rendering SDK
237 lines • 7.85 kB
TypeScript
/**
* Avatar Core WASM 适配器
*
* 完全替换 FlameComplete3DGSManager,提供 avatar_core_wasm 的完整功能
* 包括牙齿细分、眼部追踪等高级特性
*/
export interface WasmModuleConfig {
baseUrl?: string;
[key: string]: unknown;
}
export interface AvatarCoreOptions {
logLevel?: 'basic' | 'verbose';
enableValidation?: boolean;
enablePerformanceMetrics?: boolean;
retryCount?: number;
baseAssetsPath?: string;
modelFolder?: string;
wasmConfig?: WasmModuleConfig;
wasmPath?: string;
}
interface PerformanceMetrics {
initTime: number;
loadTime: number;
computeFrames: number;
totalComputeTime: number;
averageComputeTime: number;
}
export interface FlameInfo {
vertexCount: number;
faceCount: number;
jointCount: number;
}
export interface CharacterInfo {
pointCount: number;
hasAnimation: boolean;
}
export interface FlameParams {
shape_params?: number[];
expr_params?: number[];
rotation?: number[];
translation?: number[];
neck_pose?: number[];
jaw_pose?: number[];
eyes_pose?: number[];
eyelid?: number[];
has_eyelid?: boolean;
}
export declare class AvatarCoreAdapter {
private options;
private wasmConfig;
private wasmModule;
private memoryManager;
private coreHandle;
private characterHandles;
private animationHandles;
private characterHandle;
private animationHandle;
private totalFrames;
private isInitialized;
private isCharacterLoaded;
private api;
private performanceMetrics;
wasmTime: number;
private errorCodes;
private flameInfo?;
private characterInfo?;
constructor(options?: AvatarCoreOptions);
/**
* 加载 WASM 模块并设置 API
* 每次都创建全新的 WASM 实例,确保 C++ 内存是干净的
*
* 注意:这里使用动态 import() 导入 WASM 模块。
* Vite 在构建时会自动为 WASM 文件和 JS glue 代码添加 hash(如 avatar_core_wasm-CxWuw7eS.wasm),
* 确保浏览器缓存与版本一致,不会有缓存问题。
*
* Hash 的作用机制:
* - WASM 文件内容变化 → hash 自动变化 → URL 变化 → 浏览器拉取新版本
* - WASM 文件内容不变 → hash 保持不变 → URL 不变 → 浏览器使用缓存
* - Emscripten 生成的 JS 内部会使用 hard-coded 的 hash 路径加载 .wasm 文件
*/
loadWASMModule(): Promise<void>;
/**
* 验证 WASM 模块功能
*/
private validateWASMModule;
/**
* 初始化内存视图
*/
private initializeMemoryViews;
/**
* 设置 C API 函数包装
*/
private setupCAPIFunctions;
/**
* 读取当前动画帧的 FlameParams(用于过渡或调试)
*/
/**
* Get current frame parameters
* @param frameIndex Frame index
* @param characterId Optional character ID for multi-character support
*/
getCurrentFrameParams(frameIndex?: number, characterId?: string): Promise<FlameParams>;
/**
* 初始化 Avatar Core 核心
*/
private initializeAvatarCore;
/**
* 加载模板资源(从预加载的 ArrayBuffers)
*/
loadTemplateResourcesFromBuffers(templateResources: Record<string, ArrayBuffer>): Promise<boolean>;
/**
* 加载角色数据(从预加载的 ArrayBuffers)
*/
/**
* Load character from buffers and return handle
* @param shapeBuffer Shape data buffer
* @param pointCloudBuffer Point cloud data buffer
* @param characterId Optional character ID for multi-character support
* @returns Character handle
*/
loadCharacterFromBuffers(shapeBuffer: ArrayBuffer, pointCloudBuffer: ArrayBuffer, characterId?: string): Promise<number>;
private loadAnimationFromData;
/**
* Load animation from ArrayBuffer (for CDN-based dynamic loading)
* @param animData Animation data buffer
* @param characterId Optional character ID for multi-character support
* @returns Animation handle
*/
loadAnimationFromBuffer(animData: ArrayBuffer, characterId?: string): Promise<number>;
switchAnimationFile(animationFile: string): Promise<number>;
/**
* 获取动画总帧数
* @param animationHandle Optional animation handle (for multi-character support)
*/
getAnimationTotalFrames(animationHandle?: number): Promise<number>;
/**
* 从动画中获取指定帧的参数
* @param frameIndex Frame index
* @param characterId Optional character ID for multi-character support
*/
getAnimationFrameParams(frameIndex?: number, characterId?: string): Promise<number>;
/**
* 设置眼部追踪配置(对齐 app 实现)
*/
setEyeTrackingConfig(config: {
enabled: boolean;
auto_eyelid_adjustment?: boolean;
eyelid_threshold?: number;
}): Promise<boolean>;
/**
* 设置眼部追踪目标(高级功能)
*/
setGazeTarget(x: number, y: number, z: number): Promise<boolean>;
/**
* 重置眼部追踪
*/
resetEyeTracking(): Promise<boolean>;
/**
* 查询 FLAME 模型信息
*/
private queryFlameInfo;
/**
* 查询角色信息
*/
private queryCharacterInfo;
/**
* 检查错误码并抛出异常
*/
private checkError;
/**
* 更新进度回调
*/
private updateProgress;
/**
* 获取性能指标
*/
getPerformanceMetrics(): PerformanceMetrics & {
flameInfo?: FlameInfo;
characterInfo?: CharacterInfo;
version?: string;
};
/**
* 释放当前角色和动画资源(但保留 core)
*/
/**
* Remove a specific character by handle
* @param characterHandle Character handle to remove
* @param characterId Optional character ID for cleanup
*/
removeCharacter(characterHandle: number, characterId?: string): void;
/**
* Release current character (legacy method, kept for backward compatibility)
* @deprecated Use removeCharacter() instead for multi-character support
*/
releaseCurrentCharacter(): void;
/**
* 释放所有资源(包括 core)
*/
release(): void;
/**
* 兼容性接口:提供与 FlameComplete3DGSManager 相同的接口
*/
loadFlameModel(_modelData: any): Promise<boolean>;
load3DGSData(_original3DGSPoints: any, _binding: any, _flameFaces: any): Promise<boolean>;
/**
* 计算帧并返回 GPU 友好的 flat 格式(零拷贝,协方差预计算)
* 🚀 性能优化版本:
* - C++ 预计算协方差矩阵
* - 零拷贝直接访问 WASM 内存http://localhost:3000/us/
* - 直接输出 GPU 格式 [pos3, color4, cov6]
*/
/**
* Compute complete frame from animation
* @param params Frame parameters
* @param characterHandle Optional character handle (for multi-character support)
*/
computeCompleteFrameFlat(params?: {
frameIndex?: number;
}, characterHandle?: number): Promise<Float32Array | null>;
/**
* 计算帧并返回 GPU 友好的 flat 格式(从 FLAME 参数)
* 🔑 用于 Realtime: 接受自定义 FLAME 参数并计算 Splat
*/
/**
* Compute frame from Flame parameters
* @param flameParams Flame parameters
* @param characterHandle Optional character handle (for multi-character support)
*/
computeFrameFlatFromParams(flameParams: FlameParams, characterHandle?: number): Promise<Float32Array | null>;
/**
* 获取 WASM 内存使用情况(MB)
* @returns WASM 内存使用量(MB),如果模块未加载则返回 null
*/
getWASMMemoryMB(): number | null;
}
export {};
//# sourceMappingURL=avatarCoreAdapter.d.ts.map