/**
 * Voxel proxies for coarse LODs, for foliage and other aggregate geometry.
 *
 * Triangle simplification breaks down on aggregate geometry such as a tree crown made of hundreds of
 * separate leaf clumps: below a few hundred triangles it can only delete or collapse whole clumps, so
 * the silhouette shrinks and the LOD error jumps. A voxel proxy keeps the volume instead: the mesh is
 * voxelized, gaps between clumps are closed, and a smooth closed surface is extracted (surface nets).
 * That surface is one connected shape, which simplifies gracefully to a handful of triangles.
 *
 * Every proxy vertex lies within about one cell of the original surface, and closing fills gaps of at most
 * two cells, so `VOXEL_ERROR_CELLS * cellSize` bounds how far the proxy deviates from the original.
 */
/** Deviation of a proxy from the source mesh, in cells (surface offset plus closed gaps). */
export declare const VOXEL_ERROR_CELLS = 2;
export interface VoxelProxy {
    positions: Float32Array;
    normals: Float32Array;
    colors: Float32Array | null;
    /** UV of a representative source sample near each vertex (null when the source has no UVs). */
    uvs: Float32Array | null;
    indices: Uint32Array;
    cellSize: number;
}
/**
 * Voxelizes the triangles `indices` of a mesh with `resolution` cells along its longest side and returns
 * a closed, smooth surface around the occupied volume (null if the mesh is empty).
 * With `uvs`, each proxy vertex takes the UV of the first source sample in its cell's voxels, so textured
 * geometry keeps plausible colors at a distance (UVs cannot be averaged across islands).
 */
export declare function buildVoxelProxy(positions: Float32Array, colors: Float32Array | null | undefined, indices: Uint32Array, resolution: number, uvs?: Float32Array | null): VoxelProxy | null;
