-
Notifications
You must be signed in to change notification settings - Fork 0
Material Controls and Tuning
How the vertex colors are laid out, the example controls, and how to dial things in.
TensionFX writes a per-vertex stretch/squash value into the mesh's vertex colors:
| Stretch (edges longer than rest) | Squash (edges shorter than rest) | |
|---|---|---|
| Standard mesh | Red channel | Green channel |
| MetaHuman | Red channel | Alpha channel (G & B already in use) |
The value is a signed, scale-independent measure of edge-length change
(internally a mean of per-edge length ratios). 0 = no change; positive =
stretch; negative = squash. It's clamped to [0,1] per channel when written to
8-bit vertex color, so very large boosts are better done in the material than
in the deformer.
In a material you read it with a Vertex Color node and split the channels.
These parameters live in the provided example materials — they're a starting point I built, not a fixed spec. Both the sqworm material and the MetaHuman skin material expose many more than shown here; use whichever you need and ignore the rest. Make a Material Instance to adjust them non-destructively.
Turning it on:
-
Sqworm material:
_Use Stretch/_Use Squashcheckboxes. -
MetaHuman skin: the
0 - Tension Solvergroup — Stretched Strength / Compressed Strength, Preview Color Blend, and per-category Color / Specular / Roughness / Normal "Edit" toggles.
Knobs you'll commonly reach for (names vary between the two materials):
- Stretch/Squash Power (sqworm) or Stretched/Compressed Strength (MetaHuman) — how strongly each zone reacts.
- Roughness and Specular multipliers — the roughness/spec shift (the most physically meaningful for skin).
- Saturation / Color amount / brightness — the albedo response.
- Micro Roughness / Micro Normal / Micro Cavity multipliers (MetaHuman) — the micro-detail response.
-
Wrinkle / microTile controls (sqworm
M_Wrinkler) — the procedural wrinkle layer (see note below).
Display colors in the examples are visualization aids — change them freely, they don't affect the math.
Procedural wrinkles are specific to the
M_Wrinklermaterial used by the sqworm and cylinder examples: it grows wrinkles from procedural noise nodes that get stretched by the vertex colors. Great for organic shapes — but for clothing, pre-bake instead (see below).
The stretch/squash power isn't only a material thing. The Deformer Graph exposes the same power inputs at the top level, so you can set a global bias there — handy if you want every mesh using a given deformer to share a baseline strength, instead of setting it per-material. Per-material still overrides for fine control.
Tuning skin specifically — what physically changes, and why micro-detail matters most — is covered on the MetaHumans page.
Procedural noise (the M_Wrinkler approach) is great for organic things, but for
clothing the better pipeline is what MetaHumans do for their own wrinkles:
pre-bake wrinkle normal maps, then use TensionFX to activate/blend them in by
vertex value — rather than generating wrinkles procedurally. You get art-directed
folds instead of noise.
You're not limited to the examples. Common targets:
- Detail / wrinkle normal blend (lerp base ↔ wrinkle normals)
- Roughness & specular shift
- Albedo blush / desaturation
- Micro-detail intensity
- Anything else — it's just a
0–1scalar per channel
See it in context: Use it on your own mesh · MetaHumans · How It Works