Character creation/customization system

Hi, all!
Have anybody done character creation systems based on morphs?
Like ability to set height for character, leg size, face features, etc.
What is required to do so? I know I can make morph target (shape key) for each change needed,
but I see that some changes to skeleton are required, is there some articles on topic to
look into, or examples, or anything? I don’t need anything fancy, something average should do.

I know I can use bones to set basic macro parameters like height, arms/legs size, etc. but these
do affect a lot and require some complex calculations to look right. I knwo tweaking these I eventually can get
to right direction, but I hope somebody did this and could tell about how to do it properly from start.

http://www.manuelbastioni.com/index.php

http://blog.machinimatrix.org/2015/12/17/avastar-2/

http://www.geocities.jp/higuchuu4/index_e.htm

http://www.tombraiderforums.com/showthread.php?t=147100

these are free ones. Of course, if you want you can shop for iclone character generator / daz 3d / poser, for some ready made content.

And obviously Maya / Max has rigging, animations…

Well, these are already completed character generators (you forgot makehuman btw).
Thanks for the links.
I want to do in-game character generator and trying to guess what is needed to do that…
The reason for doing it in game - character customization is fun for player. Also, if NPCs look diffrent
game feels more diverse and look better. I’m aware of some commercial systems in Unity,
but I want to make my own, but I have not enough knowledge to make this effectively yet…

What about starting with a base? that is, a master model?

Also the license for Manuel Bastioni Lab meshes is AGPL, which might not suit all.
Makehuman with CC0 license is much preferred as generator tool.

Yes, I start with base, and I already can change general height and arm/leg lengths.
This is already not trivial, as I need to compensate proportions. These all changes are skeleton-based
(I just scale bones).
I’ve got a feeling that I’m reinventing the wheel and in not most efficient way. I need some insight
from more experienced people.

And no, I don’t want to go too far with it now, but I need to understand I can get hight level of flexibility
if I need to be.
My current list of required features:

Macro:
height
torso size (proportional)
legs size (proportional)
arms size (proportional)
head size (proportional)

Micro:
eyes size (height/width)
eye position (vertical)
eye slant
nose size (width/height)
nose position (vertical)
mouth size (width/height)
mouth position (vertical)

I use face rig, so the above changes require morph + bone changes, as I can’t get good results
with just bone pose…

So I basically need to find a system to do such changes, which I could extend as I need…

It looks like You have all pieces that are needed for character customization:

  • base model (rigged);
  • softwere for defining morphs (shape keys in blender)
  • animated model class with setmorphweight in Urho
    Just put them together and find right configurations.
    Also it may be a good idea to have some non deform bones (I dont’t know how it’s called in other softwere then blender) responsible for animations with child deform bones responsible for customizations (non animated). For example, to control eyes position and scalling this setup should work:
  • “head bone” - non deform, used in animations but doesn’t directly affect verticies of model. This bone is parent to:
    • eye bones - deform bones, non animated - they will be moved by parent “head bone”. Since they are deform bones You can manipulate eyes position by moving them or eyes size by scaling them (of course You will need good bone weight setup) without affecting animations.
1 Like

I think the way to go is to store a map between bone name and 4 vertices id that define bone position (you could use edge loops would you need more accuracy). This could be easily exported from Blender.

Then after applying the morph in Urho3D, which can stretch or shorten the limbs in non linear fashion, modify skeleton based on new vertices positions. That way the skeleton will “follow” the mesh.

Alternatively, if you’re using some morph targets, you could store bone length with full morph applied and modify skeleton based on fractional weight applied.

@Mike thanks a lot for explanation. I see that makehuman uses vertice markers which are stored with mesh,
looks like way to go. But it looks like the same morph needs to be applied to clothes meshes, which makes
the whole thing a bit more complicated…

@lezak - a problem is that I need different pieces of clothing (and naked) applied to the same
character, so it looks like somehow the morph needs to produce the same effect on all meshes
for animation to work properly…

Makehuman uses clothes helpers for this, but I don’t really understand how this works.
Probably some form of weight transform, or distance-based…

Makehuman (and certainly every other app) maps each cloth vertice to character nearest vertice, which ensures that clothes tightly fit the character, without poking (this was explained in old MH tutorials).
The map is exported by MakeClothes.

Manuel Bastion is AGPL for the code part, the models you generate for your use are CC-BY.
The tool is intended for creating a master model the way you want.
By the way, @Mike, the character lab sports an automatic proxy fitter while make clothes need adjusting weights manually… much more time consuming and error prone.
Looks like Manuel Bastioni has been a long-time contributor to MakeHuman…

Manuel stopped activity a few years ago and left about 2 years ago.
Basically Makehuman stagnated since about 2013 or so. But the software itself is quite stable
and very usable.

Also I find workflow in Manuel Bastioni Lab more complex, and I can’t find any support for clothing
(and for hair either). Also face handling is quite primitive requiring lots of morphs and no rig.
I’d follow the project but now it is 100 years to have Makehuman features.
I wish them both success though, having both will benefit users.
However Manuel’s license is not really nice for OSS products wishing
permissive licenses:
http://www.manuelbastioni.com/guide_license.php
As CC-BY is intended only for closed source works, all the rest have to use AGPL3.

But that is really not what I want to discuss here - I want techniques,
not external character generator products.

I see. By the way, what about a morphing library?
I didn’t inquire into that, I must remember to check…

What about morphing library? I don’t think I need it as Urho supports morph targets.

Well, I see some problems with marker approach.

I have no problems setting origin of bone transform and it works fine. The problem is tip placement.
As Urho does not care about bone tips, there’s no way to have rotational data for all bones using markers.
Or do I miss something?

Well, bone bounding boxes are all messed up in my skeletons (due to limitation
of exporter probably) so I have to rebuild them to prevent crashes in debug build of Urho, but that is another story,
so if I have proper bounding boxes, could they help me to calculate bone tips?

I need to have bone tips to calculate rotation changes in bones. Or is there another approach?

I’ve never tried it but having same/similar shape keys on several meshes should be easily achived in blender by merging all meshes into one and then using sculpt mode to make shape keys (propably there will be to many verticies to do something in edit mode). After that just seperete meshes, do some tweaking and You should have similar effects on all of them.

How about proportional editing (toggled with O)?

Couldn’t you use layered one-frame animations for the scaling of the bones? Exporting only the scale for those and not in multi-frame animations.

Well, I believe more in generated maps, a problem is to make all shape keys to be similar,
that all looks too complicated…

For best effect on a humanoid character generator, I would personally create multiple geometries based first on gender, then age, and then body type. Create the appropriate morphs for each of these geometries. Modify the base skeleton according to the necessary animation sets, and finally in-engine smoothly blend between drastic changes in height or girth.

It’s a lot of work, but you seem to have most of what you need