import { type BufferGeometry } from "three";
/**
 * Options for geometry simplification
 */
export interface SimplifyOptions {
    /** Target ratio of triangles to keep (0-1) */
    ratio?: number;
    /** Maximum error tolerance */
    error?: number;
    /** Lock border vertices during simplification */
    lockBorder?: boolean;
    /** Use sparse simplification */
    sparse?: boolean;
    /** Use absolute error metric */
    errorAbsolute?: boolean;
    /** Prune unnecessary vertices */
    prune?: boolean;
    /** Optimize memory by using smaller index types */
    optimizeMemory?: boolean;
    /** Log appearance error after simplification */
    logAppearanceError?: boolean;
}
/**
 * LOD (Level of Detail) configuration
 */
export interface LODConfig {
    ratio: number;
    error?: number;
}
/**
 * Predefined LOD ranges optimized for performance
 */
export declare const performanceRangeLOD: number[];
/**
 * Predefined LOD ranges with balanced quality/performance
 */
export declare const balancedRangeLOD: number[];
/**
 * Predefined LOD ranges optimized for quality
 */
export declare const qualityRangeLOD: number[];
/**
 * Core simplification function using meshoptimizer
 * @param indices - Index buffer array
 * @param positions - Position buffer array
 * @param options - Simplification options
 * @returns Tuple of [simplified indices, appearance error]
 */
declare function simplify(indices: Uint8Array | Uint16Array | Uint32Array | number[], positions: Float32Array | number[], options: SimplifyOptions): Promise<[Uint8Array | Uint16Array | Uint32Array, number]>;
/**
 * Simplify a BufferGeometry
 * @param geometry - Input geometry (must be indexed)
 * @param options - Simplification options
 * @returns Simplified geometry clone
 */
export declare function simplifyGeometry(geometry: BufferGeometry, options: SimplifyOptions): Promise<BufferGeometry>;
/**
 * Simplify multiple geometries
 * @param geometries - Array of geometries to simplify
 * @param options - Simplification options (can be array for per-geometry options)
 * @returns Array of simplified geometries
 */
export declare function simplifyGeometries(geometries: BufferGeometry[], options: SimplifyOptions | SimplifyOptions[]): Promise<BufferGeometry[]>;
/**
 * Simplify geometry by error tolerance (ratio = 0)
 * @param geometry - Input geometry
 * @param error - Maximum error tolerance
 * @returns Simplified geometry
 */
export declare function simplifyGeometryByError(geometry: BufferGeometry, error: number): Promise<BufferGeometry>;
/**
 * Simplify multiple geometries by error tolerance
 * @param geometries - Array of geometries
 * @param errors - Error tolerance (can be array for per-geometry errors)
 * @returns Array of simplified geometries
 */
export declare function simplifyGeometriesByError(geometries: BufferGeometry[], errors: number | number[]): Promise<BufferGeometry[]>;
/**
 * Create multiple LOD levels for a geometry using error-based simplification
 * @param geometry - Input geometry
 * @param lodCount - Number of LOD levels to generate
 * @param errorRange - Array of error values for each LOD level (default: balancedRangeLOD)
 * @returns Array of geometries [original, LOD1, LOD2, ...]
 */
export declare function simplifyGeometryByErrorLOD(geometry: BufferGeometry, lodCount: number, errorRange?: number[]): Promise<BufferGeometry[]>;
/**
 * Create multiple LOD levels for multiple geometries using error-based simplification
 * @param geometries - Array of input geometries
 * @param lodCounts - Number of LOD levels per geometry (can be array or single value)
 * @param errorRanges - Error ranges per geometry (default: balancedRangeLOD)
 * @returns Array of LOD arrays
 */
export declare function simplifyGeometriesByErrorLOD(geometries: BufferGeometry[], lodCounts: number | number[], errorRanges?: number[] | number[][]): Promise<BufferGeometry[][]>;
/**
 * Create multiple LOD levels for a geometry using custom options
 * @param geometry - Input geometry
 * @param lodOptions - Array of simplification options for each LOD level
 * @returns Array of geometries [original, LOD1, LOD2, ...]
 */
export declare function simplifyGeometryLOD(geometry: BufferGeometry, lodOptions: SimplifyOptions[]): Promise<BufferGeometry[]>;
/**
 * Create multiple LOD levels for multiple geometries using custom options
 * @param geometries - Array of input geometries
 * @param lodOptions - LOD options per geometry (can be array of arrays or single array)
 * @returns Array of LOD arrays
 */
export declare function simplifyGeometriesLOD(geometries: BufferGeometry[], lodOptions: SimplifyOptions[] | SimplifyOptions[][]): Promise<BufferGeometry[][]>;
export { simplify };
