KhronosGroup / KhronosGroup/glTF

Skinning use cases and examples

Open
#1,403 16 comments 5 reactions 0 assignees View on GitHub
needs discussion spec:skinning specification
Dominant language
HTML
Stars
7.8k
Forks
1.2k
Avg merge
17h 26m
Merged PRs (30d)
5

Description

We currently do not have example assets for many of the less-common situations involving skinning, which has prompted questions about whether they are valid and how to implement them.

Have examples:

- [x] Joint hierarchy is intermixed with non-joint nodes. (https://github.com/donmccurdy/three-gltf-viewer/issues/101)
- [EXAMPLE](https://bghgary.github.io/glTF-Assets-Viewer/?manifest=https://raw.githubusercontent.com/KhronosGroup/glTF-Asset-Generator/v0.6.0/Output/Manifest.json&folder=2&model=10)
- **NOTES:** Renders in 3/3 web players. Known use cases.
- **ACTION:** None.
- [x] Animation transforming parents of joints (works) or parents of skinned mesh (no effect). (#1195)
- [EXAMPLE](https://bghgary.github.io/glTF-Assets-Viewer/?manifest=https://raw.githubusercontent.com/KhronosGroup/glTF-Asset-Generator/v0.6.0/Output/Manifest.json&folder=2&model=2)
- **NOTES:** Renders in 3/3 web players. Known use cases.
- **ACTIONS:**
- [ ] Perhaps warn in validator if mesh has ignored transform.
- [ ] Some or all joints are detached from the scene hierarchy (#1383)
- [EXAMPLE](https://bghgary.github.io/glTF-Assets-Viewer/?manifest=https://raw.githubusercontent.com/KhronosGroup/glTF-Asset-Generator/v0.6.0/Output/Manifest.json&folder=2&model=3)
- **NOTES:** Fails in multiple engines. Plausible use cases are connected to advanced situations, which are likely to require extensions or future work to enable anyway.
- **ACTIONS:**
- [x] Update spec to disallow.
- [ ] Add to asset generator as negative case.
- [ ] Add check to validator.
- [x] Joint hierarchy has no common root. (#1270)
- As discussed, the `skeleton` property should probably be removed, and can already be ignored by implementations. In addition to that, we should have an example asset for which no common root is possible (e.g. bones form two subtrees starting from the scene root).
- [EXAMPLE](https://bghgary.github.io/glTF-Assets-Viewer/?manifest=https://raw.githubusercontent.com/KhronosGroup/glTF-Asset-Generator/v0.6.0/Output/Manifest.json&folder=2&model=7)
- **ACTION:** If hierarchies without a common root can be implemented consistently, remove `skeleton` property. If not, consider adding restriction that joint hierarchy should have a common root, whether or not `skeleton` property is kept.
- **NOTES:** Renders in web players. Very likely to break on import to DCC tools. Use cases are not very clear... leaning to disallow this use. Decision on `skeleton` TBD.
- [x] Multiple meshes sharing a single skin. (#1285)
- [EXAMPLE](https://bghgary.github.io/glTF-Assets-Viewer/?manifest=https://raw.githubusercontent.com/KhronosGroup/glTF-Asset-Generator/v0.6.0/Output/Manifest.json&folder=2&model=6)
- **ACTIONS:** None.
- **NOTES:** Works in current engines, but doesn't really unlock certain use cases for shared skins (like crowds). It's valid, but an extension or spec update might be needed to enable those advanced use cases later.
- [x] A subset of joints in one skin are reused in another skin. (https://github.com/KhronosGroup/glTF/issues/1454)
- [EXAMPLE](https://bghgary.github.io/glTF-Assets-Viewer/?manifest=https://raw.githubusercontent.com/KhronosGroup/glTF-Asset-Generator/v0.6.0/Output/Manifest.json&folder=2&model=8)
- **ACTIONS:** None.

TBD:
- [ ] Many (>4) joint vertex influences. (#1381)
- *TODO — example*
- **ACTIONS:** None, spec states >4 influences are allowed.

In each case, if we find that an example cannot be consistently implemented we may tighten the spec accordingly.

Contributor guide

Open the contributing guide

Research direction

Start by reviewing the unchecked skinning cases and the linked issues, then inspect the relevant specification, asset generator, and validator work mentioned in the checklist. Done means the remaining examples or negative cases and validator checks are added, with the specification decisions for unsupported cases recorded.

Written by the indexing model from the issue text.

Assessment

Domain
computer-graphics
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.