/** * @holoscript/core LOD Types * * Comprehensive Level of Detail (LOD) type system for HoloScript. * Provides types, helpers, and configuration for LOD management. */ /** LOD selection strategy */ export type LODStrategy = 'distance' | 'screenSize' | 'performance' | 'manual' | 'hybrid'; /** LOD transition mode */ export type LODTransition = 'instant' | 'crossfade' | 'dither' | 'morph'; /** Mesh simplification algorithm */ export type SimplificationAlgorithm = 'quadricError' | 'edgeCollapse' | 'vertexClustering' | 'voxel'; /** Features that can be disabled at lower LODs */ export type LODFeature = 'shadows' | 'normals' | 'specular' | 'animation' | 'reflections' | 'particles' | 'physics' | 'skinning'; /** * Single LOD level configuration */ export interface LODLevel { /** LOD level (0 = highest detail) */ level: number; /** Distance threshold for this LOD (world units) */ distance: number; /** Screen coverage threshold (0-1, where 1 = full screen) */ screenCoverage?: number; /** Polygon reduction ratio (0-1, where 1 = full detail) */ polygonRatio: number; /** Texture resolution multiplier (0-1) */ textureScale: number; /** Asset path for pre-generated LOD mesh */ assetPath?: string; /** Features disabled at this LOD */ disabledFeatures: LODFeature[]; /** Custom priority for this level */ priority?: number; /** Triangle count at this LOD */ triangleCount?: number; /** Memory footprint in bytes */ memoryFootprint?: number; } /** * LOD group configuration for an object */ export interface LODConfig { /** Unique identifier */ id: string; /** Selection strategy */ strategy: LODStrategy; /** Transition mode between levels */ transition: LODTransition; /** Transition duration in seconds */ transitionDuration: number; /** LOD levels (sorted by detail: 0 = highest) */ levels: LODLevel[]; /** Hysteresis factor to prevent LOD flickering */ hysteresis: number; /** Bias to prefer higher/lower LODs (-1 to 1) */ bias: number; /** Enable LOD fading */ fadeEnabled: boolean; /** Maximum LOD level to use (limit for performance) */ maxLevel?: number; /** Force specific LOD level (for debugging) */ forcedLevel?: number; /** Whether this LOD config is enabled */ enabled: boolean; } /** * LOD group containing multiple objects with shared LOD */ export interface LODGroup { /** Group identifier */ id: string; /** Group name */ name: string; /** Object IDs in this group */ objectIds: string[]; /** Shared LOD configuration */ config: LODConfig; /** Bounding sphere center for distance calculation */ boundingCenter: [number, number, number]; /** Bounding sphere radius */ boundingRadius: number; /** Current active LOD level */ currentLevel: number; /** Is group visible */ visible: boolean; } /** * LOD hierarchy for hierarchical LOD (HLOD) */ export interface LODHierarchy { /** Root node ID */ rootId: string; /** Child hierarchies */ children: LODHierarchy[]; /** Combined mesh for this hierarchy level */ combinedMeshPath?: string; /** Distance threshold for using combined mesh */ combineDistance: number; /** Whether to use impostor (billboard) at far distances */ useImpostor: boolean; /** Impostor texture path */ impostorPath?: string; } /** * State of LOD selection for an object */ export interface LODState { /** Object ID */ objectId: string; /** Current LOD level */ currentLevel: number; /** Previous LOD level */ previousLevel: number; /** Transition progress (0-1) */ transitionProgress: number; /** Is transitioning between levels */ isTransitioning: boolean; /** Distance to camera */ cameraDistance: number; /** Screen coverage (0-1) */ screenCoverage: number; /** Last update timestamp */ lastUpdate: number; /** Frame time for last selection */ selectionTime: number; } /** * LOD metrics for performance monitoring */ export interface LODMetrics { /** Total objects with LOD */ totalObjects: number; /** Objects per LOD level */ objectsPerLevel: Map; /** Total triangles rendered */ trianglesRendered: number; /** Triangles saved by LOD */ trianglesSaved: number; /** Memory saved by LOD (bytes) */ memorySaved: number; /** Average LOD level */ averageLODLevel: number; /** LOD transitions this frame */ transitionsThisFrame: number; /** Selection time (ms) */ selectionTimeMs: number; } /** * Options for automatic LOD generation */ export interface LODGenerationOptions { /** Number of LOD levels to generate */ levelCount: number; /** Target reduction per level (e.g., 0.5 = halve triangles each level) */ reductionPerLevel: number; /** Simplification algorithm */ algorithm: SimplificationAlgorithm; /** Preserve UV seams */ preserveUVSeams: boolean; /** Preserve hard edges */ preserveHardEdges: boolean; /** Preserve material boundaries */ preserveMaterialBoundaries: boolean; /** Maximum error tolerance */ maxError: number; /** Lock border vertices */ lockBorders: boolean; /** Generate texture atlases for lower LODs */ generateAtlases: boolean; /** Distance ratios for each level */ distanceRatios?: number[]; } /** * Result of LOD generation */ export interface LODGenerationResult { /** Success status */ success: boolean; /** Generated levels */ levels: GeneratedLODLevel[]; /** Total time to generate (ms) */ generationTimeMs: number; /** Warnings during generation */ warnings: string[]; /** Errors if failed */ errors: string[]; } /** * Single generated LOD level */ export interface GeneratedLODLevel { /** LOD level */ level: number; /** Triangle count */ triangleCount: number; /** Vertex count */ vertexCount: number; /** Reduction ratio from original */ reductionRatio: number; /** Visual error metric */ errorMetric: number; /** Generated mesh data (positions) */ positions: Float32Array; /** Generated mesh data (normals) */ normals?: Float32Array; /** Generated mesh data (UVs) */ uvs?: Float32Array; /** Generated mesh data (indices) */ indices: Uint32Array; } /** Default LOD level configuration */ export declare const DEFAULT_LOD_LEVEL: LODLevel; /** Default LOD configuration */ export declare const DEFAULT_LOD_CONFIG: LODConfig; /** Default LOD generation options */ export declare const DEFAULT_GENERATION_OPTIONS: LODGenerationOptions; /** Standard distance thresholds for 3 LOD levels */ export declare const STANDARD_DISTANCES: number[]; /** Standard polygon ratios for 3 LOD levels */ export declare const STANDARD_RATIOS: number[]; /** * Create a LOD level with defaults */ export declare function createLODLevel(level: number, distance: number, polygonRatio: number, options?: Partial): LODLevel; /** * Create a standard LOD configuration with N levels */ export declare function createStandardLODConfig(id: string, levelCount?: number, baseDistance?: number, options?: Partial): LODConfig; /** * Create LOD group from multiple objects */ export declare function createLODGroup(id: string, name: string, objectIds: string[], config: LODConfig, boundingCenter?: [number, number, number], boundingRadius?: number): LODGroup; /** * Create initial LOD state for an object */ export declare function createLODState(objectId: string): LODState; /** * Create empty LOD metrics */ export declare function createLODMetrics(): LODMetrics; /** * Calculate LOD level from distance using config */ export declare function selectLODLevelByDistance(distance: number, levels: LODLevel[], hysteresis?: number, currentLevel?: number): number; /** * Calculate LOD level from screen coverage */ export declare function selectLODLevelByScreenCoverage(screenCoverage: number, levels: LODLevel[]): number; /** * Calculate screen coverage from distance and object size */ export declare function calculateScreenCoverage(distance: number, objectRadius: number, fov?: number, _screenHeight?: number): number; /** * Get triangle count saved by current LOD level */ export declare function getTrianglesSaved(levels: LODLevel[], currentLevel: number, originalTriangles: number): number; /** * Validate LOD configuration */ export declare function validateLODConfig(config: LODConfig): { valid: boolean; errors: string[]; }; /** * Merge two LOD configurations */ export declare function mergeLODConfigs(base: LODConfig, override: Partial): LODConfig; /** * Get recommended LOD count based on object size and complexity */ export declare function getRecommendedLODCount(triangleCount: number, _boundingRadius: number): number; /** * Calculate optimal distance thresholds for LOD levels */ export declare function calculateOptimalDistances(boundingRadius: number, levelCount: number, maxViewDistance?: number): number[]; //# sourceMappingURL=LODTypes.d.ts.map