UNPKG

@spatialwalk/avatarkit

Version:

SPAvatar SDK - 3D Gaussian Splatting Avatar Rendering SDK

188 lines 5.82 kB
import { AvatarCoreMemoryManager } from './avatarCoreMemory'; 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 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(用于过渡或调试) */ getCurrentFrameParams(frameIndex?: number): Promise<FlameParams>; /** * 初始化 Avatar Core 核心 */ private initializeAvatarCore; /** * 加载模板资源(从预加载的 ArrayBuffers) */ loadTemplateResourcesFromBuffers(templateResources: Record<string, ArrayBuffer>): Promise<boolean>; /** * 加载角色数据(从预加载的 ArrayBuffers) */ loadCharacterFromBuffers(shapeBuffer: ArrayBuffer, pointCloudBuffer: ArrayBuffer): Promise<boolean>; private loadAnimationFromData; /** * Load animation from ArrayBuffer (for CDN-based dynamic loading) */ loadAnimationFromBuffer(animData: ArrayBuffer): Promise<number>; switchAnimationFile(animationFile: string): Promise<number>; /** * 获取动画总帧数 */ getAnimationTotalFrames(): Promise<number>; /** * 从动画中获取指定帧的参数 */ getAnimationFrameParams(frameIndex?: number): 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 & { memoryStats?: ReturnType<AvatarCoreMemoryManager['getMemoryStats']>; flameInfo?: FlameInfo; characterInfo?: CharacterInfo; version?: string; }; /** * 释放当前角色和动画资源(但保留 core) */ 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] */ computeCompleteFrameFlat(params?: { frameIndex?: number; }): Promise<Float32Array | null>; /** * 计算帧并返回 GPU 友好的 flat 格式(从 FLAME 参数) * 🔑 用于 Realtime: 接受自定义 FLAME 参数并计算 Splat */ computeFrameFlatFromParams(flameParams: FlameParams): Promise<Float32Array | null>; } export {}; //# sourceMappingURL=avatarCoreAdapter.d.ts.map