Enhance THREE.Skeleton to act as a “Blender Armature”

I propose that the THREE.Skeleton be enhanced to act like an armature in Blender or a skeleton in 3DS Max/Maya. This would mean that the Skeleton holds bones and animation data like THREE.SkinnedMesh but without any geometry. Implementing this would allow other THREE.SkinnedMeshes to constrain their bones’ transformations to the Skeleton's bones (of the same bone name) and use the Skeleton's animations. This is useful for when you have a model of a character and other models that attach to him (his Skeleton) like armor and weapons (which may only have a subset of the bones of the entire Skeleton).

Currently, I have to store the animation in every THREE.SkinnedMesh. Ideally, the animation would be stored into only the THREE.Skeleton object and the other meshes can just attach to it and share its animations. Not only would this greatly reduce file sizes (which helps a lot on super bandwidth heavy model viewer websites like mine), but it also opens the door up for things like ajaxing a new animation directly into the Skeleton at runtime.

I also want to eventually attach particle emitters to bones, but the only reliable way to know that a bone will exist is if it is apart of the Skeleton and not rely on the same bone always being there in meshes that get swapped out a lot.

This new functionality should not change the way that THREE.SkinnedMeshes currently work. SkinnedMeshes should still be able to have optional animations attached to them and don’t have to rely on a THREE.Skeleton.

This was mentioned as the last bullet point of #3510.

I originally posted this on Stackoverflow http://stackoverflow.com/questions/25073534/three-js-use-skeleton-like-an-armature-in-blender a couple of weeks ago, but didn’t get any replies so I’m going to assume it’s not implemented/possible yet, meaning it is ripe for a feature request.

Author: Fantashit

1 thought on “Enhance THREE.Skeleton to act as a “Blender Armature”

  1. I think this issue can be closed as “obsolete” — it predates the new animation system, and animations can now be serialized separately from models, and reused with different objects by assigning a different root to AnimationMixer instances. For example:

    var walk; // THREE.AnimationClip
    
    var mixer1 = new THREE.AnimationMixer( mesh1 );
    var walkAction1 = mixer1.clipAction( walk );
    walkAction1.play();
    
    var mixer2 = new THREE.AnimationMixer( mesh2 );
    var walkAction2 = mixer2.clipAction( walk );
    walkAction2.play();

Comments are closed.