cesium icon indicating copy to clipboard operation
cesium copied to clipboard

3D Tiles Next CesiumJS Roadmap

Open ptrgags opened this issue 4 years ago • 4 comments

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 to Cesium3DTile objects when the content loads. This naïve transcoder is similar in function Tileset3DTileContent (external tilesets).
  • [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 mixed ADD/REPLACE refinement. This specification may be revised in the future
    • [x] Implement Multiple3DTileContent
    • [x] Add support for multiple contents in implicit tiling.
  • [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 of Model.js (see more in the Other Improvements section below)
    • [x] Create classes for representing feature metadata concepts
    • [x] Create a parseFeatureMetadata() function for parsing the EXT_feature_metadata extension
    • [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 the EXT_batch_table_hierarchy extension.
    • [x] Load feature metadata from a glTF via GltfFeatureMetadataLoader
    • [x] Redesign Cesium3DTileBatchTable to use feature metadata. This will enable using feature metadata for styling.
    • [x] Update Gltf3DTileContent to support feature metadata
  • [x] 3DTILES_bounding_volume_S2 - in progress, see PR #9506
  • [x] Custom shaders See roadmap issue basic implementation.

Additional Supporting Extensions

ModelExperimental Implementation Improvements

General Improvements

  • [ ] Support noData and required from EXT_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() and getPropertyNames() - 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_PointSize in 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 to ModelExperimental3DTileContent with feature metadata and instancing
    • [x] i3dm
      • [x] Transcode to ModelExperimental3DTileContent with feature metadata and instancing
      • [x] Make sure ModelInstanceCollection will no longer be needed
    • [x] pnts
      • [x] Add support for point cloud attenuation
      • [x] Add support for eye dome lighting
      • [x] Transcode to ModelExperimental3DTileContent with POINTS primitives and metadata
    • [x] cmpt - make sure this is wired up to use ModelExperimental as needed.
    • [ ] vctr - transcode to ModelExperimental3DTileContent
    • [ ] Support classification models so we can replace ClassificationModel.
  • [x] Models that change over time:
    • [x] glTF skinning
    • [x] glTF morph targets
    • [x] glTF animations
  • [ ] Cesium OSM building 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

ptrgags avatar Apr 30 '21 18:04 ptrgags

Updated and reorganized the roadmap. Many of the outstanding tasks have GH issues, I linked them where appropriate.

ptrgags avatar Nov 29 '21 21:11 ptrgags

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/Models folder. All the models should be deleted except those in the Specs/Data/Models/GltfLoader folder which can eventually move into the parent folder.
  • [x] Debug wireframe but done correctly - https://github.com/CesiumGS/cesium/issues/9066

And some comments

  • vctr transcode to ModelExperimental3DTileContent may not be in scope for this effort. Let's keep treating it as its own content type Vector3DTileContent. Let's see where the next iteration of vector tiles takes us first.
  • ClassificationModel - leverage GltfLoader but 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.

lilleyse avatar Nov 30 '21 00:11 lilleyse

In addition to basic 2D/Columbus View support...

  • [x] Viewing models and tileset correctly in 2D: https://github.com/CesiumGS/cesium/issues/5112

lilleyse avatar Jan 04 '22 16:01 lilleyse

One thing to note is new issues about ModelExperimental have their own label of category - ModelExperimental

ptrgags avatar Feb 09 '22 14:02 ptrgags