playcanvas / playcanvas/engine
Optimize bone skinning - hierarchy
@mvaligursky is already working on this.
Since Jun 25, 2020.
- Dominant language
- JavaScript
- Stars
- 16.8k
- Forks
- 2k
- Avg merge
- 4h 32m
- Merged PRs (30d)
- 222
Description
Related to #2202.
Currently to render the animated character, we sync the hierarchy to generate world matrices for bones. Then we multiply those matrices by inverse character root bone matrix to have them in local space - which is pretty expensive.
We should explore a possibility to create an optimized hierarchy structure for characters to speed this up:
-
flatten the hierarchy into array of matrices (possibly pointing to original hierarchy directly), stored in breadth-first order, allowing world matrices by updated in a single loop, possibly using wasm module
-
matrices in this flat storage would be relative to character root, allowing us to avoid matrix multiply per bone
-
This would have impact on many things a solution would need to handle, such as:
- keeping original hierarchy in sync (perhaps by overriding getWorldMatrix to multiply in the character root matrix.
- others (to be added to the list).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.