viral-viewer-2 6.8.8 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,116 @@
1
+ import { BufferGeometry, Vector3 } from "three";
2
+ import { ViralBatchedMesh, ViralMergedModel } from "../..";
3
+ export declare enum LODStrategy {
4
+ VERTEX_DECIMATION = "vertex_decimation",
5
+ TRIANGLE_REDUCTION = "triangle_reduction",
6
+ GEOMETRIC_SIMPLIFICATION = "geometric_simplification",
7
+ BOUNDING_BOX_REPLACEMENT = "bounding_box_replacement"
8
+ }
9
+ export interface LODLevel {
10
+ distance: number;
11
+ reductionRatio: number;
12
+ strategy: LODStrategy;
13
+ }
14
+ export interface LODResult {
15
+ level: number;
16
+ geometry: BufferGeometry;
17
+ vertexCount: number;
18
+ triangleCount: number;
19
+ reductionRatio: number;
20
+ }
21
+ export declare class FastLODGenerator {
22
+ private workerPool;
23
+ private lodLevels;
24
+ constructor(numberOfWorkers?: number);
25
+ private initializeWorkerPool;
26
+ /**
27
+ * Generate all LOD levels for a mesh concurrently
28
+ */
29
+ generateLODsForMesh(mesh: ViralBatchedMesh, customLODLevels?: LODLevel[]): Promise<Map<number, LODResult>>;
30
+ /**
31
+ * Generate LODs for entire merged model
32
+ */
33
+ generateLODsForMergedModel(mergedModel: ViralMergedModel): Promise<Map<string, Map<number, LODResult>>>;
34
+ /**
35
+ * Generate LOD for instanced mesh (base geometry only)
36
+ */
37
+ private generateLODsForInstancedMesh;
38
+ /**
39
+ * Generate single LOD level
40
+ */
41
+ private generateSingleLOD;
42
+ /**
43
+ * Quick LOD generation with preset configurations
44
+ */
45
+ generateQuickLODs(mergedModel: ViralMergedModel, preset?: "performance" | "balanced" | "quality"): Promise<Map<string, Map<number, LODResult>>>;
46
+ /**
47
+ * Set custom LOD levels
48
+ */
49
+ setLODLevels(levels: LODLevel[]): void;
50
+ /**
51
+ * Get current LOD configuration
52
+ */
53
+ getLODLevels(): LODLevel[];
54
+ dispose(): void;
55
+ }
56
+ export declare class LODManager {
57
+ private lodData;
58
+ private mergedModel;
59
+ private originalMeshes;
60
+ private currentLODLevels;
61
+ constructor(mergedModel: ViralMergedModel, lodData: Map<string, Map<number, LODResult>>);
62
+ private cacheOriginalMeshes;
63
+ /**
64
+ * Update LOD levels based on camera distance
65
+ */
66
+ updateLODBasedOnCamera(cameraPosition: Vector3): void;
67
+ private calculateDistanceToMesh;
68
+ private determineOptimalLODLevel;
69
+ private switchToLODLevel;
70
+ /**
71
+ * Get current LOD statistics
72
+ */
73
+ getLODStats(): Map<string, {
74
+ level: number;
75
+ vertexCount: number;
76
+ reductionRatio: number;
77
+ }>;
78
+ /**
79
+ * Force specific LOD level for all meshes
80
+ */
81
+ setGlobalLODLevel(level: number): void;
82
+ /**
83
+ * Reset all meshes to highest detail (LOD 0)
84
+ */
85
+ resetToHighestDetail(): void;
86
+ /**
87
+ * Get available LOD levels for a specific mesh
88
+ */
89
+ getAvailableLODLevels(meshId: string): number[];
90
+ }
91
+ export declare class LODPerformanceMonitor {
92
+ private frameCount;
93
+ private lastFrameTime;
94
+ private currentFPS;
95
+ private lodManager;
96
+ private performanceHistory;
97
+ constructor(lodManager: LODManager);
98
+ private startMonitoring;
99
+ private recordPerformanceData;
100
+ getCurrentFPS(): number;
101
+ getAverageFPS(): number;
102
+ getPerformanceReport(): {
103
+ currentFPS: number;
104
+ averageFPS: number;
105
+ currentLODStats: any;
106
+ recommendations: string[];
107
+ };
108
+ }
109
+ export interface LODPresetConfig {
110
+ name: string;
111
+ levels: LODLevel[];
112
+ description: string;
113
+ }
114
+ export declare const LODPresets: Record<string, LODPresetConfig>;
115
+ export declare function detectDeviceCapability(): "mobile" | "desktop" | "workstation";
116
+ export declare function getOptimalWorkerCount(): number;
@@ -20,4 +20,5 @@ export declare class WorkerThreadPool {
20
20
  */
21
21
  Enqueue<T, M>(inputData: T, resolve: (result: M) => void): void;
22
22
  private _PumpQueue;
23
+ dispose(): void;
23
24
  }
@@ -1,11 +1,12 @@
1
1
  import { ViralViewerApi } from "../../viral-viewer-api";
2
2
  import { RenderMaterial, ViralutionElement } from "../../types";
3
- import { Box3, Camera, Vector3 } from "three";
3
+ import { Box3, Vector3 } from "three";
4
4
  import { WorkerThreadPool } from "./base/worker-pool";
5
5
  import { ViralSpatialMeshManager } from "../custom-objects/viral-spatial-mesh-manager";
6
6
  export declare class LoadElementPatchWorker {
7
7
  viralViewerApi: ViralViewerApi;
8
8
  workerPool: WorkerThreadPool;
9
+ workerPool2: WorkerThreadPool;
9
10
  private lastRenderTime;
10
11
  private useSpatialMerging;
11
12
  constructor(viralViewerApi: ViralViewerApi);
@@ -19,10 +20,11 @@ export declare class LoadElementPatchWorker {
19
20
  * Main load method - automatically routes to spatial or traditional approach
20
21
  */
21
22
  loadElement(modelId: number, elements: ViralutionElement[], callbackOnSuccess?: () => void): void;
23
+ private loadInstancedElement;
22
24
  /**
23
25
  * Traditional load implementation (renamed for clarity)
24
26
  */
25
- private loadTraditionalElement;
27
+ private loadBatchedElement;
26
28
  /** How many vec4 slots your per-object data needs (mat4 -> 4, id/color -> 1, none -> 0). */
27
29
  private get perObjectUniformVec4();
28
30
  /** Reserve some vec4 slots for built-ins (MVP, lights, fog, etc.). Tweak if you use heavy materials. */
@@ -30,34 +32,11 @@ export declare class LoadElementPatchWorker {
30
32
  private computeBatchLimits;
31
33
  /** Split elements to chunks that satisfy both vertex and object limits. */
32
34
  private splitByLimits;
33
- /**
34
- * Initialize spatial mesh manager in scene only
35
- */
36
- initializeSpatialManager(worldBounds: Box3): void;
37
- /**
38
- * Disable spatial merging and fall back to original method
39
- */
40
- disableSpatialMerging(): void;
41
- /**
42
- * Enable spatial merging (requires spatial manager to be initialized in scene)
43
- */
44
- enableSpatialMerging(): void;
45
- /**
46
- * Load elements using spatial merging
47
- */
48
- private loadSpatialElement;
49
- /**
50
- * Create spatial meshes for elements
51
- */
52
- private createSpatialMeshes;
53
- /**
54
- * Update camera-based visibility for spatial meshes
55
- */
56
- updateSpatialVisibility(camera: Camera): void;
57
35
  /**
58
36
  * Create single merged mesh (traditional implementation)
59
37
  */
60
38
  private createSingleMergedMesh;
39
+ private createSingleInstancedMesh;
61
40
  /**
62
41
  * Create optimized material for merging
63
42
  */
@@ -0,0 +1 @@
1
+ export declare const workerCode: any;