3D Tiles Next CesiumJS Roadmap
3D Tiles Next adds several new, experimental capabilities to 3D Tiles. Currently, they take the form of extensions to 3D Tiles 1.0 and glTF 2.0. An overview of these specifications can be found in the 3d-tiles repository. See also the list of resources
This issue tracks the changes to CesiumJS and the implementation status for each.
3D Tiles Next Extensions - Initial Implementation
These features are now available as of CesiumJS 1.87.1
- [x]
3DTILES_implicit_tiling- experimental implementation in #9517- [x] Implement an
Implicit3DTileContent, which transcodes implicit tiles toCesium3DTileobjects when the content loads. This naïve transcoder is similar in functionTileset3DTileContent(external tilesets).
- [x] Implement an
- [x]
3DTILES_multiple_contents- experimental implementation in #9517 - However, we found some caveats to the specification, in particular that there is no way to use contents that require mixedADD/REPLACErefinement. This specification may be revised in the future- [x] Implement
Multiple3DTileContent - [x] Add support for multiple contents in implicit tiling.
- [x] Implement
- [x]
3DTILES_metadata- experimental implementation in #9517- [x] Create classes for representing metadata concepts
- [x] Add tileset, tile, and group metadata to 3D Tiles 1.0 classes
- [x] Add tile and group metadata support to implicit tiling
- [x] Add group metadata support to multiple contents
- [x] Add
Cesium3DTileFeature.getPropertyInherited()for CPU styling. Now the styling language will use tileset, tile, and group metadata
- [x]
3DTILES_content_gltf- experimental implementation in #9517 - [x] (glTF)
EXT_feature_metadata- in progress. This involves significant refactoring ofModel.js(see more in the Other Improvements section below)- [x] Create classes for representing feature metadata concepts
- [x] Create a
parseFeatureMetadata()function for parsing theEXT_feature_metadataextension - [x] Create a
parseBatchTable()function to transcode the old batch table into the new feature metadata format. This includes some classes for compatibility with JSON properties and theEXT_batch_table_hierarchyextension. - [x] Load feature metadata from a glTF via
GltfFeatureMetadataLoader - [x] Redesign
Cesium3DTileBatchTableto use feature metadata. This will enable using feature metadata for styling. - [x] Update
Gltf3DTileContentto support feature metadata
- [x]
3DTILES_bounding_volume_S2- in progress, see PR #9506 - [x] Custom shaders See roadmap issue basic implementation.
Additional Supporting Extensions
- [x] (glTF)
EXT_mesh_gpu_instancing- in progress, requires theModel.jsrefactor - [x] (glTF)
KHR_mesh_quantization- in progress - [x] (glTF)
EXT_meshopt_compression- future - [ ] (glTF) geolocation extension - future
ModelExperimental Implementation Improvements
General Improvements
- [ ] Support
noDataandrequiredfromEXT_mesh_features- https://github.com/CesiumGS/cesium/issues/9887 - [x] Add rendering statistics for performance: https://github.com/CesiumGS/cesium/issues/9886
- [ ] Interpolate per-vertex metadata (see https://github.com/CesiumGS/cesium/issues/9935)
- [ ] Cache shaders and/or pipeline results
- [x] detect quantized vertex colors: https://github.com/CesiumGS/cesium/issues/9814
- [ ] Refactor unit tests, see https://github.com/CesiumGS/cesium/issues/9813
- [ ] Feature texture picking https://github.com/CesiumGS/cesium/issues/9852
- [x] consolidate naming conventions between
getPropertyIds()andgetPropertyNames()- https://github.com/CesiumGS/cesium/issues/9914 - [ ] Support feature IDs without a property table https://github.com/CesiumGS/cesium/issues/9884
- [ ] Integration with the 3D Tiles Inspector
- [ ] Eye Dome Lighting for individual models https://github.com/CesiumGS/cesium/issues/10005
Custom Shaders Improvements
- [x] Allow setting
gl_PointSizein a custom shader: https://github.com/CesiumGS/cesium/issues/9851 - [ ] Add cartographic coordinates to custom shaders https://github.com/CesiumGS/cesium/issues/9735
- [ ] Implicit tiling coordinates https://github.com/CesiumGS/cesium/issues/9736
- [x] Feature IDs in custom shaders https://github.com/CesiumGS/cesium/issues/9894
- [ ] Property textures in custom shaders
- [ ] Property tables in Custom Shaders
Pairity with the old Model.js
The intent of ModelExperimental is to someday replace the existing Model.js. Here are the critical steps to get it there:
- [ ] Support 3D Tiles 1.0 formats https://github.com/CesiumGS/cesium/issues/9836
- [x]
b3dm- transcode toModelExperimental3DTileContentwith feature metadata and instancing - [x]
i3dm- [x] Transcode to
ModelExperimental3DTileContentwith feature metadata and instancing - [x] Make sure
ModelInstanceCollectionwill no longer be needed
- [x] Transcode to
- [x]
pnts- [x] Add support for point cloud attenuation
- [x] Add support for eye dome lighting
- [x] Transcode to
ModelExperimental3DTileContentwithPOINTSprimitives and metadata
- [x]
cmpt- make sure this is wired up to useModelExperimentalas needed. - [ ]
vctr- transcode toModelExperimental3DTileContent - [ ] Support classification models so we can replace
ClassificationModel.
- [x]
- [x] Models that change over time:
- [x] glTF skinning
- [x] glTF morph targets
- [x] glTF animations
- [ ] Cesium OSM building support
- [ ] Support
CESIUM_primitive_outlineglTF extension - [ ] Support the old batch table hierarchy
- [ ] Support
- [x] PBR lighting
- [x] Basic PBR lighting
- [x] Image-based lighting
- [x] Other existing features
- [x] custom light color https://github.com/CesiumGS/cesium/issues/10058
- [x] Shadows
- [x] 2D/Columbus View support https://github.com/CesiumGS/cesium/issues/9934
- [x] Back face culling from constructor
- [x] clipping planes
- [x] Clamp-to-ground
- [ ] Styling
- [ ] GPU styling https://github.com/CesiumGS/cesium/issues/9944 see also https://github.com/CesiumGS/cesium/issues/9572
- [ ] Use statistics in the styling language
- [x] styling point size https://github.com/CesiumGS/cesium/issues/10046
- [ ] Use min/max values of metadata properties for better color ramps
Consider Deprecating
- [ ] glTF 1.0 support (as it adds considerable complexity)
- [ ]
KHR_techniques_webglsupport (related to glTF 1.0) - [ ]
KHR_materials_commonsupport - [ ] ~Silhouettes as derived commands~
Updated and reorganized the roadmap. Many of the outstanding tasks have GH issues, I linked them where appropriate.
A few more I can think of right now
- [x] Allow dynamic model matrix updates to scene graph. This can be done before animations proper.
- [x] Support
AGI_articulations - [ ] Custom shaders (taking some things from styling)
- [ ] Use statistics in the styling language
- [ ] Use min/max values of metadata properties for better color ramps
- [ ] Remove all other glTF 1.0 extensions
- [x] Minimum pixel size https://github.com/CesiumGS/cesium/issues/10081
- [ ] Clean up the
Spec/Data/Modelsfolder. All the models should be deleted except those in theSpecs/Data/Models/GltfLoaderfolder which can eventually move into the parent folder. - [x] Debug wireframe but done correctly - https://github.com/CesiumGS/cesium/issues/9066
And some comments
-
vctrtranscode toModelExperimental3DTileContentmay not be in scope for this effort. Let's keep treating it as its own content typeVector3DTileContent. Let's see where the next iteration of vector tiles takes us first. -
ClassificationModel- leverageGltfLoaderbut otherwise treat as a separate content type since it so heavily uses the vector engine - I think old batch table hierarchy is already supported...?
- We may still be able to support glTF 1.0 as long as we have a runtime upgrade path that does not involve using
KHR_techniques_webgl. This may involve changes in gltf-pipeline and won't work for all assets like the BIM tileset.
In addition to basic 2D/Columbus View support...
- [x] Viewing models and tileset correctly in 2D: https://github.com/CesiumGS/cesium/issues/5112
One thing to note is new issues about ModelExperimental have their own label of category - ModelExperimental