Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3D Tiles Roadmap #3241

Open
pjcozzi opened this issue Nov 24, 2015 · 21 comments
Open

3D Tiles Roadmap #3241

pjcozzi opened this issue Nov 24, 2015 · 21 comments

Comments

@pjcozzi
Copy link
Contributor

pjcozzi commented Nov 24, 2015

New to 3D Tiles? See Introducing 3D Tiles.

This work is in the 3d-tiles branch.

In pseudo-priority order within each section:

Draft 1.0

Post Draft 1.0

Later + Ongoing Performance

  • 3D Tiles spec and Cesium implementation
  • 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
    • 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?, Culling / OBB optimizations #2861
    • 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
    • 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, 3D Tiles - refine to visible children in replacement refinement #4287
      • Still need to clip the parent to the loaded children
    • 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
    • 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?
      • Is selectTiles better implemented with a priority queue instead of explicit sort?
    • Performance: nest spatial data structure to optimize additive refinement, Nest spatial data structure to optimize additive refinement 3d-tiles#11
    • Performance idea: prefetch children or siblings? For example, see Figure 3. Track stats over time to change algorithm or disable.
    • Performance: Reduce per-DrawCommand overhead
    • Performance: Fuse nodes at runtime to reduce the number of DrawCommands.
    • 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).", Refinement based on proximity 3d-tiles#101
    • Performance: devicePixelRatio on mobile, Honor devicePixelRatio take 3 #3288
    • Performance: Omni-directional Relief Impostors (ORI), Massive models and upper LOD levels implementation #4908 and https://groups.google.com/forum/#!topic/cesium-dev/tCCooBxpZFU%5B101-125%5D
    • Point clouds: hidden point removal, anisotropic filling, and shape depiction, and compute normals for lighting. Also edge-preserving blur in Game Engine Gems 3 and CIS 565.
    • Labels on buildings
    • Occlusion culling. Drive refinement with VMSSE?
    • Morph between LODs
    • Support 2D and Columbus view. 3D Tiles in 2D/CV #4884
    • Make PointGeometry and PointAppearance public. Added PointGeometry and PointAppearance #3203
    • Job scheduler, Unified time slicing tasks #2655
    • Memory-efficient (bitfield) per-building cast/receive shadows if needed
    • More Dynamic SSE 3D Tiles - Dynamic Screen Space Error #4307
      • 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.
      • 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
      • 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", Massive models and upper LOD levels implementation #4908

Older

@e-andersson
Copy link
Contributor

Does "Cache management and replacement" include handling of which Cesium3DTilesets will be loaded or is it aimed at the lower-level tile handling? We're quite interested in tileset loading/unloading since we'll potentially have a large number of tilesets available to the viewer, causing a lot of initial tiles.json loading and repeating iteration over primitives.

@pjcozzi
Copy link
Contributor Author

pjcozzi commented Nov 26, 2015

Does "Cache management and replacement" include handling of which Cesium3DTilesets will be loaded or is it aimed at the lower-level tile handling?

It means lower-level tile handling, but thanks for reminding me about which Cesium3DTileset to load. I added that to the roadmap. :)

If you are interested in working on either, I'm happy to discuss in more detail.

@pjcozzi
Copy link
Contributor Author

pjcozzi commented Jan 22, 2016

Stick with the Cesium3DTile prefix for names?

After doing a bunch of reference doc, I don't have a strong preference, but I am find with this, e.g.,

new Cesium.Cesium3DTileset

Compared to

new Cesium.Tileset3D
new Cesium.Tiles3D
new Cesium.ThreeDTileset

Cesium.Tileset3D would also be OK. @lilleyse what do you think?

@pjcozzi
Copy link
Contributor Author

pjcozzi commented Jan 25, 2016

@TomPed I added a section above for you for when you start on 3D Tiles.

@TomPed
Copy link
Contributor

TomPed commented Feb 2, 2016

Rename Cesium3DTile#readyPromise to Cesium3DTile#contentReadyPromise

@pjcozzi does this mean the field readyPromise in the file Cesium3DTile.js?

@pjcozzi
Copy link
Contributor Author

pjcozzi commented Feb 2, 2016

@TomPed yes.

@TomPed
Copy link
Contributor

TomPed commented Feb 3, 2016

Likewise, replace isReplacementRefinable and isContentUnloaded with readonly properties. Complete doc.

@pjcozzi I can't seem to find isReplacementRefinable in the project.

@lilleyse
Copy link
Contributor

lilleyse commented Feb 3, 2016

Ah, don't worry about that we removed that. I'll update the task.

@TomPed
Copy link
Contributor

TomPed commented Feb 3, 2016

3DTileContentProvider

Should this be Cesium3DTileContentProvider?

@lilleyse
Copy link
Contributor

lilleyse commented Feb 3, 2016

Yeah. The asterisks are just saying all things named like that.

@pjcozzi
Copy link
Contributor Author

pjcozzi commented Apr 2, 2017

@rory-ye-nv
Copy link

what's the status for vector tiles? it's no update or example, and no spec found in 3D tile 1.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants