First I was interested how skeletons are working and second I became more and more aware of a genre which I normally neglected. I try to do my pictures in a more natural way, sometimes waiting for hours until the picture is done. So I do normally not use games and I also have only one life and not a second virtual one.
But to see your character running (even less perfect than it could be when you do a "perfect" animation in Blender) is fun to view. A perfect animation normally needs much more work on our characters like shape-keys or additional jiggle bones etc.... but it is cool also.
Elvaerwyn invited me to a Canadian OpenSim community. It took some time to understand what I should do there. Not really knowing what I did I installed firestorm (which is the client caching the world information) and was running around in a very imaginative world. Although I was rather clumsy in the beginning, I was fascinated. The next day Elv presented the complete french lingerie I have added to the assets on a dancing character. So I asked how these characters are animated and got in touch with OpenSim and Bento skeleton.
http://wiki.secondlife.com/wiki/Project_Bento_Skeleton_Guide
After that time went by. Inbetween I was not very lucky about breast movement, so I changed the skeleton for a more natural breast movement of a female character in Blender.
Now I had the question if such a skeleton change is possible in MakeHuman ... An own skeleton does not mean a simplified version, like the game engine one. I wanted to be able to change the bones like I did in Blender.
It first looked as if there are limits, because all bones end in a cube and there was no cube where my new breast bones started. But the breast bone also did not end on a cube, in default skeleton it ends on a single vertex. And why a cube? The position of one vertex is sufficient. And lowerarm01.L and lowerarm02.L meet somewhere in the middle of two cubes ...
So first thing I did. I had to understand how the is skeleton is created. So I learned, that you can use a number of vertices and create the arithmetic mean value to place the bone "somewhere" inside the body. That is the reason for the joint between e.g. lowerarm01.L und lowerarm02.L needs no own cube.
How do we get the vertex numbers?
Well that is simple. Import base.obj into blender. Make sure you use "Keep Vertex Order". The base mesh is an Wavefront .obj. When you only have the base.npz in your makehuman directory you can of course load it from github. (the directory is called <installpath>/data/3dobjs/base.obj normally)
After importing. use the scripting in Blender. There you find an interactive console. Enter the statement
- Code: Select all
bpy.app.debug = True
Now in edit mode you will see the indices numbers.
The result the first different skeleton in Makehuman. Using vertices on left and right side of the body and one of the cubes in spine area, I was able to create a skeleton like this
The effect is nearly unvisible, because the weighting is still the same. Well I changed weighting in Blender ... Now I was able to use create a push up bra without working with targets and other things as well
![Wink ;)](./images/smilies/icon_e_wink.gif)
So can I also do an own weighting? Well the standard weight file is in <installpath>/data/rigs/default_weights.mhw.
It is a rather big uncomfortable JSON file ... and it is directly referenced from the default skeleton <installpath>/data/rigs/default.mhskel
So yes, we can do it. We can also add an own weight file. But then I have to recreate the whole weighting myself. No I do not want that.
The weighting of fingers, legs and face is fine, only the weighting in breast area must be changed. Of course the helpers also. So I had to do a copy of the weighting file which is referenced in default_skeleton file and I have to change this.
When I do weighting in Blender I often did not fix a problem, I mostly created new problems. So I need that more controlled. We work on the basemesh, can we copy weights from left to right, can we only change one vertex group or can normalize it later?
to be continued ...