Wrinkle maps

From Valve Developer Community
Revision as of 14:51, 26 September 2013 by Artfunkel (talk | contribs) (moved Wrinklemaps to Wrinkle maps)
Jump to navigation Jump to search
Wrinkle maps add fine detail to the forehead.

Wrinkle maps are a component of DMX flex shapes which make per-vertex changes to a model's texture when the flex is applied. They are typically used to add fine wrinkling detail to a character's skin.

The term "wrinkle map" is confusing, because it can refer to the act of adding or removing wrinkles. The terms "compress" and "stretch" are used to refer to these two effects.

Generation

Wrinkle maps are generated programmatically. The important value is the wrinkle "scale", which defines the upper limit of wrinkling. A scale of 1 means that only the vert which moves the furthest is fully wrinkled; a scale of 2 means that the top 50% of moving verts are fully wrinkled.

  • Positive wrinkle scales lead to the compress texture being applied.
  • Negative wrinkle scales lead to the stretch texture being applied.

It isn't possible for a single shape to both stretch and compress; if that effect is needed, make a flex controller which wraps multiple shapes.

dmxedit

The official SDK tool for creating wrinkle maps is dmxedit. It is run on an exported DMX using a simple Lua script like this:

Load("C:/heavy_morphs_high.dmx")

SetWrinkleScale("BrowInV", "WrinkleNose", -0.5) -- controller name, shape name, scale
SetWrinkleScale("BrowInV", "RaiseBrowIn", 2)
-- etc.

ComputeWrinkles()

Save("C:/heavy_morphs_high.dmx")

Run dmxedit -help for more details.

Blender SMD Tools

The Blender SMD Tools can generate wrinkle maps when exporting your model. Enable Advanced flex mode, generate a flex controller block, and set a non-zero wrinkleScales value in the relevant flex controller definitions.

Materials and textures

A $compress texture from Left 4 Dead 2.

There are four VertexLitGeneric VMT parameters related to wrinkle maps:

$compress
$stretch
Path to textures which are applied when a flex controller compresses or stretches the mesh.
$bumpcompress
$bumpstretech
Optional bump maps for $compress and $stretch.