@needle-tools/gltf-progressive 1.0.0-alpha.3 → 1.0.0-alpha.5

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 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ export * from "./extension.js";
2
+ export * from "./plugins/index.js";
3
+ export { LODsManager } from "./lods_manager.js";
4
+ import { WebGLRenderer } from "three";
5
+ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
6
+ import { LODsManager } from "./lods_manager.js";
7
+ declare class UseNeedleGLTFProgressive {
8
+ /** */
9
+ enableLODsManager?: boolean;
10
+ }
11
+ /** Use this function to enable progressive loading of gltf models.
12
+ * @param url The url of the gltf model.
13
+ * @param renderer The renderer of the scene.
14
+ * @param loader The gltf loader.
15
+ * @param opts Options.
16
+ * @returns The LODsManager instance.
17
+ * @example In react-three-fiber:
18
+ * ```ts
19
+ * const url = 'https://yourdomain.com/yourmodel.glb'
20
+ * const { scene } = useGLTF(url, false, false, (loader) => {
21
+ * useNeedleGLTFProgressive(url, gl, loader)
22
+ * })
23
+ * return <primitive object={scene} />
24
+ * ```
25
+ */
26
+ export declare function useNeedleProgressive(url: string, renderer: WebGLRenderer, loader: GLTFLoader, opts?: UseNeedleGLTFProgressive): LODsManager;
package/lib/index.js ADDED
@@ -0,0 +1,38 @@
1
+ export * from "./extension.js";
2
+ export * from "./plugins/index.js";
3
+ export { LODsManager } from "./lods_manager.js";
4
+ import { addDracoAndKTX2Loaders, createLoaders } from "./loaders.js";
5
+ import { NEEDLE_progressive } from "./extension.js";
6
+ import { LODsManager } from "./lods_manager.js";
7
+ ;
8
+ /** Use this function to enable progressive loading of gltf models.
9
+ * @param url The url of the gltf model.
10
+ * @param renderer The renderer of the scene.
11
+ * @param loader The gltf loader.
12
+ * @param opts Options.
13
+ * @returns The LODsManager instance.
14
+ * @example In react-three-fiber:
15
+ * ```ts
16
+ * const url = 'https://yourdomain.com/yourmodel.glb'
17
+ * const { scene } = useGLTF(url, false, false, (loader) => {
18
+ * useNeedleGLTFProgressive(url, gl, loader)
19
+ * })
20
+ * return <primitive object={scene} />
21
+ * ```
22
+ */
23
+ export function useNeedleProgressive(url, renderer, loader, opts) {
24
+ createLoaders(renderer);
25
+ addDracoAndKTX2Loaders(loader);
26
+ loader.register(p => new NEEDLE_progressive(p, url));
27
+ const lod = new LODsManager(renderer);
28
+ if (opts?.enableLODsManager !== false) {
29
+ lod.enable();
30
+ }
31
+ return lod;
32
+ }
33
+ import { patchModelViewer } from "./plugins/modelviewer.js";
34
+ // Query once for model viewer. If a user does not have model-viewer in their page, this will return null.
35
+ document.addEventListener("DOMContentLoaded", () => {
36
+ patchModelViewer(document.querySelector("model-viewer"));
37
+ });
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAM/C,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,QAAuB,EAAE,MAAkB,EAAE,IAA+B;IAC1H,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,IAAI,EAAE,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACpC,GAAG,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAID,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,0GAA0G;AAC1G,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC/C,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAgB,CAAC,CAAC;AAC5E,CAAC,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { WebGLRenderer } from 'three';
2
- import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
- export declare function createLoaders(renderer: WebGLRenderer): void;
4
- export declare function addDracoAndKTX2Loaders(loader: GLTFLoader): void;
1
+ import { WebGLRenderer } from 'three';
2
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
3
+ export declare function createLoaders(renderer: WebGLRenderer): void;
4
+ export declare function addDracoAndKTX2Loaders(loader: GLTFLoader): void;
package/lib/loaders.js ADDED
@@ -0,0 +1,36 @@
1
+ import { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module.js';
2
+ import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
3
+ import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js';
4
+ const DEFAULT_DRACO_DECODER_LOCATION = 'https://www.gstatic.com/draco/versioned/decoders/1.4.1/';
5
+ const DEFAULT_KTX2_TRANSCODER_LOCATION = 'https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/';
6
+ let dracoLoader;
7
+ let meshoptDecoder;
8
+ let ktx2Loader;
9
+ export function createLoaders(renderer) {
10
+ if (!dracoLoader) {
11
+ dracoLoader = new DRACOLoader();
12
+ dracoLoader.setDecoderPath(DEFAULT_DRACO_DECODER_LOCATION);
13
+ dracoLoader.setDecoderConfig({ type: 'js' });
14
+ }
15
+ if (!ktx2Loader) {
16
+ ktx2Loader = new KTX2Loader();
17
+ ktx2Loader.setTranscoderPath(DEFAULT_KTX2_TRANSCODER_LOCATION);
18
+ }
19
+ if (!meshoptDecoder) {
20
+ meshoptDecoder = MeshoptDecoder;
21
+ }
22
+ if (renderer) {
23
+ ktx2Loader.detectSupport(renderer);
24
+ }
25
+ else
26
+ console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail");
27
+ }
28
+ export function addDracoAndKTX2Loaders(loader) {
29
+ if (!loader.dracoLoader)
30
+ loader.setDRACOLoader(dracoLoader);
31
+ if (!loader.ktx2Loader)
32
+ loader.setKTX2Loader(ktx2Loader);
33
+ if (!loader.meshoptDecoder)
34
+ loader.setMeshoptDecoder(meshoptDecoder);
35
+ }
36
+ //# sourceMappingURL=loaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loaders.js","sourceRoot":"","sources":["../../src/loaders.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,MAAM,8BAA8B,GAAG,yDAAyD,CAAC;AACjG,MAAM,gCAAgC,GAAG,uEAAuE,CAAC;AAGjH,IAAI,WAAwB,CAAC;AAC7B,IAAI,cAAqC,CAAC;AAC1C,IAAI,UAAsB,CAAC;AAG3B,MAAM,UAAU,aAAa,CAAC,QAAuB;IACjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,WAAW,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC;QAC3D,WAAW,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,UAAU,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,cAAc,GAAG,cAAc,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACX,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;;QAEG,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;AAE/G,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAkB;IACrD,IAAI,CAAC,MAAM,CAAC,WAAW;QACnB,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAE,MAAc,CAAC,UAAU;QAC3B,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAE,MAAc,CAAC,cAAc;QAC/B,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACjD,CAAC"}
@@ -1,51 +1,69 @@
1
- import { Frustum, Matrix4, Object3D, Vector3, WebGLRenderer } from "three";
2
- import { NEEDLE_progressive_plugin } from "./plugins/plugin.js";
3
- export declare class LODsManager {
4
- readonly renderer: WebGLRenderer;
5
- readonly projectionScreenMatrix: Matrix4;
6
- readonly cameraFrustrum: Frustum;
7
- updateInterval: number;
8
- pause: boolean;
9
- readonly plugins: NEEDLE_progressive_plugin[];
10
- constructor(renderer: WebGLRenderer);
11
- private _originalRender?;
12
- enable(): void;
13
- disable(): void;
14
- private onBeforeRender;
15
- private onAfterRender;
16
- static getObjectLODState(object: Object3D): LOD_state | undefined;
17
- /** Update the LOD levels for the renderer. */
18
- private updateLODs;
19
- /** Load progressive textures for the given material
20
- * @param material the material to load the textures for
21
- * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
22
- * @returns Promise with true if the LOD was loaded, false if not
23
- */
24
- private loadProgressiveTextures;
25
- /** Load progressive meshes for the given mesh
26
- * @param mesh the mesh to load the LOD for
27
- * @param index the index of the mesh if it's part of a group
28
- * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
29
- * @returns Promise with true if the LOD was loaded, false if not
30
- */
31
- private loadProgressiveMeshes;
32
- private readonly _sphere;
33
- private readonly _tempBox;
34
- private readonly tempMatrix;
35
- private readonly _tempWorldPosition;
36
- private readonly _tempBoxSize;
37
- private readonly _tempBox2Size;
38
- private static corner0;
39
- private static corner1;
40
- private static corner2;
41
- private static corner3;
42
- static debugDrawLine: (a: Vector3, b: Vector3, color: number) => void | null;
43
- private calculateLodLevel;
44
- }
45
- declare class LOD_state {
46
- lastLodLevel: number;
47
- lastScreenCoverage: number;
48
- readonly lastScreenspaceVolume: Vector3;
49
- lastCentrality: number;
50
- }
51
- export {};
1
+ import { Frustum, Matrix4, Object3D, Vector3, WebGLRenderer } from "three";
2
+ import { NEEDLE_progressive_plugin } from "./plugins/plugin.js";
3
+ /**
4
+ * The LODsManager class is responsible for managing the LODs and progressive assets in the scene. It will automatically update the LODs based on the camera position, screen coverage and mesh density of the objects.
5
+ * It must be enabled by calling the `enable` method.
6
+ *
7
+ * Instead of using the LODs manager directly you can also call `useNeedleProgressive` to enable progressive loading for a GLTFLoader
8
+ */
9
+ export declare class LODsManager {
10
+ /** Assign a function to draw debug lines for the LODs. This function will be called with the start and end position of the line and the color of the line when the `debugprogressive` query parameter is set.
11
+ */
12
+ static debugDrawLine?: (a: Vector3, b: Vector3, color: number) => void;
13
+ /** @internal */
14
+ static getObjectLODState(object: Object3D): LOD_state | undefined;
15
+ readonly renderer: WebGLRenderer;
16
+ readonly projectionScreenMatrix: Matrix4;
17
+ readonly cameraFrustrum: Frustum;
18
+ /**
19
+ * The update interval in frames. If set to 0, the LODs will be updated every frame. If set to 1, the LODs will be updated every second frame, etc.
20
+ */
21
+ updateInterval: number;
22
+ /**
23
+ * If set to true, the LODsManager will not update the LODs.
24
+ */
25
+ pause: boolean;
26
+ readonly plugins: NEEDLE_progressive_plugin[];
27
+ constructor(renderer: WebGLRenderer);
28
+ private _originalRender?;
29
+ /**
30
+ * Enable the LODsManager. This will replace the render method of the renderer with a method that updates the LODs.
31
+ */
32
+ enable(): void;
33
+ disable(): void;
34
+ private onBeforeRender;
35
+ private onAfterRender;
36
+ /** Update the LOD levels for the renderer. */
37
+ private updateLODs;
38
+ /** Load progressive textures for the given material
39
+ * @param material the material to load the textures for
40
+ * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
41
+ * @returns Promise with true if the LOD was loaded, false if not
42
+ */
43
+ private loadProgressiveTextures;
44
+ /** Load progressive meshes for the given mesh
45
+ * @param mesh the mesh to load the LOD for
46
+ * @param index the index of the mesh if it's part of a group
47
+ * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
48
+ * @returns Promise with true if the LOD was loaded, false if not
49
+ */
50
+ private loadProgressiveMeshes;
51
+ private readonly _sphere;
52
+ private readonly _tempBox;
53
+ private readonly tempMatrix;
54
+ private readonly _tempWorldPosition;
55
+ private readonly _tempBoxSize;
56
+ private readonly _tempBox2Size;
57
+ private static corner0;
58
+ private static corner1;
59
+ private static corner2;
60
+ private static corner3;
61
+ private calculateLodLevel;
62
+ }
63
+ declare class LOD_state {
64
+ lastLodLevel: number;
65
+ lastScreenCoverage: number;
66
+ readonly lastScreenspaceVolume: Vector3;
67
+ lastCentrality: number;
68
+ }
69
+ export {};
@@ -0,0 +1,355 @@
1
+ import { Box3, Frustum, Matrix4, Mesh, Sphere, Vector3 } from "three";
2
+ import { NEEDLE_progressive } from "./extension.js";
3
+ import { createLoaders } from "./loaders.js";
4
+ import { getParam } from "./utils.js";
5
+ const debugProgressiveLoading = getParam("debugprogressive");
6
+ const suppressProgressiveLoading = getParam("noprogressive");
7
+ /**
8
+ * The LODsManager class is responsible for managing the LODs and progressive assets in the scene. It will automatically update the LODs based on the camera position, screen coverage and mesh density of the objects.
9
+ * It must be enabled by calling the `enable` method.
10
+ *
11
+ * Instead of using the LODs manager directly you can also call `useNeedleProgressive` to enable progressive loading for a GLTFLoader
12
+ */
13
+ export class LODsManager {
14
+ /** Assign a function to draw debug lines for the LODs. This function will be called with the start and end position of the line and the color of the line when the `debugprogressive` query parameter is set.
15
+ */
16
+ static debugDrawLine;
17
+ /** @internal */
18
+ static getObjectLODState(object) {
19
+ return object.userData?.LOD_state;
20
+ }
21
+ renderer;
22
+ projectionScreenMatrix = new Matrix4();
23
+ cameraFrustrum = new Frustum();
24
+ /**
25
+ * The update interval in frames. If set to 0, the LODs will be updated every frame. If set to 1, the LODs will be updated every second frame, etc.
26
+ */
27
+ updateInterval = 0;
28
+ /**
29
+ * If set to true, the LODsManager will not update the LODs.
30
+ */
31
+ pause = false;
32
+ plugins = [];
33
+ constructor(renderer) {
34
+ this.renderer = renderer;
35
+ }
36
+ _originalRender;
37
+ /**
38
+ * Enable the LODsManager. This will replace the render method of the renderer with a method that updates the LODs.
39
+ */
40
+ enable() {
41
+ if (this._originalRender)
42
+ return;
43
+ let stack = 0;
44
+ // Save the original render method
45
+ this._originalRender = this.renderer.render;
46
+ const self = this;
47
+ let frames = 0;
48
+ createLoaders(this.renderer);
49
+ this.renderer.render = function (scene, camera) {
50
+ const frame = frames++;
51
+ const stack_level = stack++;
52
+ self.onBeforeRender(scene, camera, stack_level, frame);
53
+ self._originalRender.call(this, scene, camera);
54
+ self.onAfterRender(scene, camera, stack_level, frame);
55
+ stack--;
56
+ };
57
+ }
58
+ disable() {
59
+ if (!this._originalRender)
60
+ return;
61
+ this.renderer.render = this._originalRender;
62
+ this._originalRender = undefined;
63
+ }
64
+ onBeforeRender(_scene, _camera, _stack, _frame) {
65
+ }
66
+ onAfterRender(scene, camera, stack, frame) {
67
+ if (suppressProgressiveLoading)
68
+ return;
69
+ if (this.pause)
70
+ return;
71
+ if (this.updateInterval > 0 && frame % this.updateInterval != 0)
72
+ return;
73
+ this.projectionScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);
74
+ this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix, this.renderer.coordinateSystem);
75
+ const desiredDensity = 100_000;
76
+ // const isLowPerformanceDevice = false;// isMobileDevice();
77
+ // Experiment: quick & dirty performance-adaptive LODs
78
+ /*
79
+ if (this.context.time.smoothedFps < 59) {
80
+ currentAllowedDensity *= 0.5;
81
+ }
82
+ else if (this.context.time.smoothedFps >= 59) {
83
+ currentAllowedDensity *= 1.25;
84
+ }
85
+ */
86
+ const renderList = this.renderer.renderLists.get(scene, stack);
87
+ const opaque = renderList.opaque;
88
+ for (const entry of opaque) {
89
+ const object = entry.object;
90
+ if (object instanceof Mesh || (object.isMesh)) {
91
+ this.updateLODs(scene, camera, object, desiredDensity);
92
+ }
93
+ }
94
+ }
95
+ /** Update the LOD levels for the renderer. */
96
+ updateLODs(scene, camera, object, desiredDensity) {
97
+ for (const plugin of this.plugins) {
98
+ plugin.onBeforeUpdateLOD?.(this.renderer, scene, camera, object);
99
+ }
100
+ // we currently only support auto LOD changes for meshes
101
+ let state = object.userData.LOD_state;
102
+ if (!state) {
103
+ state = new LOD_state();
104
+ object.userData.LOD_state = state;
105
+ }
106
+ let level = this.calculateLodLevel(camera, object, state, desiredDensity);
107
+ level = Math.round(level);
108
+ // if (object.name == "Object_20")
109
+ // console.log(object.name, state.lastScreenCoverage, level)
110
+ if (level >= 0) {
111
+ this.loadProgressiveMeshes(object, level);
112
+ }
113
+ // TODO: we currently can not switch texture lods because we need better caching for the textures internally (see copySettings in progressive + NE-4431)
114
+ let textureLOD = 0; // Math.max(0, LODlevel - 2)
115
+ if (object.material) {
116
+ const debugLevel = object["DEBUG:LOD"];
117
+ if (debugLevel != undefined)
118
+ textureLOD = debugLevel;
119
+ if (Array.isArray(object.material)) {
120
+ for (const mat of object.material) {
121
+ this.loadProgressiveTextures(mat, textureLOD);
122
+ }
123
+ }
124
+ else {
125
+ this.loadProgressiveTextures(object.material, textureLOD);
126
+ }
127
+ }
128
+ for (const plugin of this.plugins) {
129
+ plugin.onAfterUpdatedLOD?.(this.renderer, scene, camera, object, level);
130
+ }
131
+ state.lastLodLevel = level;
132
+ }
133
+ /** Load progressive textures for the given material
134
+ * @param material the material to load the textures for
135
+ * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
136
+ * @returns Promise with true if the LOD was loaded, false if not
137
+ */
138
+ loadProgressiveTextures(material, level) {
139
+ if (!material)
140
+ return Promise.resolve(null);
141
+ if (material.userData && material.userData.LOD !== level) {
142
+ material.userData.LOD = level;
143
+ return NEEDLE_progressive.assignTextureLOD(material, level);
144
+ }
145
+ return Promise.resolve(null);
146
+ }
147
+ /** Load progressive meshes for the given mesh
148
+ * @param mesh the mesh to load the LOD for
149
+ * @param index the index of the mesh if it's part of a group
150
+ * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
151
+ * @returns Promise with true if the LOD was loaded, false if not
152
+ */
153
+ loadProgressiveMeshes(mesh, level) {
154
+ if (!mesh)
155
+ return Promise.resolve(null);
156
+ if (!mesh.userData)
157
+ mesh.userData = {};
158
+ if (mesh.userData.LOD !== level) {
159
+ mesh.userData.LOD = level;
160
+ const originalGeometry = mesh.geometry;
161
+ return NEEDLE_progressive.assignMeshLOD(mesh, level).then(res => {
162
+ if (res && mesh.userData.LOD == level && originalGeometry != mesh.geometry) {
163
+ // update the lightmap
164
+ // this.applyLightmapping();
165
+ // if (this.handles) {
166
+ // for (const inst of this.handles) {
167
+ // // if (inst["LOD"] < level) continue;
168
+ // // inst["LOD"] = level;
169
+ // inst.setGeometry(mesh.geometry);
170
+ // }
171
+ // }
172
+ }
173
+ return res;
174
+ });
175
+ }
176
+ return Promise.resolve(null);
177
+ }
178
+ // private testIfLODLevelsAreAvailable() {
179
+ _sphere = new Sphere();
180
+ _tempBox = new Box3();
181
+ tempMatrix = new Matrix4();
182
+ _tempWorldPosition = new Vector3();
183
+ _tempBoxSize = new Vector3();
184
+ _tempBox2Size = new Vector3();
185
+ static corner0 = new Vector3();
186
+ static corner1 = new Vector3();
187
+ static corner2 = new Vector3();
188
+ static corner3 = new Vector3();
189
+ calculateLodLevel(camera, mesh, state, desiredDensity) {
190
+ if (!mesh)
191
+ return -1;
192
+ // if this is using instancing we always load level 0
193
+ // if (this.isInstancingActive) return 0;
194
+ /** rough measure of "triangles on quadratic screen" – we're switching LODs based on this metric. */
195
+ /** highest LOD level we'd ever expect to be generated */
196
+ const maxLevel = 10;
197
+ let level = maxLevel + 1;
198
+ if (camera) {
199
+ if (debugProgressiveLoading && mesh["DEBUG:LOD"] != undefined) {
200
+ return mesh["DEBUG:LOD"];
201
+ }
202
+ // The mesh info contains also the density for all available LOD level so we can use this for selecting which level to show
203
+ const lodsInfo = NEEDLE_progressive.getMeshLODInformation(mesh.geometry);
204
+ const lods = lodsInfo?.lods;
205
+ // We can skip all this if we dont have any LOD information - we can ask the progressive extension for that
206
+ if (!lods || lods.length <= 0) {
207
+ return 99;
208
+ }
209
+ if (!this.cameraFrustrum?.intersectsObject(mesh)) {
210
+ // console.log("Mesh not visible");
211
+ // if (debugProgressiveLoading && mesh.geometry.boundingSphere) {
212
+ // const bounds = mesh.geometry.boundingSphere;
213
+ // this._sphere.copy(bounds);
214
+ // this._sphere.applyMatrix4(mesh.matrixWorld);
215
+ // Gizmos.DrawWireSphere(this._sphere.center, this._sphere.radius * 1.01, 0xff5555, .5);
216
+ // }
217
+ // the object is not visible by the camera
218
+ return 99;
219
+ }
220
+ const box = mesh.geometry.boundingBox;
221
+ if (box && camera.isPerspectiveCamera) {
222
+ const cam = camera;
223
+ // hack: if the mesh has vertex colors, has less than 100 vertices we always select the highest LOD
224
+ if (mesh.geometry.attributes.color && mesh.geometry.attributes.color.count < 100) {
225
+ if (mesh.geometry.boundingSphere) {
226
+ this._sphere.copy(mesh.geometry.boundingSphere);
227
+ this._sphere.applyMatrix4(mesh.matrixWorld);
228
+ const worldPosition = camera.getWorldPosition(this._tempWorldPosition);
229
+ if (this._sphere.containsPoint(worldPosition)) {
230
+ return 0;
231
+ }
232
+ }
233
+ }
234
+ // calculate size on screen
235
+ this._tempBox.copy(box);
236
+ this._tempBox.applyMatrix4(mesh.matrixWorld);
237
+ // Converting into projection space has the disadvantage that objects further to the side
238
+ // will have a much larger coverage, especially with high-field-of-view situations like in VR.
239
+ // Alternatively, we could attempt to calculate angular coverage (some kind of polar coordinates maybe?)
240
+ // or introduce a correction factor based on "expected distortion" of the object.
241
+ // High distortions would lead to lower LOD levels.
242
+ // "Centrality" of the calculated screen-space bounding box could be a factor here –
243
+ // what's the distance of the bounding box to the center of the screen?
244
+ this._tempBox.applyMatrix4(this.projectionScreenMatrix);
245
+ // TODO might need to be adjusted for cameras that are rendered during an XR session but are
246
+ // actually not XR cameras (e.g. a render texture)
247
+ if (this.renderer.xr.enabled && cam.fov > 70) {
248
+ // calculate centrality of the bounding box - how close is it to the screen center
249
+ const min = this._tempBox.min;
250
+ const max = this._tempBox.max;
251
+ let minX = min.x;
252
+ let minY = min.y;
253
+ let maxX = max.x;
254
+ let maxY = max.y;
255
+ // enlarge
256
+ const enlargementFactor = 2.0;
257
+ const centerBoost = 1.5;
258
+ const centerX = (min.x + max.x) * 0.5;
259
+ const centerY = (min.y + max.y) * 0.5;
260
+ minX = (minX - centerX) * enlargementFactor + centerX;
261
+ minY = (minY - centerY) * enlargementFactor + centerY;
262
+ maxX = (maxX - centerX) * enlargementFactor + centerX;
263
+ maxY = (maxY - centerY) * enlargementFactor + centerY;
264
+ const xCentrality = minX < 0 && maxX > 0 ? 0 : Math.min(Math.abs(min.x), Math.abs(max.x));
265
+ const yCentrality = minY < 0 && maxY > 0 ? 0 : Math.min(Math.abs(min.y), Math.abs(max.y));
266
+ const centrality = Math.max(xCentrality, yCentrality);
267
+ // heuristically determined to lower quality for objects at the edges of vision
268
+ state.lastCentrality = (centerBoost - centrality) * (centerBoost - centrality) * (centerBoost - centrality);
269
+ }
270
+ else {
271
+ state.lastCentrality = 1;
272
+ }
273
+ const boxSize = this._tempBox.getSize(this._tempBoxSize);
274
+ boxSize.multiplyScalar(0.5); // goes from -1..1, we want -0.5..0.5 for coverage in percent
275
+ if (screen.availHeight > 0)
276
+ boxSize.multiplyScalar(this.renderer.domElement.clientHeight / screen.availHeight); // correct for size of context on screen
277
+ boxSize.x *= cam.aspect;
278
+ const matView = camera.matrixWorldInverse;
279
+ const box2 = new Box3();
280
+ box2.copy(box);
281
+ box2.applyMatrix4(mesh.matrixWorld);
282
+ box2.applyMatrix4(matView);
283
+ const boxSize2 = box2.getSize(this._tempBox2Size);
284
+ // approximate depth coverage in relation to screenspace size
285
+ const max2 = Math.max(boxSize2.x, boxSize2.y);
286
+ const max1 = Math.max(boxSize.x, boxSize.y);
287
+ if (max1 != 0 && max2 != 0)
288
+ boxSize.z = boxSize2.z / Math.max(boxSize2.x, boxSize2.y) * Math.max(boxSize.x, boxSize.y);
289
+ state.lastScreenCoverage = Math.max(boxSize.x, boxSize.y, boxSize.z);
290
+ state.lastScreenspaceVolume.copy(boxSize);
291
+ state.lastScreenCoverage *= state.lastCentrality;
292
+ // draw screen size box
293
+ if (debugProgressiveLoading && LODsManager.debugDrawLine) {
294
+ const mat = this.tempMatrix.copy(this.projectionScreenMatrix);
295
+ mat.invert();
296
+ const corner0 = LODsManager.corner0;
297
+ const corner1 = LODsManager.corner1;
298
+ const corner2 = LODsManager.corner2;
299
+ const corner3 = LODsManager.corner3;
300
+ // get box corners, transform with camera space, and draw as quad lines
301
+ corner0.copy(this._tempBox.min);
302
+ corner1.copy(this._tempBox.max);
303
+ corner1.x = corner0.x;
304
+ corner2.copy(this._tempBox.max);
305
+ corner2.y = corner0.y;
306
+ corner3.copy(this._tempBox.max);
307
+ // draw outlines at the center of the box
308
+ const z = (corner0.z + corner3.z) * 0.5;
309
+ // all outlines should have the same depth in screen space
310
+ corner0.z = corner1.z = corner2.z = corner3.z = z;
311
+ corner0.applyMatrix4(mat);
312
+ corner1.applyMatrix4(mat);
313
+ corner2.applyMatrix4(mat);
314
+ corner3.applyMatrix4(mat);
315
+ LODsManager.debugDrawLine(corner0, corner1, 0x0000ff);
316
+ LODsManager.debugDrawLine(corner0, corner2, 0x0000ff);
317
+ LODsManager.debugDrawLine(corner1, corner3, 0x0000ff);
318
+ LODsManager.debugDrawLine(corner2, corner3, 0x0000ff);
319
+ }
320
+ let expectedLevel = 999;
321
+ // const framerate = this.context.time.smoothedFps;
322
+ if (lods && state.lastScreenCoverage > 0) {
323
+ for (let l = 0; l < lods.length; l++) {
324
+ const densityForThisLevel = lods[l].density;
325
+ const resultingDensity = densityForThisLevel / state.lastScreenCoverage;
326
+ if (resultingDensity < desiredDensity) {
327
+ expectedLevel = l;
328
+ break;
329
+ }
330
+ }
331
+ }
332
+ const isLowerLod = expectedLevel < level;
333
+ if (isLowerLod) {
334
+ level = expectedLevel;
335
+ }
336
+ }
337
+ // }
338
+ }
339
+ // if (this._lastLodLevel != level) {
340
+ // this._nextLodTestTime = this.context.time.realtimeSinceStartup + .5;
341
+ // if (debugProgressiveLoading) {
342
+ // if (debugProgressiveLoading == "verbose") console.warn(`LOD Level changed from ${this._lastLodLevel} to ${level} for ${this.name}`);
343
+ // this.drawGizmoLodLevel(true);
344
+ // }
345
+ // }
346
+ return level;
347
+ }
348
+ }
349
+ class LOD_state {
350
+ lastLodLevel = 0;
351
+ lastScreenCoverage = 0;
352
+ lastScreenspaceVolume = new Vector3();
353
+ lastCentrality = 0;
354
+ }
355
+ //# sourceMappingURL=lods_manager.js.map