Q:

What techniques could I use to give players the ability to control certain features, e.g. fatness?

I'm working on a tool for character customization (e.g. starting from a base model, a player can control his fatness), so I'm looking for ideas, techniques or other regarding this topic.
After some research I thought to this technique: starting from two models (one standard human and one fat human, both with the same data, like vertices and triangles), then creating a new model by storing data about the two original mesh (e.g. store vertex data of the second mesh as color data), and controlling their interpolation with a shader.
What do you think about this idea? Suggestions?

A:

You might want to have a look at Elder Scrolls: Oblivion, in particular the character creation screen. They do a lot with modifiable anatomies there. Each race has its own anthropometric norms and ranges. Anthropometrics is the study of the particular measurements / proportions of individual physical characteristics (phenotypes) of individual human beings, comparatively speaking. It's a good place to start doing some research into exactly what varies between individuals.
Your idea sounds good, although I think simply interpolating between just two meshes may not give you enough variation.

A:

I would create two models for every attribute you want morphed, much like your original idea of having a fat and skinny model.
Using 'nose' as an example, have a 'nose' slider and you interpolate between the two nose meshes for your result.  This way you could have many variations of modifiable attributes.
Depending on your language, I would then dynamically create a final model by assembling the interpolated body pieces together.  You could then save this model if you want to use it between game plays, or it may be better / simpler to just save the various interpolation values and recreate the final model each time you load the game.
Stitching together the final model may be difficult if the perimeter vertices of the two models aren't the exact same.
[Edit] You may have to define reference vertices by name / id to know where to stitch the nose (for example).  If you have a head size attribute, the location of the nose will vary.  But if you knew nose vertice 'xxx' maps to head vertice 'yyy' you could shape the nose to fit the new head size exactly.

