@readyplayerme/visage
Version:
Easily display Ready Player Me avatars and 3D on the web.
71 lines (70 loc) • 3.2 kB
TypeScript
import { Material, Vector2, Object3D, Euler, Vector3, BufferGeometry, Skeleton, Group, Mesh, Object3DEventMap } from 'three';
import type { ObjectMap } from '@react-three/fiber';
import { GLTF } from 'three-stdlib';
import { Emotion } from 'src/components/Avatar/Avatar.component';
import { BloomConfiguration, MaterialConfiguration } from 'src/types';
export interface CustomNode extends Object3D {
geometry: BufferGeometry;
material: Material;
skeleton: Skeleton;
isMesh: boolean;
morphTargetInfluences?: number[];
}
export interface Nodes {
[node: string]: Object3D;
}
type Source = string | string[] | Blob | undefined | null;
export declare const getStoryAssetPath: (publicAsset: string) => string;
export declare const isValidFormat: (source: Source) => source is string | Blob;
export declare const clamp: (value: number, max: number, min: number) => number;
export declare const lerp: (start: number, end: number, time?: number) => number;
export declare function traverseMeshes(object: Object3D, callback: (material: Mesh) => void): void;
/**
* Avoid texture pixelation and add depth effect.
*/
export declare const normaliseMaterialsConfig: (scene: Group<Object3DEventMap>, bloomConfig?: BloomConfiguration, materialConfig?: MaterialConfiguration) => void;
interface UseHeadMovement {
nodes: Nodes;
isHalfBody?: boolean;
distance?: number;
activeRotation?: number;
rotationMargin?: Vector2;
enabled?: boolean;
}
/**
* Avatar head movement relative to cursor.
* When the model isn't a standard Ready Player Me avatar, the head movement won't take effect.
*/
export declare const useHeadMovement: ({ nodes, isHalfBody, distance, activeRotation, rotationMargin, enabled }: UseHeadMovement) => void;
/**
* Transfers Bone positions from source to target.
* @param targetNodes {object} - object that will be mutated
* @param sourceNodes {object} - object that will be used as reference
*/
export declare const mutatePose: (targetNodes?: ObjectMap['nodes'], sourceNodes?: ObjectMap['nodes']) => void;
export declare const useEmotion: (nodes: ObjectMap['nodes'] | Group, emotion?: Emotion) => void;
export declare const useGltfLoader: (source: Blob | string) => GLTF;
export declare const useGltfCachedLoader: (source: Blob | string) => GLTF;
export declare function usePersistantRotation(scene: Group): void;
export declare class Transform {
constructor();
scale: Vector3;
rotation: Euler;
position: Vector3;
}
export declare const useFallbackScene: (scene: Group, setter?: ((fallback: JSX.Element) => void) | undefined) => void;
export declare const useFallback: (nodes: Nodes, setter?: ((fallback: JSX.Element) => void) | undefined) => void;
export declare const triggerCallback: (callback?: () => void) => void;
export declare const expressions: {
blink: {
morphTarget: string;
morphTargetIndex: number;
offset: number;
duration: number;
}[];
};
/**
* Animates avatars facial expressions when morphTargets=ARKit,Eyes Extra is provided with the avatar.
*/
export declare const useIdleExpression: (expression: keyof typeof expressions, nodes: Nodes | Group) => void;
export {};