/** * AgentAvatarMorph — deterministic native facial channels for the procedural character mesh. * * This is deliberately a small, falsifiable FACS/viseme substrate rather than a claim that the * segmented procedural head has production facial topology. It deforms real head/eye vertices * for a stable initial set (blink, AU12 smile, AU26 jaw-open, and aa/ee/oh visemes), emits a * replay digest, and reports unsupported authored targets instead of silently pretending. * * @module character-render */ export declare const NATIVE_FACIAL_MORPH_TARGETS: readonly ["blink_left", "blink_right", "brow_raise_left", "brow_raise_right", "smile", "jaw_open", "viseme_aa", "viseme_ee", "viseme_oh"]; export type NativeFacialMorphTarget = (typeof NATIVE_FACIAL_MORPH_TARGETS)[number]; export type NativeMorphWeights = Readonly>; export type NativeFacialTopology = 'procedural-head-v1' | 'neutral-anatomical-v2'; export type NativeMorphNormalPolicy = 'legacy-static-v1' | 'recompute-affected-v1'; export interface NativeFacialMorphGeometry { bodyVertexRange: { vertexStart: number; vertexCount: number; }; eyeVertexRange: { vertexStart: number; vertexCount: number; }; /** Optional native eyelid-shell range; V2 blink closes the authored lid topology as well as the globe. */ orbitalVertexRange?: { vertexStart: number; vertexCount: number; }; topology?: NativeFacialTopology; /** Neutral normals used as the deterministic reset state for opt-in expression recomputation. */ baseNormals?: Float32Array; /** Full native mesh index buffer used to find triangles adjacent to deformed vertices. */ indices?: Uint32Array; /** Legacy keeps serialized normals byte-identical; H3X recomputes only the affected neighborhood. */ normalPolicy?: NativeMorphNormalPolicy; } export interface NativeMorphReceipt { schemaVersion: 'holoscript.native-facial-morph.v1' | 'holoscript.native-facial-morph.v2' | 'holoscript.native-facial-morph.v3'; topology: NativeFacialTopology; appliedTargets: Array<{ target: NativeFacialMorphTarget; weight: number; }>; ignoredTargets: string[]; changedVertexCount: number; positionDigest: string; normalsRecomputed: boolean; /** Present only for the opt-in H3X expression-normal path. */ normalPolicy?: 'recompute-affected-v1'; /** Vertices whose complete one-ring normal was recomputed. */ normalAffectedVertexCount?: number; /** Recomputed normals whose final value differs from the neutral normal. */ normalChangedVertexCount?: number; /** Triangles traversed to rebuild the affected one-ring normals. */ normalTriangleCount?: number; /** Deterministic digest of the full emitted normal buffer. */ normalDigest?: string; } export interface NativeMorphResult { positions: Float32Array; /** Present only when the source opts into expression-time normal recomputation. */ normals?: Float32Array; receipt: NativeMorphReceipt; } /** * Apply supported facial weights to a fresh copy of `basePositions`. * * Repeated calls with the same base positions and weights are byte deterministic. Unknown target * names remain in `ignoredTargets`; callers use that list for honest mapped/stubbed reporting. */ export declare function applyNativeFacialMorph(basePositions: Float32Array, jointIndices: Uint32Array, geometry: NativeFacialMorphGeometry, authoredWeights: NativeMorphWeights): NativeMorphResult; //# sourceMappingURL=AgentAvatarMorph.d.ts.map