cesium icon indicating copy to clipboard operation
cesium copied to clipboard

Models Roadmap

Open pjcozzi opened this issue 12 years ago • 1 comments

Soonish

  • [x] glTF schema and spec updates
  • [ ] When repeating an animation, check for parameter[count -1] === parameter[0].
  • [x] Embedded shaders, textures, and buffers.
  • [x] Render in and morph to/from Columbus view. Adjust model scale relative to projection?
  • [x] Render in and morph to/from 2D.
  • [x] Remove computeWorldBoundingSphere?
  • [ ] Consistently name id and name in Cesium API to match glTF spec.
  • [ ] Add ById versions of functions like getNode?
  • [ ] How will users know the names of nodes/meshes/materials/parameters? Through the glTF property or easier to navigate properties?

Later

glTF Features

  • [x] Compression
  • [ ] Cube maps
  • [ ] Cameras

glTF Extensions

  • [ ] Collision volumes
  • [x] Binary JSON

Animation

  • [x] Morphing - #164
  • [ ] Material animation, including splines with control points of any type.
  • [ ] Consider skinning with dual quaternions.
  • [ ] Animation blending, e.g., walk to run cycle. Section 11.6 in Game Engine Architecture
  • [ ] Bezier spline

Animation Performance

  • [ ] Only update the joint matrices if the nodes were targeted by an animation that frame, instead of updating the joint matrices for all skinned nodes.
  • [ ] Don't animation when culled. Will still need the right bounding volume: perhaps we can compute it or the user can provide a maximum radius percentage increase.
  • [ ] updateNodeHierarchyModelMatrix performance ideas with parent pointers. See @pjcozzi's notes.

Loading Performance

  • [ ] Fine-grained dependency requests, e.g., compile shader program once required shaders are fetched, not once all shaders are fetched. See functions called from createResources.
  • [ ] In general, what can be done on a web worker?

Rendering Performance

  • [ ] Auto instance when multiple nodes have the same mesh. This will require copy-on-write if the material for one instance changes, e.g., because it is no longer an instance.
  • [ ] Compute tighter bounding sphere than using the bounding box's corner points. Do this as a preprocess in an extra property and fallback to client-side.
  • [ ] Minimize frustum overlap (SAH-like split) - @bagnell
  • [ ] Material-aware draw commands, #797 - @bagnell
    • Cull entire model with a single bounding volumes?
  • [ ] Pack uniforms. #649
  • [ ] Coarse front-to-back sort for early-z.
  • [x] Investigate DXT-compressing textures in a web worker with Crunch using Emscripten. This could be useful throughout Cesium.
  • [ ] Optimize 2D with render-to-texture within a given zoom interval for non-animated/skinned models.
  • [ ] When allowPicking is false, we should still render depth.

Cesium-Specific Features

  • [ ] Add helpers to ModelNode to, for example, easily change the scale transform and interop with TRS animations.
  • [ ] Expose glTF animations with higher-level objects than glTF, e.g., cleanly expose time[0] and the duration.
  • [x] Expose targetable materials. Extend ModelMesh.
  • [ ] Support models in KML.
  • [x] Reuse texture and vertex buffers when loading multiple models. Probably separate model and instances.
  • [ ] Attach points. Need access to node's transform (to root) by name. The transform can change over time due to animation, user interaction, etc.
    • Attach vapor trails to the back of a launch vehicle.
    • Attach a sensor to the front of a UAV.
  • [ ] Pointing. Need semantics for sun, other objects, etc. to control direction and up vectors.
    • Point satellite solar panels to the sun.
    • Point sensor on aircraft to a ground station.
    • Point communication dish to satellite.
    • Point a quad toward the camera, e.g., foliage, explosion, Rudolph's nose, etc. Need to animate when camera moves, not just when time changes.
    • Need to limit degrees of freedom, e.g., one rotation for solar panels and two rotations for communication dish.
  • [x] Shadows
  • [ ] Interop with the Cesium material system?
  • [ ] Ability to change states. #1843

CZML

  • [ ] Schedule animations via CZML, i.e., CZML for calling model.activeAnimations.add.
  • [ ] Drive model pointing.
  • [ ] Embed glTF as a CZML extension? Package together as zip?

Model caching

  • [ ] Reference counting the animation cache so it is also automatically deleted.
  • [ ] Ability to invalidate the whole cache or the cache for one url/cache-key
  • [ ] Avoid potential ping-ponging by delaying actually removing from the cache when the count reaches zero for several frames/seconds. This may also move all the GL delete functions into the render loop, which would be better for requestAnimationFrame timing (however, perhaps not noticeable).
  • [ ] Zero out the embedded resources in the glTF to save even more memory?

Viewer

  • [x] Drag and drop convert COLLADA to glTF via Rest3D web services?

Ecosystem

  • [x] glTF tutorial series
  • [ ] Make gltfStatistics a separate library

Potential Ideas

  • [ ] maximumSizeInPixels so the min/max could be the same and used as a billboard
  • [ ] For performance, render to texture with depth map when pixel size is constant and there are no animation/light changes (billboarding)

Older

b26

General

  • [x] Unit tests
  • [x] Sandcastle example with sample models
  • [x] Tutorial

Animation

  • [x] Add offset (in seconds) to ModelAnimation to allow starting an animation "in progress?"
  • [x] Skinning - #100

Animation - Cesium Splines - @bagnell

  • [x] Change math in splines to use result parameters
  • [x] Change splines from AOS to SOA to share time array and for less cache pollution
  • [x] Optimize splines for decreasing time
  • [x] Spline for piecewise linear interpolation
  • [x] Spline for quaternion interpolation with SQUAD

Animation Performance

  • [x] Fast slerp - @bagnell
  • [x] Optimize Matrix4.fromTranslationQuaternionRotationScale - @bagnell

Rendering Performance

  • [x] Preprocess out DeveloperError, #1240 - @bagnell
  • [x] Use world-space bounding volume in DrawCommand - @bagnell

Cesium Cleanup

  • [x] Rename attributeIndices to attributeLocations throughout.
  • [x] Syncup names in UniformDatatype to WebGL.
  • [x] Replace enum with constants to avoid conversion: IndexDatatype, TextureWrap, TextureMinificationFilter, TextureMagnificationFilter, and PrimitiveType.

pjcozzi avatar Jul 05 '13 17:07 pjcozzi

@pjcozzi Hi Is it possible to change the color of a separate model nodes in a cesium latest version v1.113 ?

ViachaslauBohdan avatar Jan 04 '24 17:01 ViachaslauBohdan