Some applications allow you to generate a human mesh by simply adjusting parameters. The results are broad and convincing: you can get from a thin asian girl to a muscular african man by just adjusting those. MakeHuman, for example, exposes the following UI:


What is the technique and what are the formulas used to implement that kind of procedural humanoid generation? Is there any published study/resource with the required information?

  • \$\begingroup\$ If you are really interested and won't get an answer, you can check the source code of Makehuman. ;) \$\endgroup\$ – János Turánszki Jan 8 '15 at 23:43
  • \$\begingroup\$ @JánosTuránszki that is what I am doing right now, thank you! The project is big, though, so it should take some time until I manage to filter the required information out. \$\endgroup\$ – MaiaVictor Jan 9 '15 at 0:34
  • \$\begingroup\$ A few variants of base mesh + lots of shape-keys + premade textures + predefined mesh-to-bone binding + a vertex merging algorithm. (Because they have the mesh split into several parts which seem-lessly blend with each-other.) \$\endgroup\$ – Wolfgang Skyler Jan 9 '15 at 1:01
  • \$\begingroup\$ Thank you! But TBH I have no idea what are shape-keys or predefined mesh bindings, nor what that vertex-merging algorithm would look like (is it just an average morphing from mesh A to mesh B?) - You seem to know enough to post a very meaningful answer! \$\endgroup\$ – MaiaVictor Jan 9 '15 at 1:03
  • \$\begingroup\$ Sorry, that has better phrasings. Predefined skeletal bindings? Skeletal animation? Maybe just Animation? Yeah. It's basically just a morph. Best done with offsets so that you can do multiples at once. \$\endgroup\$ – Wolfgang Skyler Jan 9 '15 at 2:23

So you start off with a base mesh. Maybe a few. It might be split up into multiple portions (eg, the shoulder mesh, the neck mesh, the head mesh.) Each section might have a variety of "options" (eg. elf, male, female, etc.), alternatives that can be swapped out into the same position. You can think of it much like a seamless texture. As long as all the edges line up exactly, you can do whatever you want in the middle.

Vertex merging/vertex welding/removing duplicate vertices/whatever else it's called, is merging all those parts into one solid mesh/humanoid. You have all those meshes, defined by vertices, whoms edges line up just right so that you don't see any lines between them. What that means is that both part-mesh a and part-mesh b both need to have vertex(s) at p to have a seamless edge. When combining it so you can see it as a whole, you remove the duplicate, so there's only one p instead of one p for mesh a, and one for mesh b. If that makes any sense.

You can google around for a better explanation.

Shape keys, as explained on Blender Cookie: https://www.youtube.com/watch?v=gDZcmAWL2jA

Programmatically, there are several approaches to this. The simplest is to have a base-mesh, and then accompanying data that has "offsets". You then apply a percentage of that offset to the base-mesh, and it transforms it by that amount. combine multiple offsets, and you can end up with some pretty complicated results. The hardest part is moderation of these different offsets, to prevent unwanted deformities.

So now you have a mesh that gets distorted in all kinds of funny ways. To make it ready for use, you just need to animate it. Give it a skeletal structure. Really, that's just some extra data you tag into your base-mesh.

Aside from that, programmatically, you need moderation. You need to have, coded in, what keys go together, what parts of the mesh go together when, what shape-keys can and can't work with each-other and, if they can, how much they can both be applied before you start having problems. I'll also add onto that, different sets of shape-keys (male shape-key, female shape-key, lizard shape-key, etc.)

If you aim for a make-human like feature, the hardest part (I expect), would be the sheer amount of data for the shape-keys + base-meshes + animations. To get to something anywhere close to make-humans level requires sheer data. Particularly on the shape-key part.

  • \$\begingroup\$ I see what is going on now! I spent some futile time looking on the source code for algebraic formulas, but that is so much more obvious, d'oh! Thank you. \$\endgroup\$ – MaiaVictor Jan 9 '15 at 2:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.