Garment Support: How does it work?

What is Garment Support and how does it work?

Summary

This page will teach you how garmentSupport works – the system that Cyberpunk2077 uses to tuck pants into boots and shirts under jackets. It contains theory, which you don't need to understand to use the system.

Credit goes to psiberx (discord post with initial explanation of the algorithm), island dancer for providing screenshots and know-how, and Auska for making morphtarget/garmentSupport import able in Wolvenkit.

Wait, that's not what I want!

If you want to create garment support, check Garment support from scratch

If you want to use garment support in an existing mod, you only need to use Component prefixes

If your garment support is shrinking too far, check Painting garment support parameters

If you have other problems, see Troubleshooting Garment Support at the end of the page.

What is garment support?

The engine morphs garments to avoid clipping — for example, if you equip a pair of boots and V's jeans no longer cover the shoes, but get tucked under.

Garment Support in action

This process is accomplished via 'parameters' on the mesh:

These will show up as shape keys in your Blender export

Why doesn't it work on my NPC?

GarmentSupport only works on actual garment items that have been equipped using the game's transaction system. As of October 2024, that's not the case for NPCs. You'll have to go refitting!

Component prefixes

Garment support will be applied based on garmentScore. For this, the prefix of the component name will be considered (components are named in your .app or .ent file's component array).

A high garment score means that the item is "on top", squishing anything worn "below". (See The algorithm for details.)

The prefixes are as follows:

h0_

t0_

s0_

l0_ ...

Any component with a 0 in its prefix will be treated like a body mesh (no deform/squishing of any meshes with x0_ prefixes across .ent files)

h1_

Head inner (mask, sunglasses)

h2_

Head outer (helmet, bandana)

t1_

Torso inner (shirts)

t2_

Torso outer (jackets, coats...)

s1_

Shoes

l1_

legs (pants that aren't leggins)

How it looks if it's broken

Often, you can salvage things by deleting the parameters in WolvenKit

The algorithm

TL;DR: High garment score means "on top", items below will get squished.

The game calculates the garment score by checking the prefix of component names, where the one with the lowest prefix is the innermost:

s0 = 0    // no prefix will also be 0
l0 = 10
a0 = 20
t0 = 30
h0 = 40
s1 = 50
l1 = 60
t1 = 70
i1 = 80
hh = 90
h1 = 100
h2 = 110
t2 = 120

After considering the component name, the game will consider the tags in the .ent's visualTagSchema:

PlayerBodyPart = -2000
Tight = -1000
Normal = 0
Large = +1000
XLarge = +2000

An example for t0_000_pma_base__full (the default body component, torso+legs):

+30          prefix: t0_
-2000        visualTag: PlayerBodyPart

—————————————————————————
-1970

Troubleshooting Garment Support

My garment support is shrinking too far! or clipping!

Check Painting garment support parameterspaint it red, baby!

My garment support explodes on contact with another item!

It's not doing that to spite you. Most likely, you have a non-unique component ID, and the game can't tell the two items apart. Here's how to resolve that:

The CRUID editor is available in Wolvenkit 8.14+ - you can go grab the Nightly, too

Importing with Garment Support

Make sure that your mesh has the #import-garment-support property checked (this should be default by now).

If that doesn't work, you still have the option to re-create Garment support from scratch in Blender

Yeeting Garment Support

If you're fed up with this shit and just want your item to stop cosplaying as an exploding pixel cloud, you can use Option 2 (guaranteed to work): delete GarmentSupport from the mesh.

Last updated

Was this helpful?