Yes, all bones are updated because the skeleton doesn't know which bones are important to your animations, rendering, or other code that may use a bone for something. You could use skin bones to control which bones are updated
bones in a skin that is not active are not updated. If you have some other way of knowing which bones don't need to be updated, you could modify the runtime to skip those bones.
Here is the part of the runtime that controls which bones are updated:
https://github.com/EsotericSoftware/spine-runtimes/blob/4.0/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java#L169
The skeleton creates a list called updateCache
that is all the bones and constraints that need to be updated, sorted so parent bones are updated first, constraints are applied at the right time, and bones constraints affected are updated afterward.
The logic there for skin bones is a little tricky, but bone.data.skinRequired
is true when the bone is in a skin. When sorted
is true, the bone will be skipped
it won't be added to updateCache
.
You can modify the bones a skin has to control which bones are updated, just be sure afterward that you call updateCache()
on the skeleton to rebuild the list.