What is Garment Support and how does it work?
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.
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 the section for #painting-garment-support-in-blender
If you have other problems, see #troubleshooting-garment-support at the end of the page.
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.
This process is accomplished via 'parameters' on the mesh:
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!
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:
TL;DR: High garment score means "on top", items below will get squished.
Components with the same prefix in the same .ent file will not squish each other, e.g. l1_stockings
and l1_pants will not deform each other, but they will deform s1_socks
The game calculates the garment score by checking the prefix of component names, where the one with the lowest prefix is the innermost:
After considering the component name, the game will consider the tags in the .ent's visualTagSchema
:
An example for t0_000_pma_base__full
(the default body component, torso+legs):
based on experimental research by revenantFun
Make sure that you have the parameters _GarmentSupportWeight
, _GarmentSupportCap
and Col
, and that all of them are in the format Face Corner > Byte Color
_GarmentSupportWeight
: Vertex paint it red (RGB 1, 0, 0)
_GarmentSupportCap
: Vertex paint it black (RGB 0, 0, 0) if it isn't
Col
: Vertex paint it black (RGB 0, 0, 0) if it isn't
You're done!
In a given mesh, garment support is handled by two color attributes: _GarmentSupportWeight and
_GarmentSupportCap
. In Blender, these are found in the Data
panel under Color Attributes
, together with the third attribute, Col
.
For exporting, all three of these must be in the format Face Corner > Byte Color
Here's how it looks like:
If you are editing vanilla items, you may find parameters of the type Vertex -> Byte Color
with their names in ALL CAPS, such as _GARMENTSUPPORTWEIGHT
and _GARMENTSUPPORTCAP
. Delete them by selecting them and clicking the minus icon:
It's crucial to repeat this process for every submesh in your garment, or your attributes will not get written correctly on export.
If all you're doing is trying to preserve existing garment support before doing some light editing or refits on vanilla garments, you can stop right here!
If you're making a brand new item and making your garment support from scratch, however, you'll need to keep reading to find out how these parameters should look.
Garment support color attributes are edited in Vertex Paint
mode in the viewport:
_GarmentSupportWeight
This attribute affects how the mesh behaves when layered with other garments:
Simple base game clothing will have a flat red layer. If you have a flat black layer, you may want to paint it red, as this will deform more than you might want.
_GarmentSupportCap
_GarmentSupportCap
determines stopping points for the deformation effects of garment support. Like _GarmentSupportWeight
, it is painted only with red and black.
With vanilla items, you will see red GarmentSupportCap on areas that will either
directly intersect with the body (the ends of sleeves and legs, the bottom of a shirt, the opening of a turtleneck...)
sit right above something that shouldn't be deformed (the player body, or a tight-fitting shirt, or the lapels of an open jacket)
The cap provides a shrinking limit, so without GarmentSupportCap, every part of your mesh will apply shrinking/tucking on the meshes layered "below".
Often, this is completely okay and your _GarmentSupportCap
layer can be flat black. Otherwise, you need to paint red those parts which either cut straight through the body or butt right up against other items.
If this step is skipped, you can have unexpected clipping, but nothing will break. If your mesh seems like it's being too aggressive when you layer it over other things, and leaving holes in whatever you're trying to layer under it, try painting more of the inside faces red.
The simplest way to add functioning garment support to your custom item is to have a flat red _GarmentSupportWeight
attribute, a flat black _GarmentSupportCap
attribute, and a flat black Col
attribute. Your mesh will export and, assuming you have the proper shapekeys, will morph in (more or less) the way you'd expect! The next page will outline this process step-by-step.
Every submesh of your garment must have these three attributes in order for garment support to function correctly - even submeshes that contain non-deformable things like accessories, buckles, chains, belts, etc.
Check #painting-garment-support-in-blender — paint it red, baby!
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:
If that doesn't work, you still have the option to re-create Garment support from scratch in Blender
If you're fed up with this shit and just want your item to stop cosplaying as exploding pixel cloud, you can use #option-2-guaranteed-to-work-delete-garmentsupport-from-the-mesh.
This wil prevent your garment from shrinking under other, "larger" garments, and practically guarantee that it clips.
Adding garment support to a mesh that doesn't have it
Created on: 29. 12. 2023 by Last documented update: Nov 10 by and
This guide will teach you how to add garment support to a mesh that doesn't have any.
To learn what garment support is, check
For general Blender editing tips, check
You should know what , because it won't be explained here.
This guide assumes that you know your way around in WolvenKit. If you don't and you want to mess with this, kudos — I salute your frustration tolerance. In this case, the wiki's search function will be your new best friend.
As a preparation for our garment support, we need a base that we'll shrinkwrap to. For this guide, we'll be using the full player body in a single mesh.
You need the following files:
In the viewport, click anywhere to deselect everything
Press A
to select everything visible again
Shift-click on something (e.g. the head) to deselect it
Shift-click again to re-select it (you need a most recent selection)
Press Ctrl+J
to join all those meshes together
Optional: Clean up
In the outliner on the right, delete all empty collections
Double-click on your mesh and rename it to something, e.g. body
You should be looking at something like this:
This is the base that your items will shrink to, thus not-clipping. Neat, isn't it?
You only need this if you're layering garment support — for example, shrinking a custom-made decal under a jacket. Don't do this with the base body, it will shrink on its own to stay underneath the clothes!
If you're using a custom mesh as the base, you need two prerequisites:
Join everything, so that you have only one mesh. This mesh must cover everything that yours can potentially shrink to - if you fit the Netrunnner suit without the head mesh as part of the body, the collar will clip into the neck when you're wearing a coat
You need to activate garment support on the mesh. You do this by switching to the Data tab and setting its Value
to 1:
Import a mesh that needs garment support. In Object mode, select it by clicking on it so that it has a yellow outline like the body in the picture above, and switch to the Data
tab on the right:
The Shape Keys
dropdown should be empty. (Otherwise, hit the -
button until it is).
Click on the +
button to create a shape key with the name Basis
. This is the garment's original shape and will tell Cyberpunk how it looks when it's not squished.
Repeat this process for every submesh (submesh_01_LOD_1
and submesh_02_LOD_1
on the screenshot above)
Switch to the Modifiers
tab (the blue wrench icon, it's active in the first screenshot)
Add a shrinkwrap
modifier
Target it to the mesh from the previous step (e.g. body
):
optional: Add a small offset
(e.g. 0.001
) to make it not-clip. If the mesh you're shrinking to has garment support and you haven't enabled it, this isn't necessary.
You will now see that the garment has shrunk down to the body's dimensions — this is how the game avoids clipping.
Apply the modifier as shapekey:
You will now see that the garment un-shrinks itself: that is because the shapekey isn't active.
Switch to the Data
tab again (the green triangle). There is a new shapekey now; it's called Shrinkwrap
.
If you want to see it in action, set its Value
to 1.
Rename it to GarmentSupport
(capital G and S, no spaces — double-click on the name):
That's it, your mesh has now garment support. Rinse and repeat the process with the other submeshes, then export everything back.
Try re-doing the shrinkwrap, but with a higher offset instead. Try something like 0.002 or so, whatever works for you.
Colour | RGB value | Explanation |
---|---|---|
Colour | RGB value | Explanation |
---|---|---|
Make sure that your mesh has the property checked (this should be default by now).
all those meshes to Blender, then join them all into a single mesh:
You still need to use for garmentSupport to become active. If that wasn't it, check your shapekey names for typos or trailing spaces.
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)
Black
0, 0, 0
heavy deform, lots of squishing (default behaviour)
Red
1, 0, 0
light deform, no squishing
Black
0, 0, 0
no garment cap
Red
1, 0, 0
limited GS influence on the meshes below (more red = less squishing). The garment itself will serve as a delimiter.
>= 8.15 | You can't make mods without Wolvenkit |
>= 4.2 | 3d editing software |
The Wolvenkit Blender Addon. You can't import/export to Blender without it. |
Wolvenkit |
>= 1.6.0 (download tags )