CesiumGS / CesiumGS/cesium

3D Tiles Roadmap

Open
#3,241 21 comments 0 reactions 0 assignees View on GitHub
category - 3d tiles type - roadmap
Dominant language
JavaScript
Stars
15.7k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

New to 3D Tiles? See [Introducing 3D Tiles](https://cesiumjs.org/2015/08/10/Introducing-3D-Tiles/).

This work is in the [3d-tiles](https://github.com/AnalyticalGraphicsInc/cesium/compare/3d-tiles) branch.

In pseudo-priority order within each section:
## Draft 1.0
- **Cesium 3D Tiles implementation**
- [x] Inspector, #4846
- [x] Is the load order correct? The unit tests look OK; however, for example, the buildings on the right should load sooner: http://cesiumjs.org/WashingtonDC/
- [x] Memory issues?
- [x] Unloading issue, #4673
- [x] Empty tile memory usage, #3453
- [x] Crash with high memory usage, #4549
- [x] glTF 2.0, #4009
- [x] Merge request scheduler into master, #3476
- [ ] IE performance, #4166
- [x] Unable to have multiple CesiumWidets on the same page in 3d-tiles branch #5226
- [x] Loose OBBs #4387
- [x] Translucency and artifacts
- [x] Combine translucent back/front commands into a single translucent command, however this will look worse when OIT is not supported.
- [x] Pick translucent features, see `TODO` in `Cesium3DTileBatchTableResources.getVertexShaderCallback`
- [x] Finish derived commands, especially `Cesium3DTileBatchTableResources.getAddCommand`, #3806
- [x] Frustum artifacts #4381
- [x] Finish Styling GLSL-backend https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/140
- [x] Styling - vector support for built-in functions https://github.com/AnalyticalGraphicsInc/cesium/issues/4865
- **Doc and Examples**
- [x] cesium.com hosted examples in the Sandcastle example
- [ ] **Tutorials**
- [ ] Using the Cesium API to load 3D Tiles and interact with individual models.
- [ ] Declarative styling.
- [x] Copy 3D Tiles Sandcastle tests from the `Specs/Data` folder to the `Apps/SampleData` folder.
- Or store test data in cesium.com and download on `npm install` or something similar?
- [x] Any outstanding `TODO`s in the code
- [x] [Spec draft 1.0 issues](https://github.com/AnalyticalGraphicsInc/3d-tiles/issues?q=is%3Aopen+is%3Aissue+label%3A%22draft+1.0%22)
- [ ] **Tools** - [3d-tiles-tools](https://github.com/AnalyticalGraphicsInc/3d-tiles-tools/)
- [x] drillPick point cloud - #4895

## Post Draft 1.0

- [ ] Vector tile - instance geometry volumes, #4665
- [ ] Vector tile - z-order, #4665
- [ ] Vector tile and geometry tile - clipping planes
- [x] If requested - classify with i3dm, #6033
- [ ] Technique like #5128 for fuse tilesets/terrain at runtime
- [x] Draco compression (then quantize at runtime), https://github.com/AnalyticalGraphicsInc/cesium/issues/5120
- [ ] Vector tile format. https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/25, #2172
- [ ] Increase bounding volume by pixel size like `BillboardCollection` and `PointCollection`. See the `Cesium3DTile` constructor.
- [x] Point cloud attenuation example using declarative styling (and vertex shader culling?)
- [ ] scene.pickPosition returns incorrect position #4368
- [ ] Better error metric than SSE? #4043
- [x] Reuse `Primitive` Batch Table, #4328
- [ ] Add convenience functions to the Cesium API for querying features based on the batch table hierarchy - like `getFeaturesByProperty(propertyName, value)` and `getFeaturesByClass(className)`
- [ ] **Cache Management**, @lasalvavida
- [ ] Refactor `TileReplacementQueue` to use `DoublyLinkedList`?
- [x] Example code for app that uses `tileUnload` and `tileVisible` events to re-style a tile that was unloaded, e.g., by tracking features that changed or higher-level context like how 3D Tiles styling works.

## Later + Ongoing Performance

- **3D Tiles spec and Cesium implementation**
- [ ] Add credit to tileset.json, https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/55
- [ ] Download multiple children in a single request, https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/9
- [ ] More declarative styling, https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/2
- [ ] Custom terrain tile format (instead of `b3dm`). Initially support overlaying separate imagery layers?
- [ ] Refinement parameters. https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/15
- [ ] Texture LOD for `b3dm`/`i3dm`
- [x] Cleanup: GLSL bit extract helpers, https://github.com/AnalyticalGraphicsInc/cesium/pull/4315#r79263280
- **Cesium 3D Tiles implementation**
- [ ] AO for 3D buildings (integrate gltf-pipeline)
- [ ] `tileNewlyVisible` and `tileNewlyNotVisible` events
- [ ] **Performance**: Best SSE in center
- [ ] **Performance**: Add extra frustum planes to account for how wide the FOV is and that the viewer might not notice objects on the edge and in the distance (horizon views for sure, maybe not aerial), e.g, two planes with normals perpendicular to the view direction
- [ ] Also, tell users to use a more narrow FOV
- [x] **Performance**: cull/LOD select with union of children bounding volumes instead of the tile's BV. Does the extra CPU overhead result in fewer tiles on average? Is it a performance win?, #2861
- [x] **Performance**: for fast moving views (like flying from home view to Canary Wharf), increase the geometric error so few tiles are requested and then only shown briefly or are already out of view. Could track the viewer's velocity and perhaps heuristics for if a requested tile was immediately culled
- [x] **Performance**: optimize replacement refinement - instead of requesting all children when a tile needs to refine, request only the visible ones, and then allow refining a tile if all the required visible tiles are loaded (instead of all - including invisible - tiles). When the camera moves, and children that are not yet loaded are needed, either render the parent or render the available children and the parent with clipping, #4287
- [x] Still need to clip the parent to the loaded children
- [x] **Performance**: skip levels when refining with replacement refinement
- [ ] For additive replacement, load tiles deep in the tree first, then ancestors
- [ ] **Performance**: optimize batch table memory usage, see `PERFORMANCE_IDEA` in `Batched3DModel3DTileContent.js` and `Cesium3DTileBatchTableResources.js`.
- Evaluate [LZ4m: A Fast Compression Algorithm for In-Memory Data](http://csl.skku.edu/papers/icce17.pdf)
- [ ] **Performance**: Turn off opaque textures for picking pass, e.g., in Miami for rollover picking.
- [ ] **Performance**: exploit temporal coherence in `sortChildrenByDistanceToCamera`
- [ ] Sort by pixel size instead of distance? What about large bounding volumes with sparse contents?
- [x] Is `selectTiles` better implemented with a priority queue instead of explicit sort?
- [ ] **Performance**: nest spatial data structure to optimize additive refinement, https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/11
- [ ] **Performance idea**: prefetch children or siblings? For example, see [Figure 3](http://www.crs4.it/vic/data/papers/cag2004-lpc.pdf). Track stats over time to change algorithm or disable.
- [ ] **Performance**: Reduce per-`DrawCommand` overhead
- [ ] **Performance**: Fuse nodes at runtime to reduce the number of `DrawCommand`s.
- [x] **Performance**: "to avoid jarring popping artifacts, it could be useful for a runtime to scale the viewerRequestVolume to be slightly larger, and then check the geometricError for prefetching (but not rendering until the viewer enters the unscaled volume).", https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/101
- [x] **Performance**: `devicePixelRatio` on mobile, #3288
- [x] **Performance**: Omni-directional Relief Impostors (ORI), #4908 and https://groups.google.com/forum/#!topic/cesium-dev/tCCooBxpZFU%5B101-125%5D
- [ ] Point clouds: [hidden point removal, anisotropic filling, and shape depiction](http://www.crs4.it/vic/cgi-bin/multimedia-page.cgi?id=160), and compute normals for lighting. Also edge-preserving blur in Game Engine Gems 3 and [CIS 565](https://github.com/nischalkn/Project4-CUDA-Image-Filters/tree/submission#edge-preserving-blur).
- [ ] Labels on buildings
- [ ] Occlusion culling. Drive refinement with VMSSE?
- [ ] Morph between LODs
- [x] Support 2D and Columbus view. #4884
- [x] Make `PointGeometry` and `PointAppearance` public. #3203
- [x] Job scheduler, #2655
- [ ] Memory-efficient (bitfield) per-building cast/receive shadows if needed
- [ ] More Dynamic SSE #4307
- [x] Increase SSE as the view gets more horizon
- [ ] Load tiles up to a max distance first, then load tiles in the distant if the camera doesn't move
- [ ] Fog to help visual quality?
- [ ] **Cache Management**
- [ ] When skip LOD is used, remove non-leaf tiles from the cache if they are touched by not rendered
- [ ] Research strategies for proactive cache trimming, e.g., number of seconds/frame a tile was not selected, how far out of view a tile is, etc.
- Potentially track statistics to see if the cache is trashing, and then adjust the replacement algorithm.
- [x] Is it possible to come up with a better default for `maximumNumberOfLoadedTiles` since the use cases are so diverse?
- [ ] Unload sub-trees from tiles with tileset.json content when all their content is unloaded
- [ ] Vertex/texture cache across tiles
- [x] Provide more precise cache size than number of tiles? Count composite tiles as more? Include geometry/texture size with each tile? Perhaps number of tiles is the easiest thing to understand.
- [ ] POP buffer for progressive replacement refinement
- [ ] Review "Interactive inspection of complex multi-object industrial assemblies", #4908

## Older

- [x] gzip tiles? https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/61, @pjcozzi
- [x] 404 for missing compressed tile, #3508, @pjcozzi
- [x] Finish/optimize i3dm tile format. https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/33. @lasalvavida
- [x] Finish point clouds tile format. https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/22.
- Compression notes: [quantization](http://zeuxcg.org/2010/12/14/quantizing-floats/); [Morton curve](http://en.wikipedia.org/wiki/Z-order_curve) to minimize deltas?; compress color to 11-bits like in [Page 3](http://www.crs4.it/vic/data/papers/vast2012-mobile.pdf)? @lasalvavida
- Rendering notes: point size attenuation, including vertex shader culling; styling, #3639
- [x] Evaluate potential Batch Table changes, https://github.com/AnalyticalGraphicsInc/3d-tiles/issues/32, @pjcozzi
- [x] Instanced models are not being cached correctly between different ModelInstanceCollections, #4144
- [x] 3D Tiles cache not cleaning up fully #4147
- [x] tiles invisible and cut, #4333
- [x] Do not set Model.incrementallyLoadTextures to true (default)
- [x] b3dm with external textures reference error #3892
- [x] Fix test failures when running with Karma (makes Travis CI fail): `npm run test -- --exclude WebGL --browsers Electron --failTaskOnError --suppressPassed`
- [x] Implement [WEB3D_quantized_attributes](https://github.com/KhronosGroup/glTF/blob/master/extensions/Vendor/WEB3D_quantized_attributes/README.md). @lasalvavida
- [x] Remove `workaround2657` in `Cesium3DTile.js`, #2657. @lasalvavida
- [x] Fix replacement refinement when external tileset is loaded, #3517, @lilleyse
- [x] Reorganize load/replacement (like terrain) to support shadows, @bagnell
- [x] Add fog, @bagnell
- [x] TileOrientedBoundingBox debug volume bug, #4581
- [x] debug show view frustum, https://github.com/AnalyticalGraphicsInc/cesium/pull/3856#issuecomment-211344411, @lasalvavida
- [x] Fix mouse in Sandcastle example, #3614
- [x] Expose bounding volume, #3138
- [x] Support replacement color in addition to highlight color? See `Cesium3DTileBatchTableResources.getFragmentShaderCallback`.

Contributor guide

Open the contributing guide

Research direction

This is a broad roadmap for the 3d-tiles branch, spanning tutorials, tools, rendering, performance, cache management, and specification work rather than one change. Start by selecting a single unchecked item and reading its linked issue or referenced entry point, such as the Cesium3DTile constructor; completion criteria and relevant tests are defined separately for each item.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
computer-graphics, web-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.