sandai-react
Version:
React components and utilities for the Sandai 3D AI Characters.
71 lines • 2.26 kB
TypeScript
import { VRM } from "@pixiv/three-vrm";
export interface FaceExpression<T = any> {
duration: number;
angry?: number;
happy?: number;
neutral?: number;
relaxed?: number;
sad?: number;
surprised?: number;
metadata?: T;
blinkLeft?: number;
blinkRight?: number;
blink?: number;
lookX?: number;
lookY?: number;
}
export declare class FaceExpressionManager {
private _vrm;
private _currentExpressionIndex;
private _expressionsQueue;
private _elapsedTime;
private _isActive;
private _vrmUrl;
private _vrmHasBlink;
private _autoBlinkManager;
private _frameOverride;
private _currentEmotionExpressionTargets;
constructor(vrm: VRM, vrmUrl: string);
get currentExpression(): {
angry: number;
happy: number;
neutral: number;
relaxed: number;
sad: number;
surprised: number;
};
private _getExpression;
private _lerpExpressions;
applyExpressions(expressions: FaceExpression[], ease?: boolean): void;
frameOverride(onFrame: (() => FaceExpression) | null): void;
processExpressions(delta: number): void;
normalizeExpression(expression: FaceExpression): {
duration: number;
angry?: number;
happy?: number;
neutral?: number;
relaxed?: number;
sad?: number;
surprised?: number;
metadata?: any;
blinkLeft?: number;
blinkRight?: number;
blink?: number;
lookX?: number;
lookY?: number;
};
private applyExpression;
/**
*
* @param key: expression key
* @param value: raw expression value
* @param negationOffset: if a different expression influences the same vertices already, this should be provided
* to negate that influence. For example, if "happy" closes the eyes, then "blink" should have a negative offset of 1.
* That way, since happy already sets the underlying blendshape to have a weight of 1, if "blink" is 1, blink will be set to 0.
* If "blink" is 0, then blink will be set to -1 to negate that effect.
* @param ease
*/
private applySingleExpression;
destroy(): void;
}
//# sourceMappingURL=FaceExpressionManager.d.ts.map