@loaders.gl/tiles 4.4.5 → 5.0.0-alpha.2

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.
Files changed (227) hide show
  1. package/LICENSE +14 -3
  2. package/README.md +110 -1
  3. package/dist/dist.dev.js +6588 -2057
  4. package/dist/dist.min.js +1 -1
  5. package/dist/image-set.d.ts +94 -0
  6. package/dist/image-set.d.ts.map +1 -0
  7. package/dist/image-set.js +243 -0
  8. package/dist/image-set.js.map +1 -0
  9. package/dist/index.cjs +6872 -2160
  10. package/dist/index.cjs.map +3 -4
  11. package/dist/index.d.ts +33 -9
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +18 -8
  14. package/dist/index.js.map +1 -1
  15. package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
  16. package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
  17. package/dist/point-cloud/point-cloud-tile.js +70 -0
  18. package/dist/point-cloud/point-cloud-tile.js.map +1 -0
  19. package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
  20. package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
  21. package/dist/point-cloud/point-cloud-tileset.js +510 -0
  22. package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
  23. package/dist/point-cloud/types.d.ts +64 -0
  24. package/dist/point-cloud/types.d.ts.map +1 -0
  25. package/dist/point-cloud/types.js +5 -0
  26. package/dist/point-cloud/types.js.map +1 -0
  27. package/dist/raster-set.d.ts +113 -0
  28. package/dist/raster-set.d.ts.map +1 -0
  29. package/dist/raster-set.js +274 -0
  30. package/dist/raster-set.js.map +1 -0
  31. package/dist/tileset-2d/adapter.d.ts +38 -0
  32. package/dist/tileset-2d/adapter.d.ts.map +1 -0
  33. package/dist/tileset-2d/adapter.js +5 -0
  34. package/dist/tileset-2d/adapter.js.map +1 -0
  35. package/dist/tileset-2d/index.d.ts +7 -0
  36. package/dist/tileset-2d/index.d.ts.map +1 -0
  37. package/dist/tileset-2d/index.js +6 -0
  38. package/dist/tileset-2d/index.js.map +1 -0
  39. package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
  40. package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
  41. package/dist/tileset-2d/tile-2d-header.js +181 -0
  42. package/dist/tileset-2d/tile-2d-header.js.map +1 -0
  43. package/dist/tileset-2d/tileset-2d.d.ts +201 -0
  44. package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
  45. package/dist/tileset-2d/tileset-2d.js +532 -0
  46. package/dist/tileset-2d/tileset-2d.js.map +1 -0
  47. package/dist/tileset-2d/types.d.ts +44 -0
  48. package/dist/tileset-2d/types.d.ts.map +1 -0
  49. package/dist/tileset-2d/types.js +5 -0
  50. package/dist/tileset-2d/types.js.map +1 -0
  51. package/dist/tileset-2d.d.ts +2 -0
  52. package/dist/tileset-2d.d.ts.map +1 -0
  53. package/dist/tileset-2d.js +5 -0
  54. package/dist/tileset-2d.js.map +1 -0
  55. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
  56. package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
  57. package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
  58. package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
  59. package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +133 -29
  60. package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
  61. package/dist/{tileset → tileset-3d/common}/tile-3d.js +282 -77
  62. package/dist/tileset-3d/common/tile-3d.js.map +1 -0
  63. package/dist/tileset-3d/common/tileset-3d.d.ts +317 -0
  64. package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
  65. package/dist/tileset-3d/common/tileset-3d.js +807 -0
  66. package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
  67. package/dist/tileset-3d/common/tileset-cache.d.ts +29 -0
  68. package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
  69. package/dist/{tileset → tileset-3d/common}/tileset-cache.js +12 -4
  70. package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
  71. package/dist/tileset-3d/common/tileset-source.d.ts +204 -0
  72. package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
  73. package/dist/tileset-3d/common/tileset-source.js +17 -0
  74. package/dist/tileset-3d/common/tileset-source.js.map +1 -0
  75. package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +15 -2
  76. package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
  77. package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +30 -3
  78. package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
  79. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +111 -0
  80. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -0
  81. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +340 -0
  82. package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -0
  83. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +189 -0
  84. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
  85. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +510 -0
  86. package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
  87. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +43 -0
  88. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
  89. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +119 -0
  90. package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
  91. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
  92. package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +3 -0
  93. package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
  94. package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
  95. package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
  96. package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
  97. package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
  98. package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
  99. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +5 -2
  100. package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
  101. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
  102. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
  103. package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +17 -23
  104. package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
  105. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
  106. package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
  107. package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +3 -0
  108. package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
  109. package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
  110. package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +1 -0
  111. package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
  112. package/dist/tileset-3d/helpers/frame-state.d.ts +86 -0
  113. package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
  114. package/dist/{tileset → tileset-3d}/helpers/frame-state.js +84 -9
  115. package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
  116. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
  117. package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
  118. package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
  119. package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
  120. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +72 -0
  121. package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
  122. package/dist/tileset-3d/helpers/tiles-3d-lod.js +257 -0
  123. package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
  124. package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts +134 -0
  125. package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts.map +1 -0
  126. package/dist/tileset-3d/helpers/tiles-3d-request-priority.js +179 -0
  127. package/dist/tileset-3d/helpers/tiles-3d-request-priority.js.map +1 -0
  128. package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
  129. package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
  130. package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
  131. package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
  132. package/dist/tileset-3d/helpers/zoom.js.map +1 -0
  133. package/dist/types.d.ts +9 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +3 -0
  136. package/dist/types.js.map +1 -1
  137. package/dist/utils/doubly-linked-list.d.ts.map +1 -1
  138. package/dist/utils/doubly-linked-list.js +1 -0
  139. package/dist/utils/doubly-linked-list.js.map +1 -1
  140. package/dist/utils/managed-array.d.ts.map +1 -1
  141. package/dist/utils/managed-array.js +1 -0
  142. package/dist/utils/managed-array.js.map +1 -1
  143. package/package.json +7 -6
  144. package/src/image-set.ts +328 -0
  145. package/src/index.ts +99 -9
  146. package/src/point-cloud/point-cloud-tile.ts +80 -0
  147. package/src/point-cloud/point-cloud-tileset.ts +713 -0
  148. package/src/point-cloud/types.ts +82 -0
  149. package/src/raster-set.ts +412 -0
  150. package/src/tileset-2d/adapter.ts +47 -0
  151. package/src/tileset-2d/index.ts +33 -0
  152. package/src/tileset-2d/tile-2d-header.ts +224 -0
  153. package/src/tileset-2d/tileset-2d.ts +716 -0
  154. package/src/tileset-2d/types.ts +39 -0
  155. package/src/tileset-2d.ts +5 -0
  156. package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
  157. package/src/{tileset → tileset-3d/common}/tile-3d.ts +348 -93
  158. package/src/tileset-3d/common/tileset-3d.ts +1087 -0
  159. package/src/{tileset → tileset-3d/common}/tileset-cache.ts +16 -8
  160. package/src/tileset-3d/common/tileset-source.ts +255 -0
  161. package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +32 -4
  162. package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +534 -0
  163. package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +632 -0
  164. package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +140 -0
  165. package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +4 -0
  166. package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
  167. package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +6 -2
  168. package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +19 -24
  169. package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +5 -1
  170. package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +2 -0
  171. package/src/tileset-3d/helpers/frame-state.ts +311 -0
  172. package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
  173. package/src/tileset-3d/helpers/tiles-3d-lod.ts +370 -0
  174. package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +301 -0
  175. package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
  176. package/src/types.ts +13 -0
  177. package/src/utils/doubly-linked-list.ts +2 -0
  178. package/src/utils/managed-array.ts +2 -0
  179. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +0 -7
  180. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
  181. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +0 -53
  182. package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
  183. package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
  184. package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
  185. package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
  186. package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
  187. package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
  188. package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
  189. package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
  190. package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
  191. package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
  192. package/dist/tileset/helpers/bounding-volume.js.map +0 -1
  193. package/dist/tileset/helpers/frame-state.d.ts +0 -28
  194. package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
  195. package/dist/tileset/helpers/frame-state.js.map +0 -1
  196. package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
  197. package/dist/tileset/helpers/i3s-lod.js.map +0 -1
  198. package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
  199. package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
  200. package/dist/tileset/helpers/tiles-3d-lod.js +0 -113
  201. package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
  202. package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
  203. package/dist/tileset/helpers/transform-utils.js.map +0 -1
  204. package/dist/tileset/helpers/zoom.d.ts.map +0 -1
  205. package/dist/tileset/helpers/zoom.js.map +0 -1
  206. package/dist/tileset/tile-3d.d.ts.map +0 -1
  207. package/dist/tileset/tile-3d.js.map +0 -1
  208. package/dist/tileset/tileset-3d.d.ts +0 -284
  209. package/dist/tileset/tileset-3d.d.ts.map +0 -1
  210. package/dist/tileset/tileset-3d.js +0 -814
  211. package/dist/tileset/tileset-3d.js.map +0 -1
  212. package/dist/tileset/tileset-cache.d.ts +0 -19
  213. package/dist/tileset/tileset-cache.d.ts.map +0 -1
  214. package/dist/tileset/tileset-cache.js.map +0 -1
  215. package/dist/tileset/tileset-traverser.d.ts.map +0 -1
  216. package/dist/tileset/tileset-traverser.js.map +0 -1
  217. package/src/tileset/format-3d-tiles/tileset-3d-traverser.ts +0 -63
  218. package/src/tileset/helpers/frame-state.ts +0 -183
  219. package/src/tileset/helpers/tiles-3d-lod.ts +0 -149
  220. package/src/tileset/tileset-3d.ts +0 -1037
  221. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
  222. /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
  223. /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
  224. /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
  225. /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
  226. /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
  227. /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
@@ -5,13 +5,12 @@
5
5
  // See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md
6
6
  import { Vector3, Matrix4 } from '@math.gl/core';
7
7
  import { CullingVolume } from '@math.gl/culling';
8
- import { load } from '@loaders.gl/core';
9
- import { TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE } from "../constants.js";
10
- import { createBoundingVolume, getCartographicBounds } from "./helpers/bounding-volume.js";
11
- import { getTiles3DScreenSpaceError } from "./helpers/tiles-3d-lod.js";
12
- import { getProjectedRadius } from "./helpers/i3s-lod.js";
13
- import { get3dTilesOptions } from "./helpers/3d-tiles-options.js";
8
+ import { LOD_METRIC_TYPE, TILE_REFINEMENT, TILE_CONTENT_STATE, TILESET_TYPE } from "../../constants.js";
9
+ import { createBoundingVolume, getCartographicBounds } from "../helpers/bounding-volume.js";
10
+ import { getTiles3DScreenSpaceError } from "../helpers/tiles-3d-lod.js";
11
+ import { getProjectedRadius } from "../helpers/i3s-lod.js";
14
12
  import { TilesetTraverser } from "./tileset-traverser.js";
13
+ import { calculateFoveatedFactor, calculateTileRequestPriority, isFoveatedRequestDelayActive, isFoveatedRequestDeferred, isProgressiveResolutionPriority } from "../helpers/tiles-3d-request-priority.js";
15
14
  const scratchVector = new Vector3();
16
15
  function defined(x) {
17
16
  return x !== undefined && x !== null;
@@ -33,8 +32,16 @@ export class Tile3D {
33
32
  contentUrl;
34
33
  /** Different refinement algorithms used by I3S and 3D tiles */
35
34
  lodMetricType = 'geometricError';
36
- /** The error, in meters, introduced if this tile is rendered and its children are not. */
35
+ /**
36
+ * The world-space geometric error, in meters, introduced if this tile is rendered and its
37
+ * children are not. For I3S this stores the format's unscaled screen-threshold metric instead.
38
+ */
37
39
  lodMetricValue = 0;
40
+ /**
41
+ * The source LOD metric before applying the tile's computed transform. Keeping the source value
42
+ * separate ensures transform updates never compound an already-scaled geometric error.
43
+ */
44
+ _unscaledLodMetricValue = 0;
38
45
  /** @todo math.gl is not exporting BoundingVolume base type? */
39
46
  boundingVolume = null;
40
47
  /**
@@ -46,6 +53,8 @@ export class Tile3D {
46
53
  gpuMemoryUsageInBytes = 0;
47
54
  /** The tile's children - an array of Tile3D objects. */
48
55
  children = [];
56
+ /** Current lifecycle state for a lazy implicit subtree rooted at this tile. */
57
+ childrenState = 'ready';
49
58
  depth = 0;
50
59
  viewportIds = [];
51
60
  transform = new Matrix4();
@@ -64,10 +73,20 @@ export class Tile3D {
64
73
  // TODO Cesium 3d tiles specific
65
74
  _expireDate = null;
66
75
  _expiredContent = null;
76
+ /** In-flight source request shared by repeated traversal frames. */
77
+ _childrenPromise = null;
67
78
  _boundingBox = undefined;
68
79
  /** updated every frame for tree traversal and rendering optimizations: */
69
80
  _distanceToCamera = 0;
70
81
  _screenSpaceError = 0;
82
+ /** SSE calculated at the reduced viewport height used to prioritize coarse coverage. */
83
+ _screenSpaceErrorProgressiveResolution = 0;
84
+ /** Whether this tile should be promoted into the progressive-resolution request pass. */
85
+ _priorityProgressiveResolution = false;
86
+ /** Angular distance from the camera view axis used to prioritize center tiles. */
87
+ _foveatedFactor = 0;
88
+ /** Whether this peripheral request is currently inside the camera-motion deferral window. */
89
+ priorityDeferred = false;
71
90
  _visibilityPlaneMask;
72
91
  _visible = undefined;
73
92
  _contentBoundingVolume;
@@ -116,8 +135,10 @@ export class Tile3D {
116
135
  this.refine = this._getRefine(header.refine);
117
136
  this.type = header.type;
118
137
  this.contentUrl = header.contentUrl;
138
+ this.childrenState = header.implicitSubtree ? 'unloaded' : 'ready';
119
139
  this._initializeLodMetric(header);
120
140
  this._initializeTransforms(header);
141
+ this._updateLodMetricScale();
121
142
  this._initializeBoundingVolumes(header);
122
143
  this._initializeContent(header);
123
144
  this._initializeRenderingState(header);
@@ -144,7 +165,18 @@ export class Tile3D {
144
165
  }
145
166
  /** Returns true if tile has children */
146
167
  get hasChildren() {
147
- return this.children.length > 0 || (this.header.children && this.header.children.length > 0);
168
+ return (this.children.length > 0 ||
169
+ (this.header.children && this.header.children.length > 0) ||
170
+ Boolean(this.header.implicitSubtree && this.childrenState !== 'ready'));
171
+ }
172
+ /** Returns whether traversal may request an unresolved lazy child-header group. */
173
+ get hasUnloadedChildren() {
174
+ return Boolean(this.header.implicitSubtree &&
175
+ (this.childrenState === 'unloaded' || this.childrenState === 'failed'));
176
+ }
177
+ /** Returns whether a lazy child-header request is currently in flight. */
178
+ get childrenLoading() {
179
+ return this.childrenState === 'loading';
148
180
  }
149
181
  /**
150
182
  * Determines if the tile's content is ready. This is automatically `true` for
@@ -205,13 +237,23 @@ export class Tile3D {
205
237
  }
206
238
  return this._boundingBox;
207
239
  }
208
- /** Get the tile's screen space error. */
209
- getScreenSpaceError(frameState, useParentLodMetric) {
240
+ /**
241
+ * Gets the tile's screen-space error for normal refinement or a reduced-height priority pass.
242
+ *
243
+ * I3S already supplies a screen-oriented LOD metric and intentionally ignores the optional 3D
244
+ * Tiles progressive-resolution height fraction.
245
+ *
246
+ * @param frameState - Current camera and viewport measurements.
247
+ * @param useParentLodMetric - Whether to substitute the parent LOD metric.
248
+ * @param viewportHeightFraction - Fraction of viewport height represented by the priority pass.
249
+ * @returns Screen-space LOD error for the current tileset format.
250
+ */
251
+ getScreenSpaceError(frameState, useParentLodMetric, viewportHeightFraction = 1) {
210
252
  switch (this.tileset.type) {
211
253
  case TILESET_TYPE.I3S:
212
254
  return getProjectedRadius(this, frameState);
213
255
  case TILESET_TYPE.TILES3D:
214
- return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric);
256
+ return getTiles3DScreenSpaceError(this, frameState, useParentLodMetric, viewportHeightFraction);
215
257
  default:
216
258
  // eslint-disable-next-line
217
259
  throw new Error('Unsupported tileset type');
@@ -230,12 +272,34 @@ export class Tile3D {
230
272
  _getGpuMemoryUsageInBytes() {
231
273
  return this.content.gpuMemoryUsageInBytes || this.content.byteLength || 0;
232
274
  }
233
- /*
234
- * If skipLevelOfDetail is off try to load child tiles as soon as possible so that their parent can refine sooner.
235
- * Tiles are prioritized by screen space error.
275
+ /**
276
+ * Returns scheduler priority for render-content requests.
277
+ *
278
+ * @returns Numeric priority, or a negative value when the queued request should be cancelled.
279
+ */
280
+ _getPriority() {
281
+ return this._calculateRequestPriority(false);
282
+ }
283
+ /**
284
+ * Returns scheduler priority for lazy child-header requests.
285
+ *
286
+ * Contentless implicit placeholders intentionally retain `UNLOADED` content state, so metadata
287
+ * scheduling skips only that render-content cancellation check and preserves every visibility,
288
+ * recency, progressive, foveated, and motion-deferral rule.
289
+ *
290
+ * @returns Numeric priority, or a negative value when the queued request should be cancelled.
291
+ */
292
+ _getChildrenPriority() {
293
+ return this._calculateRequestPriority(true);
294
+ }
295
+ /**
296
+ * Calculates the common scheduler priority for content or hierarchy metadata.
297
+ *
298
+ * @param allowUnloadedContent - Whether an empty placeholder may request child metadata.
299
+ * @returns Numeric priority, or a negative value when the queued request should be cancelled.
236
300
  */
237
301
  // eslint-disable-next-line complexity
238
- _getPriority() {
302
+ _calculateRequestPriority(allowUnloadedContent) {
239
303
  const traverser = this.tileset._traverser;
240
304
  const { skipLevelOfDetail } = traverser.options;
241
305
  /*
@@ -253,7 +317,13 @@ export class Tile3D {
253
317
  if (this.tileset._frameNumber - this._touchedFrame >= 1) {
254
318
  return -1;
255
319
  }
256
- if (this.contentState === TILE_CONTENT_STATE.UNLOADED) {
320
+ // RequestScheduler re-evaluates this callback before a queued request receives a slot. A
321
+ // negative priority cancels work that became deferred after it was queued; the scheduled
322
+ // follow-up traversal submits it again after the motion delay expires.
323
+ if (this.priorityDeferred) {
324
+ return -1;
325
+ }
326
+ if (!allowUnloadedContent && this.contentState === TILE_CONTENT_STATE.UNLOADED) {
257
327
  return -1;
258
328
  }
259
329
  // Based on the priority function `getPriorityReverseScreenSpaceError` in CesiumJS. Scheduling priority is based on the parent's screen space error when possible.
@@ -263,8 +333,15 @@ export class Tile3D {
263
333
  ? parent._screenSpaceError
264
334
  : this._screenSpaceError;
265
335
  const rootScreenSpaceError = traverser.root ? traverser.root._screenSpaceError : 0.0;
266
- // Map higher SSE to lower values (e.g. root tile is highest priority)
267
- return Math.max(rootScreenSpaceError - screenSpaceError, 0);
336
+ // Map higher SSE to lower values (e.g. root tile is highest priority), then combine the
337
+ // existing order with independent progressive and foveated priority bands.
338
+ const reverseScreenSpaceError = Math.max(rootScreenSpaceError - screenSpaceError, 0);
339
+ return calculateTileRequestPriority({
340
+ priorityProgressiveResolution: this._priorityProgressiveResolution,
341
+ foveatedFactor: this._foveatedFactor,
342
+ reverseScreenSpaceError,
343
+ rootScreenSpaceError
344
+ });
268
345
  }
269
346
  /**
270
347
  * Requests the tile's content.
@@ -273,10 +350,10 @@ export class Tile3D {
273
350
  // eslint-disable-next-line max-statements, complexity
274
351
  async loadContent() {
275
352
  if (this.hasEmptyContent) {
276
- return false;
353
+ return { loaded: false };
277
354
  }
278
355
  if (this.content) {
279
- return true;
356
+ return { loaded: true };
280
357
  }
281
358
  const expired = this.contentExpired;
282
359
  if (expired) {
@@ -287,34 +364,16 @@ export class Tile3D {
287
364
  if (!requestToken) {
288
365
  // cancelled
289
366
  this.contentState = TILE_CONTENT_STATE.UNLOADED;
290
- return false;
367
+ return { loaded: false };
291
368
  }
292
369
  try {
293
- const contentUrl = this.tileset.getTileUrl(this.contentUrl);
294
- // The content can be a binary tile ot a JSON tileset
295
- const loader = this.tileset.loader;
296
- const tilesetLoaderOptions = this.tileset.loadOptions[loader.id] || {};
297
- const options = {
298
- ...this.tileset.loadOptions,
299
- [loader.id]: {
300
- ...tilesetLoaderOptions,
301
- isTileset: this.type === 'json',
302
- ...this._getLoaderSpecificOptions(loader.id)
303
- } // TODO add typecheck - as const satisfies ...
304
- };
305
- this.content = await load(contentUrl, loader, options);
370
+ const loadResult = await this.tileset.source.loadTileContent(this);
306
371
  if (this.tileset.options.contentLoader) {
307
372
  await this.tileset.options.contentLoader(this);
308
373
  }
309
- if (this._isTileset()) {
310
- // Add tile headers for the nested tilset's subtree
311
- // Async update of the tree should be fine since there would never be edits to the same node
312
- // TODO - we need to capture the child tileset's URL
313
- this.tileset._initializeTileHeaders(this.content, this);
314
- }
315
374
  this.contentState = TILE_CONTENT_STATE.READY;
316
375
  this._onContentLoaded();
317
- return true;
376
+ return loadResult;
318
377
  }
319
378
  catch (error) {
320
379
  // Tile is unloaded before the content finishes loading
@@ -325,6 +384,89 @@ export class Tile3D {
325
384
  requestToken.done();
326
385
  }
327
386
  }
387
+ /**
388
+ * Requests and installs this tile's lazy child-header group through its source.
389
+ *
390
+ * The same request scheduler and SSE/foveated priority value used for render content are reused
391
+ * for subtree metadata. Repeated traversal frames share one promise, and scheduler cancellation
392
+ * restores the unloaded state so a later frame can retry.
393
+ *
394
+ * @param frameState - View state that made the subtree eligible for refinement.
395
+ * @returns Source load result, or an unloaded result if scheduling was cancelled.
396
+ */
397
+ async loadChildren(frameState) {
398
+ if (!this.header.implicitSubtree || this.childrenState === 'ready') {
399
+ return { loaded: false, tileCount: 0, childSubtreeCount: 0 };
400
+ }
401
+ if (this._childrenPromise) {
402
+ return await this._childrenPromise;
403
+ }
404
+ if (!this.tileset.source.loadTileChildren) {
405
+ throw new Error('Tileset source does not support lazy tile children');
406
+ }
407
+ this.childrenState = 'loading';
408
+ this._childrenPromise = this._loadChildrenWithScheduler(frameState);
409
+ try {
410
+ return await this._childrenPromise;
411
+ }
412
+ finally {
413
+ this._childrenPromise = null;
414
+ }
415
+ }
416
+ /**
417
+ * Runs one lazy child-header load after obtaining a scheduler token.
418
+ *
419
+ * @param frameState - View state forwarded to the source implementation.
420
+ * @returns Source load result.
421
+ */
422
+ async _loadChildrenWithScheduler(frameState) {
423
+ const requestToken = await this.tileset._requestScheduler.scheduleRequest(`${this.id}:implicit-subtree`, this._getChildrenPriority.bind(this));
424
+ if (!requestToken) {
425
+ this.childrenState = 'unloaded';
426
+ return { loaded: false, tileCount: 0, childSubtreeCount: 0 };
427
+ }
428
+ try {
429
+ const loadResult = await this.tileset.source.loadTileChildren(this, frameState);
430
+ this.childrenState = loadResult.loaded ? 'ready' : 'unloaded';
431
+ return loadResult;
432
+ }
433
+ catch (error) {
434
+ this.childrenState = 'failed';
435
+ throw error;
436
+ }
437
+ finally {
438
+ requestToken.done();
439
+ }
440
+ }
441
+ /**
442
+ * Replaces a contentless implicit placeholder with its materialized subtree-root header.
443
+ *
444
+ * Transform state is intentionally preserved: the placeholder already owns the composed
445
+ * transform, and reapplying the root transform here would double-transform bounds and geometric
446
+ * error. Content and raw geometric error are reinitialized from the newly available header.
447
+ *
448
+ * @param materializedHeader - Available root header produced from one subtree resource.
449
+ */
450
+ applyImplicitSubtreeHeader(materializedHeader) {
451
+ const existingTransform = this.header.transform;
452
+ const existingTransformMatrix = this.header.transformMatrix;
453
+ this.header = {
454
+ ...this.header,
455
+ ...materializedHeader,
456
+ transform: existingTransform,
457
+ transformMatrix: existingTransformMatrix,
458
+ implicitSubtree: undefined
459
+ };
460
+ this.refine = this._getRefine(materializedHeader.refine);
461
+ this.type = materializedHeader.type;
462
+ this.contentUrl = materializedHeader.contentUrl;
463
+ this._initializeLodMetric(materializedHeader);
464
+ this._updateLodMetricScale();
465
+ this._initializeBoundingVolumes(this.header);
466
+ // Use the merged header so inherited viewer-request-volume metadata remains available when a
467
+ // materialized implicit tile has no render content of its own.
468
+ this._initializeContent(this.header);
469
+ }
328
470
  // Unloads the tile's content.
329
471
  unloadContent() {
330
472
  if (this.content && this.content.destroy) {
@@ -361,12 +503,59 @@ export class Tile3D {
361
503
  }
362
504
  this._distanceToCamera = this.distanceToTile(frameState);
363
505
  this._screenSpaceError = this.getScreenSpaceError(frameState, false);
506
+ this._updateRequestPriorityMetrics(frameState);
364
507
  this._visibilityPlaneMask = this.visibility(frameState, parentVisibilityPlaneMask); // Use parent's plane mask to speed up visibility test
365
508
  this._visible = this._visibilityPlaneMask !== CullingVolume.MASK_OUTSIDE;
366
509
  this._inRequestVolume = this.insideViewerRequestVolume(frameState);
367
510
  this._frameNumber = frameState.frameNumber;
368
511
  this.viewportIds = viewportIds;
369
512
  }
513
+ /**
514
+ * Updates progressive-resolution and foveated request metrics for a 3D Tiles traversal frame.
515
+ *
516
+ * I3S retains its format-specific screen-threshold ordering and is explicitly isolated from
517
+ * geometric-error scheduling. Orthographic viewports still receive progressive coverage, but
518
+ * angular foveation is disabled because an orthographic frustum has no perspective field of view.
519
+ *
520
+ * @param frameState - Current camera and viewport measurements.
521
+ */
522
+ _updateRequestPriorityMetrics(frameState) {
523
+ if (this.tileset.type !== TILESET_TYPE.TILES3D) {
524
+ this._screenSpaceErrorProgressiveResolution = this._screenSpaceError;
525
+ this._priorityProgressiveResolution = false;
526
+ this._foveatedFactor = 0;
527
+ this.priorityDeferred = false;
528
+ return;
529
+ }
530
+ const options = this.tileset.options;
531
+ const progressiveResolutionHeightFraction = options.progressiveResolutionHeightFraction;
532
+ this._screenSpaceErrorProgressiveResolution = this.getScreenSpaceError(frameState, false, progressiveResolutionHeightFraction);
533
+ this._priorityProgressiveResolution = isProgressiveResolutionPriority(this._screenSpaceErrorProgressiveResolution, this.parent?._screenSpaceErrorProgressiveResolution, this.tileset.memoryAdjustedScreenSpaceError, progressiveResolutionHeightFraction);
534
+ if (!options.foveatedScreenSpaceError ||
535
+ frameState.viewport?.orthographic ||
536
+ !frameState.camera?.position ||
537
+ !frameState.camera?.direction) {
538
+ this._foveatedFactor = 0;
539
+ this.priorityDeferred = false;
540
+ return;
541
+ }
542
+ this._foveatedFactor = calculateFoveatedFactor(this.boundingVolume, frameState.camera);
543
+ const deferralEligible = isFoveatedRequestDeferred({
544
+ refinement: this.refine,
545
+ skipLevelOfDetail: this.tileset._traverser.options.skipLevelOfDetail,
546
+ foveatedScreenSpaceError: options.foveatedScreenSpaceError,
547
+ foveatedConeSize: options.foveatedConeSize,
548
+ minimumScreenSpaceErrorRelaxation: options.foveatedMinimumScreenSpaceErrorRelaxation,
549
+ interpolationCallback: options.foveatedInterpolationCallback,
550
+ foveatedFactor: this._foveatedFactor,
551
+ verticalFieldOfView: frameState.camera.verticalFieldOfView,
552
+ screenSpaceError: this._screenSpaceError,
553
+ parentScreenSpaceError: this.parent?._screenSpaceError,
554
+ maximumScreenSpaceError: this.tileset.memoryAdjustedScreenSpaceError,
555
+ priorityProgressiveResolution: this._priorityProgressiveResolution
556
+ });
557
+ this.priorityDeferred = isFoveatedRequestDelayActive(deferralEligible, frameState.camera.timeSinceMovement, options.foveatedTimeDelay);
558
+ }
370
559
  // Determines whether the tile's bounding volume intersects the culling volume.
371
560
  // @param {FrameState} frameState The frame state.
372
561
  // @param {Number} parentVisibilityPlaneMask The parent's plane mask to speed up the visibility check.
@@ -474,6 +663,7 @@ export class Tile3D {
474
663
  return this.header.extras;
475
664
  }
476
665
  // INTERNAL METHODS
666
+ /** Initializes the tile's LOD metric from its header or its nearest available ancestor. */
477
667
  _initializeLodMetric(header) {
478
668
  if ('lodMetricType' in header) {
479
669
  this.lodMetricType = header.lodMetricType;
@@ -485,14 +675,18 @@ export class Tile3D {
485
675
  }
486
676
  // This is used to compute screen space error, i.e., the error measured in pixels.
487
677
  if ('lodMetricValue' in header) {
488
- this.lodMetricValue = header.lodMetricValue;
678
+ this._unscaledLodMetricValue = header.lodMetricValue;
489
679
  }
490
680
  else {
491
- this.lodMetricValue =
492
- (this.parent && this.parent.lodMetricValue) || this.tileset.lodMetricValue;
681
+ // Inherit the source value, not the parent's world-space value. The child's complete
682
+ // transform will be applied after transform initialization below.
683
+ this._unscaledLodMetricValue = this.parent
684
+ ? this.parent._unscaledLodMetricValue
685
+ : this.tileset.lodMetricValue;
493
686
  // eslint-disable-next-line
494
687
  console.warn('3D Tile: Required prop lodMetricValue is undefined. Using parent lodMetricValue');
495
688
  }
689
+ this.lodMetricValue = this._unscaledLodMetricValue;
496
690
  }
497
691
  _initializeTransforms(tileHeader) {
498
692
  // The local transform of this tile.
@@ -506,6 +700,26 @@ export class Tile3D {
506
700
  const parentInitialTransform = parent && parent._initialTransform ? parent._initialTransform.clone() : new Matrix4();
507
701
  this._initialTransform = new Matrix4(parentInitialTransform).multiplyRight(this.transform);
508
702
  }
703
+ /**
704
+ * Updates the world-space LOD metric from the source metric and the complete tile transform.
705
+ *
706
+ * 3D Tiles geometric error is a distance in the tile's local meters. Screen-space error (SSE)
707
+ * compares that distance with a world-space camera distance, so both quantities must use the
708
+ * same scale. For non-uniform transforms the largest axis scale is deliberately used: this is
709
+ * conservative and prevents refinement from stopping while any transformed dimension can still
710
+ * exceed the requested visual error. Rotation and translation do not affect the scale.
711
+ *
712
+ * I3S `maxScreenThreshold` is already a screen-space metric and must not be transform-scaled.
713
+ */
714
+ _updateLodMetricScale() {
715
+ if (this.lodMetricType !== LOD_METRIC_TYPE.GEOMETRIC_ERROR) {
716
+ this.lodMetricValue = this._unscaledLodMetricValue;
717
+ return;
718
+ }
719
+ const transformScale = this.computedTransform.getScale(scratchVector);
720
+ const maximumScale = Math.max(transformScale[0], transformScale[1], transformScale[2]);
721
+ this.lodMetricValue = this._unscaledLodMetricValue * maximumScale;
722
+ }
509
723
  _initializeBoundingVolumes(tileHeader) {
510
724
  this._contentBoundingVolume = null;
511
725
  this._viewerRequestVolume = null;
@@ -532,6 +746,10 @@ export class Tile3D {
532
746
  this._distanceToCamera = 0;
533
747
  this._centerZDepth = 0;
534
748
  this._screenSpaceError = 0;
749
+ this._screenSpaceErrorProgressiveResolution = 0;
750
+ this._priorityProgressiveResolution = false;
751
+ this._foveatedFactor = 0;
752
+ this.priorityDeferred = false;
535
753
  this._visibilityPlaneMask = CullingVolume.MASK_INDETERMINATE;
536
754
  this._visible = undefined;
537
755
  this._inRequestVolume = false;
@@ -548,8 +766,15 @@ export class Tile3D {
548
766
  // Inherit from parent tile if omitted.
549
767
  return refine || (this.parent && this.parent.refine) || TILE_REFINEMENT.REPLACE;
550
768
  }
769
+ /**
770
+ * Returns whether loaded content is an external tileset.
771
+ *
772
+ * Parsed shape is authoritative because valid external resources may be extensionless, signed,
773
+ * or use a misleading filename. This method is called only after source loading has populated
774
+ * `content`.
775
+ */
551
776
  _isTileset() {
552
- return this.contentUrl.indexOf('.json') !== -1;
777
+ return this.content?.shape === 'tileset3d';
553
778
  }
554
779
  _onContentLoaded() {
555
780
  // Vector and Geometry tile rendering do not support the skip LOD optimization.
@@ -572,6 +797,12 @@ export class Tile3D {
572
797
  _updateBoundingVolume(header) {
573
798
  // Update the bounding volumes
574
799
  this.boundingVolume = createBoundingVolume(header.boundingVolume, this.computedTransform, this.boundingVolume);
800
+ // Viewer request volumes constrain traversal, not just render content. A contentless implicit
801
+ // connector can still own an inherited request volume, so initialize it before the
802
+ // content-specific early return below.
803
+ if (header.viewerRequestVolume) {
804
+ this._viewerRequestVolume = createBoundingVolume(header.viewerRequestVolume, this.computedTransform, this._viewerRequestVolume);
805
+ }
575
806
  const content = header.content;
576
807
  if (!content) {
577
808
  return;
@@ -585,11 +816,11 @@ export class Tile3D {
585
816
  if (content.boundingVolume) {
586
817
  this._contentBoundingVolume = createBoundingVolume(content.boundingVolume, this.computedTransform, this._contentBoundingVolume);
587
818
  }
588
- if (header.viewerRequestVolume) {
589
- this._viewerRequestVolume = createBoundingVolume(header.viewerRequestVolume, this.computedTransform, this._viewerRequestVolume);
590
- }
591
819
  }
592
- // Update the tile's transform. The transform is applied to the tile's bounding volumes.
820
+ /**
821
+ * Updates the tile's computed transform, world-space geometric error, and bounding volumes.
822
+ * @param parentTransform - Current computed transform of the parent tile or tileset.
823
+ */
593
824
  _updateTransform(parentTransform = new Matrix4()) {
594
825
  const computedTransform = parentTransform.clone().multiplyRight(this.transform);
595
826
  const didTransformChange = !computedTransform.equals(this.computedTransform);
@@ -597,35 +828,9 @@ export class Tile3D {
597
828
  return;
598
829
  }
599
830
  this.computedTransform = computedTransform;
831
+ // Recalculate from the unscaled source metric so repeated model-matrix changes never compound.
832
+ this._updateLodMetricScale();
600
833
  this._updateBoundingVolume(this.header);
601
834
  }
602
- // Get options which are applicable only for the particular loader
603
- _getLoaderSpecificOptions(loaderId) {
604
- switch (loaderId) {
605
- case 'i3s':
606
- return {
607
- ...this.tileset.options.i3s,
608
- _tileOptions: {
609
- attributeUrls: this.header.attributeUrls,
610
- textureUrl: this.header.textureUrl,
611
- textureFormat: this.header.textureFormat,
612
- textureLoaderOptions: this.header.textureLoaderOptions,
613
- materialDefinition: this.header.materialDefinition,
614
- isDracoGeometry: this.header.isDracoGeometry,
615
- mbs: this.header.mbs
616
- },
617
- _tilesetOptions: {
618
- store: this.tileset.tileset.store,
619
- attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
620
- fields: this.tileset.tileset.fields
621
- },
622
- isTileHeader: false
623
- };
624
- case '3d-tiles':
625
- case 'cesium-ion':
626
- default:
627
- return get3dTilesOptions(this.tileset.tileset);
628
- }
629
- }
630
835
  }
631
836
  //# sourceMappingURL=tile-3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-3d.js","sourceRoot":"","sources":["../../../src/tileset-3d/common/tile-3d.ts"],"names":[],"mappings":"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"}