Face Creation System
From Black Mesa: Wiki
Contents |
Overview
The face creation system in Black Mesa is a very sophisticated yet simple system that allows there to be a wide variety of faces with very little work but high visual fidelity. The system utilizes a base face mesh to derive phenomes and other core assets that drive the facial animation system. On top of this system, it uses an optimized set of face-shaping facial flexors in real-time to deform any given face into a pre-configured appearance. The result is that in real-time any given character in game uses a combination of face-flexors, textures and submodels to create a unique individual character. Because of this system the developers are striving to have every character in Black Mesa have a unique personality and face.
All of the following characters are created from the same base male head, which is shared across all male characters in the game. Configuration files are used to load in a unique character profile of facial flexes, skin and unique subobjects (such as helmets, glasses, and more).
How it works
The actual system does NOT create completely random faces. Rather, it pulls from character profiles that are made by an artist.
There is a character manifest which holds various character information for the character system. In it, you can define certain characteristics including a target name. When the game is launched, it will check if any of the npc's name and class match those in the file, then assign the apprise settings. If no match is found, then the npc pulls a profile from a default "random pool" (which is a set of hand-made profiles).
However, each entry in the manifest can have a few random variables by itself, so even if the same profile is selected twice by two characters right next to each other, they probably won't be identical and will have randomized elements to them.
Example
//Sci_40
Sci40
{
flex_data
{
cheek_depth .3
cheek_fat_max .8
chin_width .7
chin_height .7
neck_size .4
lowlip_size .5
uplip_size 1.0
mouth_w_max .7
mouth_depth .3
nose_h_max .5
nose_angle .9
nose_d_max .9
nost_height .9
nost_width .5
hairline_puff 1.0
}
bodygroup_data
{
glasses 3
}
skin 7
}

