import * as THREE from 'three'; import { type ParticleSettings } from './particles.js'; import { type Character, type Detail, type FaceLayer, type Pose, type Sample, type Shape } from './model.js'; import { type EyeGazes, type Gaze, type PointerLook } from './gaze.js'; export interface RenderOptions { width: number; height: number; displaySize?: number; background?: string | null; cursor?: { x: number; y: number; }; rotation?: { x: number; y: number; z: number; }; zoom?: number; framing?: 'portrait' | 'character'; pixelRatio?: number; pointerLook?: PointerLook; eyeGazes?: EyeGazes; reducedMotion?: boolean; } /** Cursor pitch owns the vertical look direction, independent of the resting tilt. */ export declare function characterRotation(character: Pick, pose: Pick, rotation?: { x: number; y: number; z: number; }, cursor?: Gaze): { x: number; y: number; z: number; }; /** Anchor the rounded highlight to the face direction shown by the orbit marker. * Match the former cursor travel at 28° yaw / 16° pitch, with a bounded rim. */ export declare function toonLightOffset(orientation: THREE.Quaternion): Gaze; /** Size adaptation is render-only; larger sizes restore the authored appearance. */ export declare function faceForSize(character: Character, sample: Sample, size: number): { character: Character; sample: Sample; simpleEyes: boolean; }; export declare const bodyHeight: (shape: Shape) => 1 | 2; export declare function radiusAt(shape: Shape, y: number): number; export declare function effectEnvelope(phase: number): number; export declare function eyeRadius(pose: Pose, character: Character, detail: Detail, side: number): number; export declare function projectedEye(character: Character, pose: Pose, blink: number, side: number, matrix: THREE.Matrix4, camera: THREE.Camera, layers?: FaceLayer[]): { center: THREE.Vector3; right: THREE.Vector3; up: THREE.Vector3; }; export declare function resolveEyeGazes(character: Character, pose: Pose, blink: number, matrix: THREE.Matrix4, camera: THREE.Camera, gaze: Gaze, pointer?: PointerLook, layers?: FaceLayer[]): EyeGazes; export declare function compactMouthOffset(size: number, faceScale: number, viewHeight: number, outputHeight: number): number; export declare function drawFace(ctx: CanvasRenderingContext2D, pose: Pose, character: Character, blink: number, detail: Detail, gaze: { x: number; y: number; }, effects?: { phase?: number; tearAmount?: number; eyeGazes?: EyeGazes; faceLayers?: FaceLayer[]; simpleEyes?: boolean; mouthFollowsEyes?: boolean; mouthOffset?: number; }): void; export declare function drawProp(ctx: CanvasRenderingContext2D, prop: Pose['prop'], color: string, phase?: number, settings?: Partial): void; export declare class CharacterRenderer { readonly canvas: HTMLCanvasElement | null; readonly gl: THREE.WebGLRenderer | null; private scene; private shadowScene; private camera; private root; private body; private lightFill; private face; private faceCanvas; private faceCtx; private faceTexture; private propCanvas; private propCtx; private propTexture; private prop; private shadow; private shape; private squareBottom; private lastFaceKey; private resolvedEyes; private lastProp; private disposed; private options; private captured?; constructor(canvas: HTMLCanvasElement | null, options: RenderOptions); resize(width: number, height: number, displaySize?: number): void; render(character: Character, sample: Sample, options?: Partial, gaze?: { x: number; y: number; }): void; snapshotScene(): { character: Character; sample: Sample; gaze: Gaze; simpleEyes: boolean; options: RenderOptions; camera: THREE.OrthographicCamera; body: THREE.Mesh, THREE.ShaderMaterial, THREE.Object3DEventMap>; lightFill: THREE.Mesh, THREE.ShaderMaterial, THREE.Object3DEventMap>; face: THREE.Mesh; prop: THREE.Sprite; shadow: THREE.Mesh; eyeGazes: EyeGazes | undefined; }; orientation(): THREE.Quaternion; eyeGazes(): { left: { x: number; y: number; }; right: { x: number; y: number; }; } | undefined; dispose(): void; } export declare function thumbnail(character: Character, pose?: Pose, size?: number): string; //# sourceMappingURL=renderer.d.ts.map