Skip to content

Conversation

@jjhembd
Copy link
Contributor

@jjhembd jjhembd commented Oct 9, 2025

Description

This PR adds experimental support for loading 3D Tiles as terrain, via Cesium3DTilesTerrainProvider.

What 3D Tiles data can be used?

3D Tiles loaded with Cesium3DTilesTerrainProvider must follow this structure (thanks @lilleyse for the list):

  • Conforms to the same WGS84 double-headed quadtree tiling scheme as quantized mesh. Must have two root tiles with region bounding volumes and implicit tiling.
  • Multiple contents are not allowed
  • Tile metadata must include TILE_MINIMUM_HEIGHT, TILE_MAXIMUM_HEIGHT, TILE_BOUNDING_SPHERE, TILE_HORIZON_OCCLUSION_POINT semantics
  • Only GLB is supported, not glTF
  • Each GLB must have a single node, mesh, and primitive
  • Primitive must have POSITION attribute
  • Primitive must have NORMAL attribute if requestVertexNormals is true
  • Primitive must have indices with UNSIGNED_SHORT or UNSIGNED_INT component type
  • Attributes and indices must be tightly packed
  • If requestWaterMask is true, primitive must reference an EXT_structural_metadata property texture with WATERMASK semantic.
  • Primitive must have CESIUM_tile_edges extension
  • Model may be compressed with EXT_meshopt_compression / KHR_mesh_quantization

Issue number and link

Resolves #12296

Testing plan

TODO before moving this out of "Draft":

  • Update Sandcastles to new gallery format
  • Open separate PR for doc fixes, Check calls: EllipsoidalOccluder, GoogleEarthEnterpriseTerrainData, TerrainEncoding (separate from other changes in file), binarySearch, mergeSort, QuantizedMeshTerrainDataSpec. Beware incorrect capitalizations like {Object}, {Number[]}! See Clean up docs and type checks for terrain providers #12969
  • Verify changes to ResourceCache, avoid additional URI parsing.
  • Replace promises in specs with async/await
  • Consider dropping the duplicate ImplicitSubtreeCache in Cesium3DTilesTerrainProvider.js (replace with ImplicitSubtreeCache.js) The two versions of ImplicitSubtreeCache have some key differences, so I think a refactor is out of scope for this PR.
  • Understand changes to signature in TerrainEncoding

Author checklist

  • I have submitted a Contributor License Agreement
  • I have added my name to CONTRIBUTORS.md
  • I have updated CHANGES.md with a short summary of my change
  • I have added or updated unit tests to ensure consistent code coverage
  • I have updated the inline documentation, and included code examples where relevant
  • I have performed a self-review of my code

@github-actions
Copy link

github-actions bot commented Oct 9, 2025

Thank you for the pull request, @jjhembd!

✅ We can confirm we have a CLA on file for you.

@jjhembd jjhembd changed the base branch from main to terrain-docs October 10, 2025 22:05
@jjhembd jjhembd changed the base branch from terrain-docs to main October 10, 2025 22:31
@jjhembd jjhembd changed the base branch from main to terrain-docs October 10, 2025 22:32
Base automatically changed from terrain-docs to main October 16, 2025 21:14
@jjhembd jjhembd marked this pull request as ready for review October 23, 2025 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bring Cesium3DTilesTerrainProvider into main

4 participants