All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Types: Convert types of use non-wrapper types.
- Types: Adjust GLTF Plugin classes to extend appropriate type.
- BatchedMeshPlugin: Prevent empty groups from being added for each tile when using BatchedMeshPlugin.
- TilesRenderer: Fixed event targets not being set to the tiles renderer.
- TilesFadePlugin: TilesRenderer will now fire visibility hidden events once the tile is completely faded out.
- TilesFadePlugin: Fading tiles are now present in the tile set root rather than a sub group.
- TileCompressionPlugin: Change the defaults to not automatically compress normals, uvs to avoid artifacts.
- GlobeControls: Orthographic "near" margin around the globe has been increased from 10% to 25% of the large ellipsoid radius value.
- Added "priority" field to plugins to ensure correct execution order.
TilesCompression
andBatchedMesh
plugin will always run first. - Added
UnloadTilesPlugin
. - Plugins: Add support for "setTileVisible" plugin callbacks.
- Add names to some plugins that were missing them.
- GLTFExtensionsPlugin: Add support for MeshoptDecoder.
- TilesRenderer: Add types for events.
- GlobeControls: Added
nearMargin
andfarMargin
percentages for controlling camera distances. - DebugTilesPlugin:
enabled
field to DebugTilesPlugin to enable / disable the debug features.
- CameraTransition R3F Component: Allow for not passing in a "mode".
- CameraTransition R3F Component: Allow for passing options arguments into the component.
- CameraTransition R3F Component: Fix on demand rendering not working correctly.
- Export new B3DM, I3DM, and PNTS types.
- TilesRenderer: Root tile load state not getting set correctly.
- TilesFadePlugin: Adjust "TilesFadePlugin" such that it causes are rerender for r3f.
- EnvironmentControls: Fix orthographic camera zoom so it does not pop if too close to a surface.
- CesiumIonAuthPlugin and GoogleCloudAuthPlugin: The plugins now automatically retry root tile if it hasn't been loaded upon add.
- Increased default
downloadQueue
max jobs from 4 to 10. - Move TilesFadePlugin, TileCompressionPlugin, UpdateOnChangePlugin to
3d-tiles-renderer/plugins
. - Move ReorientationPlugin, GLTFExtensionsPlugin to
3d-tiles-renderer/plugins
.
- R3F CameraTransition component to r3f export.
- CameraTransitionManager to core.
- Added name field to "UpdateOnChangePlugin".
- CameraTransitionManager: Adjust the calculation for the near plane distance to avoid clipping in some cases.
- Revert change that would cause the root tiles to "trickle" in over time if the root is empty and uses an "ADD" refinement. Tiles will now only render once a full set of child tiles can be rendered.
- Update "BatchedTilesPlugin" to rely on three.js r170, leverage new copy capabilities.
- TilesRenderer plugins and GLTF Extensions have been moved to
3d-tiles-renderer/plugins
export path.
- I3DMLoader: Add support for EAST_NORTH_UP semantic.
- R3F TilesRenderer: Added
group
property for passing react properties to the root tile set object. - R3F
<CompassGizmo>
component.
- Slightly modified the traversal algorithm to not require loaded content (and therefore for content to exist) in order to trigger child tiles to load.
- GlobeControls: renamed "updateClipPlanes" to "adjustCamera".
- CameraTransitionManager: added "autoSync" and "syncCameras" function.
- GlobeControls: Adjust behavior of zoomed out rotation to keep the grabbed point under the pointer.
- EnvironmentControls: Assign the current camera to the raycaster.
- Typescript definitions for TilesRenderer.
- Case where the closest hit was not returned with "firstHitOnly" raycasting.
- R3F TilesRenderer: Fix case where the tiles renderer context would not trigger an update when options changed.
- UpdateOnChangePlugin: Fix case where tiles would not update correctly if plugin was added after cameras.
- EnvironmentControls: Correctly mark "wheel" event as non-passive.
ReorientationPlugin
andGLTFExtensionsPlugin
.- Ability to remove plugins via the
unregisterPlugin
function. - Support for octree subdivision to implicit tiling.
- Initial
BatchedTilePlugin
implementation to examples. - Initial support for
@react-three/fiber
with component implementations exported as3d-tiles-renderer/r3f
. See the r3f docs for more information.
- LRUCache minSize and maxSize variables to default to 6000, 8000.
- Added
getAttributions
function, deprecatedgetCreditsString
function. - GoogleCloudAuthPlugin: Use the photorealistic tiles url if a user has not provided one.
- GoogleCloudAuthPlugin: Modify the tiles renderer to use recommended settings for Google Photorealistic Tiles by default.
- Deprecated GooglePhotorealisticTilesRenderer.
- Improve EnvironmentControls momementum thresholds so movement stops sooner.
- Case where tile set scale was incorrectly used when computed screenspace error.
- Case where
setTileVisibility
could get called asymmetrically. - Case where
TilesFadePlugin
would hold on to scene geometry after disposal.
- BatchTable: Added "getPropertyArray".
- GoogleCloudAuthPlugin, CesiumIonAuthPlugin: added "autoRefreshToken" option to enable automatically refreshing the token when requests fail due to timeout.
- Fixed type definition.
- GlobeControls, EnvironmentControls: Account for near and far camera clip distances.
- I3DMLoader: Fix cases where external files may not be loaded correctly.
- Documentation typo:
maxByteSize
->maxBytesSize
. - Documented that LRUCache's
maxByteSize
andminByteSize
are only compatible with three.js >= r166 - Environment / GlobeControls: Fixed the pivot point mesh appearing when controls are disabled.
- Case where LRUCache could cause tiles to load repeatedly.
- TilesOverlayPlugin: Added support for waiting until textures finish loading to display.
- BatchTable:
count
field to get the number of id / entries. - I3DMLoader: Added support for
RTC_CENTER
feature. - TilesRenderer: Added initial support for implicit tiling.
- LRUCache: Support for setting the min and max byte size for the cache which accounts for geometry and texture sizes.
- Plugins: Added "UpdateOnChangePlugin" to the examples folder.
- EnvironmentControls: Added "enableDamping" option for inertial animation.
- Ellipsoid: Added "getEastNorthUpAxes".
- Ellipsoid: Added "getAzElRollFromRotationMatrix" and "getRotationMatrixFromAzElRoll"
- TilesRendererBase: Tiles are now queued and sorted before triggering load to avoid only a single tile set branch loading and filling up the lru cache.
- TilesOverlayPlugin: Changed constructor to take options object, instead.
- TilesRenderer: Removed
loadSiblings
option. - TilesRenderer: Removed
stopAtEmptyTiles
option. - LRUCache: Tiles continue to be unloaded even when the tiles renderer update function has not been called.
- TilesRenderer: Deprecate "preprocessURL" function.
- Ellipsoid: Renamed "constructLatLonFrame" to "getEastNorthUpFrame".
- Ellipsoid: "getNorthernTangent" function has been deprecated.
- GlobeControls: cases where the camera far clip plane was set too close causing some far tiles to not display.
- GlobeControls: When zooming out the amount that the camera automatically orients is now based in part on zoom amount.
- TilesRenderer: Adjust tile traversal behavior so child tiles of "ADD" refinement are not forced to load.
- GlobeControls: Zoomed-out ellipsoid rotation is now scaled based on camera parameters and ellipsoid size.
- I3DMLoader:
SCALE
andSCALE_NON_UNIFORM
are now both applied when present. - I3DMLoader: Instances now work correctly when parent group transforms are applied.
- EnvironmentControls: Fixed case where zoom would not work if the mouse had not been moved.
- TilesRenderer: Fix case where raycasting could throw an error.
tiles-load-start
andtiles-load-end
callback indicating when tile loading has completed finished.camera-add
,camera-delete
,update-before
,update-after
events.- Initial implementation of plugin system.
- TileCompressionPlugin to examples for lowering memory usage.
GoogleCloudAuthPlugin
andCesiumIonAuthPlugin
to enable fetching data from the associated APIs.- Added
GooglePhotoRealisticTilesRenderer
class. - Added support for the
3DTILES_batch_table_hierarchy
extension.
- CameraTransitionManager: Variety of cases relating to negative orthographic camera "near" values.
- GlobeControls: Speed change when transitioning between near and far behavior.
- GlobeControls: Behavior now relies on camera field of view.
- GlobeControls: Zooming out from the horizon no longer spins the globe.
- GlobeControls: Add support for orthographi camera.
- Remove unnecessary matrix instantiation during tiles parse.
getBoundingBox
andgetOrientedBoundingBox
returning an incorrect condition when no bounding volume is present.- Fix case where an incorrect SSE metric was produced when tiles used non-uniform scales with oriented bounding box volumes.
- Fix case where potentially incorrect raycast results were produced when tiles used non-uniform scales with oriented bounding box volumes.
- GLTFStructureMetadata extension exits gracefully if no extension is present.
- CesiumIonTilesRenderer: Will immediately load the tile set after resolving credentials.
- Examples FadeTilesRenderer has been changed to a plugin.
- Deprecated
GoogleTilesRenderer
andCesiumIonTilesRenderer
in favor of using the new authentication plugins. - Loaders: ".load" function has been renamed to ".loadAsync".
- Deprecated
onLoadTileset
,onLoadModel
,onDisposeModel
, andonTileVisibilityChange
in favor of their event equivalents. - LRUCache: "unloadPriorityCallback" has been changted to take two tile arguments to sort instead of one.
- DebugTilesRenderer has been deprecated in favor of the "DebugTilesPlugin".
- LRU Cache unload priority function now unloads deepest tiles first, then least recently used, then non-external tile sets.
- Lint rules causing build failures.
- Export
EXT_mesh_features
&EXT_structural_metadata
extensions for glTF.
- Syntax errors causing failure to import in some cases.
- Remove logged error when a tile set is aborted.
- Adjusted raycast early exit behavior based on three.js r165.
- EnvironmentControls: fix case where the dragging does not work from below
- Remote glTF textures failing to load.
- EnvironmentControls: Add support for othographic zoom.
- EnvironmentControls: Add "zoom speed" option.
- PNTSLoader: Add
batchTable
to the returned points object. - Support for improved, early termination raycasting from three.js r165.
- Some cases where the camera jumped and drifted while reorienting the "up" direction.
- EnvironmentControls: Changed default rotation speed.
- Use
queueMicrotask
in place ofPromise.resolve()
.
- Ellipsoid.getPositionElevation not returning negative elevations.
- EnvironmentControls: Enfoce a minimum elevation when computing horizon distance to ensure a reasonable far clip distance.
- EnvironmentControls: Contructor arguments are no longer required.
- EnvironmentControls: Detach now correctly removes the dom element reference.
- GlobeControls: Functions without setting indices.
- EnvironmentControls: Add "fallbackPlane" and "useFallbackPlane" members so dragging works when there is no geometry under the mouse.
- EnvironmentControls and GlobeControls not zooming into the cursor when offset.
- EnvironmentControls and GlobeControls not working with a non-full page element.
- FadeTilesRenderer improperly disposing of tiles causing unloaded textures to be rendered.
- Memory leak related to ImageBitmaps not being released on tile disposal.
- Fixed credit attribution string for GoogleTilesRenderer to align with requirements.
- Fixed fade events not firing as expected in FadeEventManager.
- FadeTilesMixin.deleteCamera now correctly calls the parent function.
- EnvironmentControls now dispatches events on zoom value change.
- "getBounds" and "getOrientedBounds" functions have been renamed to "getBoundingBox" and "getOrientedBoundingBox".
- GlobeControls will now set the camera near and far values to more tightly encapsuate the set of tiles visible until the horizon, limiting the amount of tiles to load.
- GlobeControls now more intelligently sets the camera "near" value to avoid z fighting.
- Frustum and oriented bounding box functions now more correctly determines intersections instead of producing frequent false positives resulting in more tiles being loaded.
- Support for dispatched events to TilesRenderer and equivelent events for existing
.on*
callbacks. - EnvironmentControls and GlobeControls.
- Fix inaccuracies in documentation.
- Case where Google tiles did not load to a further depth when a tile has no content and no children.
- DebugTilesRenderer: Support for visualizing the load order of tiles
- TilesRendererBase: Error log when using a 1.1-compatible tileset
- PNTSLoader: Support for
CONSTANT_RGBA
,RGBA
, andRGB565
.
CesiumIonTilesRenderer
for more convenient use of the ion API.- Frustum check support for OBB bounding volumes resulting in more than 35-45% fewer tiles loading and displaying in some cases when OBB bounding volumes are used.
- Consolidate bounding volumes into a common class to simplify implementation.
- Progressively process recursive tileset tiles preventing frame stalls of up to and over 100ms in some cases when many or large child tilesets were loaded.
- GoogleTilesRenderer.setLatLonToYUp now sets X+ to north and Z+ to east
- TilesRenderer.dispose function not working correctly.
- Type declaration file for constants.
- Raycasting not working correctly with "additive" tile refinement.
- Case sensitivity when dealing with file formats.
- Race condition when setting the transformation of gltf files.
- Case where internal tilesets were not disposed of properly when calling "dispose".
- Incorrect calculation of geometric error when spheres are available.
- Support for rayasting tiles with sphere bounding volumes.
- Add "constructLatLonFrame" and "getNorthernTangent" to Ellipsoid class.
getBounds
andgetOrientedBounds
now return the AABB of a sphere if a tileset bounding box is not available.GoogleTilesRenderer
for rendering Google's Photorealistic 3D Tiles
- Support for DRACO-compressed PNTs files.
- Case where raycasting could return an incorrect result when
firstHitOnly
was true.
- Incorrect internal import statement.
- Incorrect type definitions.
- Export for glTF CESIUM_RTC extension.
- Removed unused exports.
- Classes for Ellipsoid and EllipsoidRegion.
- DebugTilesRenderer: Added "displayRegionBounds" flag.
- Support for region bounds by converting the volumes into sphere and box bounds.
- B3DMLoader: regression causing RTC_CENTER to not be respected.
- Support for GLTFLoader Cesium_RTC extension.
- Support for determining tile format based on magic bytes.
- Small fixes to the
dispose
function. - Re-add support for relative tile urls.
resetFailedTiles
to enable retry tile downloads that failed.
- Support for loading absolute URIs.
- Fix the application of the tile "up" axis adjustments.
- Incorrect argument order to
FeatureTable.getData
- ensuring the working path included a "/" at the end when generating new file paths for the GLTFExtension and B3DM loaders.
- "onPreprocessUrl" is now called for initial Tileset URL.
TilesRenderer.onTileVisibilityChange
callback.- Support for GLTF in tilesets (
3DTILES_content_gltf
extension).
- Improved type definitions.
PNTSLoader.parse
now returns a promise.- All model loaders on inherit from a common type.
- PriorityQueue: Added
schedulingCallback
to afford flexibility in job scheduling callback for scenarios whererequestAnimationFrame
will not work, such as with WebXR.
autoDisableRendererCulling
incorrectly applying the inverse of the documented effect.- Screen space error calculations now use the camera projectionMatrix rather than camera type to determine frustum type.
- Support for embedded tileset / tile geometry URLs with hashes, search query parameters.
- DebugTilesRenderer: Bounding boxes now colored down the tree based on depth.
- DebugTilesRenderer: "MeshStandardMaterial" is now used instead of "MeshBasicMaterial" for debugging.
- TilesRenderer: add
getBoundingSphere
function.
- DebugTilesRenderer: "RANDOM_NODE_COLOR" visualization setting.
- Names for various tile objects.
- DebugTilesRenderer: Added
getDebugColor
function for adjusing the debug visualization colors. - Support for computing screen space error for tiles that had sphere bounds but no box bounds.
- DebugTilesRenderer: Added
customColorCallback
andCUSTOM_COLOR
mode for custom debug coloring.
- I3DMLoader: Fixed embedded absolute URLs not working correctly.
- TilesRenderer: "getBounds" function throwing an error if no bounding box is present on the tileset.
- Case where tiles that were outside of the camera frustum would be loaded with a higher priority.
- Case where a single tiles renderer tiles would always be loaded with a higher priority.
- Case where bounding boxes with one dimension of 0 would not compute the distance to camera correctly.
path-browserify
dependency explicitly rather than relying on implicit polyfills forpath
package.
PriorityQueue.priorityCallback
now takes two arguments.- The default priority sort now accounts for most recently used tiles, screenspace error, and distance to the camera.
TilesRenderer.calculateError
no longer returns a value but is now expected to set__error
and__distanceToCamera
on the tile itself.
TilesRendererBase.preprocessURL
types definition.
- PNTS files incorrectly having a GLTF rotation adjustment applied.
TilesRenderer.optimizeRaycast
option to disable overriding the raycast function of loaded tiles.
- Added "sideEffects: false" to package.json.
- Bounding box visualization not displaying correctly with
DebugTilesRenderer
when the bounds have a width of 0 in one dimension.
onLoadTileSet
to the typescript definitions file.
- Feature table attributes like
RTC_CENTER
not being correctly applied to loaded tile geometry. B3DMLoader.load
not correctly resolving with a model.
- String decoding to use
TextDecoder
.
- Pass fetch options to B3DMLoader.
- Set working path for loaders from CMPTLoader, TilesRenderer callback.
- Adjust loader handler in examples and README to provide GLTFLoader directly.
- Add warnings if unsupported feature semantics are detected for I3DM and PNTS files
- Support for I3DM rotation, scale features.
- A case where I3DM instances could have an incorrect transformations by respecting existing Mesh transformations when converting them to InstancedMeshes.
- Make CMPTLoader group child order consistent between loads.
- I3DM files not correctly loading external gltf files.
- Incorrect use of
multiply
when computing world transformations resulting in incorrect positioning of tiles when non identity transformations are used.
- Feature and Batch Tables unnecessarily retaining full file buffer references.
getOrientedBounds
function toTilesRenderer
.preprocessURL
function toTilesRenderer
.
- Incorrectly removing the implicit y-up to z-up GTLF transformation.
- Support for external tile sets.
- B3DM support for RTC_CENTER.
- Add a readable message for when console.assert fails.
- Add url information to log when tile load fails.
- Jittering with I3DM files when instances are positioned at large scales.
- Compatible three.js version to v0.123.0.
PriorityQueue
to wait a frame to schedule new tasks instead of usingPromise.resolve
so tasks will only be started once per frame.
batchTable
andfeatureTable
fields onto loaded B3DM, I3DM, and PNTS scene objects directly.stopAtEmptyTiles
which defaults to true so tilesets correctly stop traversal at empty tiles.
- Tileset traversal now correctly stops at empty tiles if they do no meet the SSE requirement. Previous behavior can be retained for now by settings
stopAtEmptyTiles
tofalse
.
- Typescript declaration files for
CMPT
,I3DM
, andPNTS
loaders.
manager
field toTilesRenderer
to enable support for DRACO decompression.TilesRenderer.onLoadTileSet
callback function.- Support for "ADD" tile refinement.
CMPTLoader
not importingI3DMLoader
.- A case where if the tile at depth
maxDepth
was empty nothing would be rendered. - A case where an error was thrown if a mid tile had no content.
TilesRenderer.dispose
function to completely dispose of all loaded geometry, materials, and textures in the scene when the renderer is no longer needed.TilesRenderer.onDisposeModel
function which is called when a tile model is disposed of from the cache.
- Case where the url protocol was converted to use a single slash instead of two when loading a model.
- Corner case where an error was thrown if the tileset was dragged off screen out of camera view.
- Basic support for CMPT, PNTS, and I3DM file formats.
autoDisableRendererCulling
field toTilesRenderer
.- A count of the amount of failed tile content loads to
TilesRenderer.stats
.
- Failed tileset downloads being indefinitely retried.
- Tile content stats not being correctly updated if a tile failed to load.
- Not propagating image load errors.
- DebugTilesRenderer using a different color for every submesh in a tile. Now a single color is used for every submesh in a tile.
- Tiles not rendering if an empty tile is encountered.
- Child tiles not rendering if a parent tile content failed to load.
- Improved
update
function performance by deferring LRUCache array update.
- License text in README to remove unnecessary copy.
- Initial release.