Modular Characters - Swapping out armor, clothing and body parts

I am trying to create a modular character system where a character’s appearance changes based on what armor they are wearing like in games such as World of Warcraft and the Diablo series.

I’m coming from Bevy where I was able to create such a system using the following steps:

  • Create or obtain a rigged character with animations in blender
  • Save a copy of the character, delete the meshes and export only the skeleton with the animations in a .glb
  • Export various copies of the character with the entire skeleton but only parts of the mesh (legs, torso etc) to their own .glb files with no animation data
  • Load the skeleton file and relevant character part files
  • Find the skeleton bones on the imported parts and parent them to the same named bones on the imported skeleton
  • Animate the skeleton

I’m able to load a full character and animate it with no issue (Left side in the example). I can also load the skeleton and animate it (middle). When I load a part though, parenting the bones on that part to the skeleton bones doesn’t seem to work how I expect. The bone nodes actually do follow the movement of their parent. You can see this because I paint blue cubes on the part bones and they are clearly attached to the skeleton bones which are painted with red cubes. The rest of the mesh however does not seem to be influenced by the bones as expected.

I’ve been reading the posts about how this was done before and it seems different methods were used but I was having trouble understanding the examples.

Am I trying to do this in a way that makes sense, or is there a better more “accepted” method?

Threads I read so far:

EDIT: Thanks to user @11128 I was able to create a working demo:

And I made a YouTube video guide on the method I used:

1 Like

I felt like I lacked an overall understanding, so I analyzed good models. I hope this analysis helps you

A model = adventurer(skeleton, mesh-skeleton, animation-skeleton)

All of the model’s animations were bound by the skeleton.

Therefore, it can be seen that there is no problem even if a transformnode other than the bound bone structure is deleted or transformed in the parent relationship. (In the case of a specific binding structure, the corresponding parent must also be maintained.)

B model = humanoid-skeleton(animation-key frame, transfromNodes-key frame)

The transform node that looks like a skeleton actually has no skeleton and has animation consisting of key-frames of the transform.

So, if you have a player as the B model,
By binding the clothes to be customized to exactly match the transform, you will get matching results when running the key-frame animation.

ex PG

C model = witch-legs(skeleton(different structure in A model skeleton),mesh-skeleton)

The C model has a mesh bound to the skeleton without animation.
However, since the bone structure of the model is different from model A (it is expected to be different from model B, which is assumed to have bones), animation at an incorrect position will occur as shown in the following PG.

ex PG

As a result

  1. Add skeleton to model B and create animation bound to it
  2. Mesh bound to model C with a skeleton matching model B
  3. The skeleton of the custom mesh of the C model is designated as the skeleton of the B model, and the parent is also declared as a substructure of the B model.
2 Likes

This does not mean that the meaning of this word is wrong or that there is a lack of explanation, but it was confusing because it was translated as follows.

  1. Correct sentence (A is equal to B)
  2. Bad translation (B like A)

So I was a little confused. sometimes the translator seems to be broken.

1 Like

Thank you so much! With your insight I was able to create a working demo. I edited my original post to include a playground link for anyone else who might want to do the same thing.

1 Like