playcanvas / playcanvas/engine

Optimize bone skinning - hierarchy

Open
#2,203 2 comments 0 reactions 1 assignee View on GitHub

@mvaligursky is already working on this.

Since Jun 25, 2020.

area: graphics enhancement performance
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.