import { Texture, Scene, Mesh, Skeleton, Effect, Matrix } from '@babylonjs/core'; type DQClipInfo = { name: string; from: number; to: number; frames: number; fps: number; }; type DQBuildOpts = { useHalfDQ?: boolean; forceHalfDQ?: boolean; scaleEpsilon?: number; debugValidate?: boolean; /** * Manually specify animation ranges for .babylon files without embedded metadata. * If provided, these will be used instead of auto-detection. * Example: [{ from: 0, to: 33, name: 'Walk', fps: 30 }, { from: 34, to: 60, name: 'Run', fps: 30 }] */ manualAnimationRanges?: Array<{ from: number; to: number; name?: string; fps?: number; }>; defaultFPS?: number; }; type SerializedDQVAT = { kind: 'shado.dq-vat'; version: 1; componentType: 'float32' | 'float16'; byteOrder: 'little-endian'; widthTexels: number; heightTexels: number; framesTotal: number; bones: number; dqWidthBones: number; dqTilesX: number; dqStrideTexels: number; dqHasScale: boolean; clips: DQClipInfo[]; data: { encoding: 'base64'; byteLength: number; value: string; }; }; declare class VATBuilder { framesTotal: number; bones: number; private _dqTex?; private _clips; private _dqWidthBones; private _dqTilesX; private _dqStrideTexels; private _dqHasScale; private _dqWidthTexels; private _dqHeightTexels; private _dqComponentType; private _dqPixels?; get dqTex(): Texture | undefined; get dqWidthBones(): number; get dqTilesX(): number; get dqStrideTexels(): number; get dqHasScale(): boolean; get dqWidthTexels(): number; get dqHeightTexels(): number; get dqComponentType(): "float32" | "float16"; get clips(): DQClipInfo[]; static initialize(_engine?: any, _config?: any): Promise; /** Build DQ atlas from all animation groups that drive this skeleton. */ static buildFromScene(scene: Scene, mesh: Mesh, skeleton: Skeleton, opts?: DQBuildOpts): VATBuilder; toSerialized(): SerializedDQVAT; static fromSerialized(scene: Scene, serialized: SerializedDQVAT): VATBuilder; bind(effect: Effect): void; bindMaterial(material: { setTexture: Function; setInt: Function; }): void; dispose(): void; } /** * Export helper function to convert matrix to dual quaternion with hemisphere enforcement * Used by both production code and tests */ declare function matrixToDualQuaternion(M: Matrix): { qr: { x: number; y: number; z: number; w: number; }; qd: { x: number; y: number; z: number; w: number; }; scale: number; }; export { type DQBuildOpts as D, type SerializedDQVAT as S, VATBuilder as V, type DQClipInfo as a, matrixToDualQuaternion as m };