cesium
cesium copied to clipboard
Models Roadmap
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
idandnamein Cesium API to match glTF spec. - [ ] Add
ByIdversions of functions likegetNode? - [ ] 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.
- [ ]
updateNodeHierarchyModelMatrixperformance 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
extraproperty 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
allowPickingisfalse, we should still render depth.
Cesium-Specific Features
- [ ] Add helpers to
ModelNodeto, 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
deletefunctions into the render loop, which would be better forrequestAnimationFrametiming (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
gltfStatisticsa separate library
Potential Ideas
- [ ]
maximumSizeInPixelsso 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) toModelAnimationto allow starting an animation "in progress?" - [x] Skinning - #100
Animation - Cesium Splines - @bagnell
- [x] Change math in splines to use
resultparameters - [x] Change splines from
AOStoSOAto 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
attributeIndicestoattributeLocationsthroughout. - [x] Syncup names in
UniformDatatypeto WebGL. - [x] Replace enum with constants to avoid conversion:
IndexDatatype,TextureWrap,TextureMinificationFilter,TextureMagnificationFilter, andPrimitiveType.
@pjcozzi Hi Is it possible to change the color of a separate model nodes in a cesium latest version v1.113 ?