Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
What kinds of textures exist, and what do they do?
This page aims to give an overview on different kinds of textures and what the game is using them for.
If you just want to make textures and don't care for the theory, you can find the guides under Modding Guides -> Textures and LUTs
By default, all textures in Cyberpunk2077 are Y-flipped (upside down). WolvenKit will take care of that for you during import/export via the VFlip
property.
If you just want to know how to import/export textures, see here.
This texture is directly projected onto a mesh to give it colour and appearance. Used by shaders like metal_base.remt
.
In the game files, these files will be named <name>_d.xbm
(e.g. base\environment\decoration\food\packaged_food\textures\synthetic_snack_01_d.xbm
)
When importing a diffuse texture with a non-default file name, make sure to check the isGamma box in the import properties.
Also known as "bump map", this texture is used to give a mesh depth and surface details. Used by shaders like metal_base.remt
.
In the game files, these files will be named <name>_n.xbm
(e.g. base\environment\decoration\food\packaged_food\textures\synthetic_snack_01_n.xbm
)
For a guide how to make your own normal maps, see here.
Also known as "gloss map", this texture defines how light scatters across the surface of your 3d model. Used by shaders like metal_base.remt
.
For an overview image, see Roughness/Metalness overview.
In the game files, these files will be named <name>_r.xbm
(e.g. base\environment\decoration\food\packaged_food\textures\synthetic_snack_01_r.xbm
)
Also known as "metallic map", this texture defines which parts of the material behave like metal and which parts don't. Used by shaders like metal_base.remt
.
For an overview image, see Roughness/Metalness overview.
In the game files, these files will be named <name>_m.xbm
(e.g. base\envment\decoration\food\packaged_food\textures\synthetic_snack_01_m.xbm
)
Used for in-game items and UI elements, these textures contain a collection of images. They are made available to the game via inkatlas files.
In the game files, these files will be named atlas_<name>.xbm
(e.g. base\gameplay\gui\fullscreen\hacking_minigame\atlas_minigame_programs.xbm
)
How materials work, and how you can configure them
Last documented update: Apr 20 2024 by
This page gives an explanation and overview about material properties. For more detailed explanation of a specific kind of material, please check the nested pages in the wiki's file tree, or check the "next" link at the bottom of the page.
If you want to see a list of materials grouped by class, check Cheat sheet: Materials
If you want to learn how material assignments work on the object, check 3d objects: .mesh files
If you want to understand reusable material templates, please check Re-using materials: .mi
The Modding Guides section has multiple guides on editing materials, e.g. Changing materials, colors and textures or AMM: Textured items and Cyberpunk Materials using Custom Props
The properties of a material (or a shader) are defined in its shader file. Those files have the extension .mt
or .remt
and are widely used and extended.
You should never replace a .mt
or .remt
— this will affect every single thing using the material.
If you want to change specific surfaces, look out for the right .mi
file and change that, or create one and start custompathing.
You can find a wiki page with an overview of shaders under Shader Docs, but it needs expanding. Maybe you'd like to contribute?
You can see a material's default properties by opening the .(re)mt
file in WolvenKit and inspecting the parameters array.
To find a shader template, use the (you can copy the query):
yourMaterialType > .remt|.mt
Any properties that you don't overwrite by adding them to your CMaterialInstance or .mi file will take the default properties specified in the file.
Here, you can also see what value a shader template will use if you don't give it any properties.
The interesting bit is on the right side of the arrow in the picture above, since it specifies the type of parameter:
Whether or not a material can be transparent depends on the shader. Transparency can be switched on/off via the EnableMask
property, or clamped via AlphaThreshold
(see #shared-properties).
Whether or not a material emits light depends on the shader, e.g. metal_base.remt
supports this via the Emissive
texture property.
For a documentation of this, see Emissive Material Properties.
This section will list properties that are common to many materials and give a short explanation of what they do.
Not all materials use all of these properties.
The same parameters can be named differently across different shaders (e.g the base texture can be called BaseColor
, Diffuse
, or Albedo
).
Properties with texture paths can end in Texture, e.g. BaseColorTexture
instead of BaseColor
.
As this is a horrible mess, it is easiest to look up the properties in the shader if you're not certain.
Created: Jan 14 2024 by Last documented update: Jan 14 2024 by
This page documents glass shaders and their properties.
For an overview of glass shaders, see Cheat sheet: Materials-> #glass
For an explanation of material properties and further links, see Material properties
To turn on material transparency, the EnableMask
property must be set to True
!
Cyberpunk's glass material, such as base\materials\glass_onesided.mt
All glass materials can consider the vertex color attribute, which you can edit directly in Blender.
Find a ready-to-use bottle glass .mi here.
For a glass material without view distortion and warping, use base\vehicles\common\materials\glass_windshield_tinted_black.mi
Find a ready-to use glass .mi file here
base\environment\decoration\electronics\devices\device_neokitsch\textures\device_neokitsch_glass_black.mi
base\fx\shaders\parallaxscreen.mt
Find a ready-to-use example of a turned-off screen here.
There are a number of ways you can colorize your glass. GlassTint is the texture used to determine glass color. TintColor is procedural color. TintFromVertexPaint value determines how much vertex color affects the glass color. GlassTint seemingly has the highest priority, as in it will override other color parameters. Below is a test result from the process of making a glass wing.
Download the .mi file here
You can see the material in action on mana's Barong Tagalog mod, or download the .mi file from the resource repository
RED4 shaders (mt)
Every visual asset in REDengine uses a specific shader, designated by REDengine as MT (.mt) files. Even meshes "without a shader" are in-fact using a debug shader such as debug_coloring.mt. Shaders are the most basic expression of a surface, ranging from glass, skin, concrete, and steel. Each shader contains a combination of constant hidden-variables, and exposed variables for artists to tweak. For example, all skin exhibits some similar properties such as subsurface scattering so there is no reason to expose this; artists cannot use the skin shader without subsurface scattering. However skin color can vary dramatically, so these parameters are exposed to the artists using textures or color parameters. Artists are able to create "instances" of shaders called Material Instances, which contain localized variations of the textures and properties exposed by the base shader.
For an overview of the most common shaders and their use cases, see Cheat sheet: Materials
Materials are a specific instance of a shader, to be used on a mesh or subset of meshes. Materials are contained inside mi (material instance) files or within mesh files themselves as a CMaterialInstance chunk. While internal material instance chunks can be handy to have inside the mesh, external mi files can be used for multiple meshes. It's important to remember that materials are simply instances of shaders. The variables contained within the material only take effect when those same variables are present inside the base shader. For example, if RoughnessTexture is not present within the base shader adding this property to a material instance will have absolutely no effect.
Meshes rarely use shaders directly, but instead rely on any number of .mi files (check the player's skin materials for an example, or check Re-using materials: .mi ->#why-do-i-need-this).
If the baseMaterial path ends in .mi, you're looking at a daisy chain.
This approach lets you bundle shared properties. If you have 30 materials with 4 properties and 3 of them never change, then it's the perfect time for a .mi file.
Daisy-chaining those together lets you define and refine templates. For example, every human has skin, and all skin has veins and blood vessels — but the player, your average Maelstrom gangoon and bog-standard vanilla NPCs are not using the same textures. And that is before skin colours come in.
Think of them as photoshop layers, applied in reverse order: the first one that's loaded is the shader itself with its default properties, then each .mi in the chain gets applied on top of that.
Properties in the mesh will be applied last, and will thus overwrite anything from the chain.
The closer to the mesh, the more override!
Properties of emissive (glowing) materials: Let There Be Light
Created: Jan 14 2024 by Last documented update: Jan 14 2024 by
This page documents glass shaders and their properties.
For an overview of emissive shaders, see ->
For an explanation of material properties and further links, see
You can make engine\materials\metal_base.remt
glow by adding the correct parameters, or you can poke through the game files and search for emissive > .mi
to find Cyberpunk material templates to learn from.
For a list of such templates, check
Find a ready-to-use glowing .mi file .
You can find the shader under base/fx/shaders/device_diode.mt
The properties need to be documented at some point
Animated materials and their properties
For a list of effect materials, check ->
This shader glimmers
base\fx\_shaders\metal_base_glitter.mt
base\fx\_shaders\holo_mask.mt
base\fx\_shaders\hologram.mt
base\fx_shaders\oda_helm.mt
You can find a mesh-as-effect as component inside base\characters\cyberware\player\a0_003__mantisblade\appearances\a0_003_wa__mantisblades_edge.app
Created: Jan 14 2024 by Last documented update: Jan 14 2024 by
This page documents liquid shaders and their properties.
For an explanation of material properties and further links, see
Cyberpunk has its own liquid shader(s) such as base\materials\fillable_fluid_vertex.mt
. Projecting this material onto a submesh will turn the submesh into a transparent container filled with the liquid you specified. If you flip the container on its head, the fluid will drain to the bottom and fill it up again.
To control the offsets, you need to adjust the vectors FluidBoundingBoxMax and FluidBoundingBoxMin.
It shares various properties (such as IOR, FresnelBias, BlurRadius) with the .
Find a ready-to use (black) liquid .mi file .
Properties of textured (PBR) materials
Created: Jan 14 2024 by Last documented update: Feb 20 2024 by
This page documents textured (PBR) shaders and their properties.
For an overview of PBR shaders, see ->
For an explanation of material properties and further links, see
The most commonly used material for anything textured is engine\materials\metal_base.remt
. Despite its name, this material isn't necessarily metallic.
To use this material as emissive (light), check
You can change the colour of a texture on-the-fly by using the BaseColor
property (color picker blend file )
The material can be transparent by setting enableMask
to True
(and make sure its not overriden in the ). When set, the material will use the alpha
channel of the BaseColor.
To make your mesh load a texture, use the following CKeyValuePair
s in your material's "values" array:
The .xbm is a container around the texture. Export the xbm to png via WolvenKit.
If your texture has any brightness issues in-game, toggle around the isGamma flag during import.
The expected isGamma
settings are:
normals: false diffuse/albedo: true anything that is used in .inkatlas files: true
The most commonly used material for anything textured is engine\materials\metal_base.remt
. Despite its name, this material isn't necessarily metallic.
To turn the material into plastic, use the following CKeyValuePair
s in your material's "values" array:
Type: CMaterialParameter… | CKeyValue | explanation |
---|---|---|
Property name(s) | Explanation |
---|---|
Parameter name | Value |
---|---|
Property | Value | |
---|---|---|
Holo material ()
You can find a ready-to-download template .
Vector
Vector4
A vector with X, Y, Z, W (coordinates and space). This is also used for colour values (Wolvenkit usually supports those).
Texture
RRef:Texture
A texture (.xbm) via DepotPath
Color
Color
A color (RGB/color picker)
MultilayerMask
RRef:MultilayerMask
a multilayerMask (.mlmask
) via depotPath
MultilayerSetup
RRef:MultilayerSetup
a multilayerSetup (.mlsetup
) via depotPath
Scalar
CFloat/CDouble
a numeric value with decimals. Float has 7 decimals, Double has 15
TextureArray
???
a texarray via depotPath
StructBuffer
???
RRef:.hp
A hair profile (.hp) via depotPath
LayerTile LayerScale
Material scaling (zoom on surface) > 1 zooms in, >1 zooms out
Roughness Rough
Whether a surface is rough or smooth. White: full, Black: none
Metalness Metallic
Whether a surface is metallic or not. White: full, Black: none
Normal GlobalNormal
A material's bump map. Yellow normal maps are called swizzled.
BaseColor Diffuse Albedo
A material's base colour value. This is usually a colour, but it can also be a vector4. Wolvenkit usually supports this, but if you don't see a colour picker, please write a ticket (and use the color picker .blend)
AlphaThreshold
Clamps transparency. (TODO: how exactly?)
EnableMask
Should the material enable masking? (will use the diffuse texture's alpha channel)
Mask
A mask (transparency) texture (like a layer mask in Photoshop)
Opacity/OpacityBackFace
float, 0.0 - 5.0
: Controls glass transparency. OpacityBackFace will only affect inside-facing normals.
FrontFacesReflectionPower / BackFacesReflectionPower
float, 0.0-10.0
: How strongly should the glass reflect?
TintColor/TintSurface
Surface and refraction color as RGB (copy from e.g. mi_neokitsch_fridge_z_emissive.mi
).
ParalaxTexture
Texture that your screen should display, e.g. base\materials\placeholder\black.xbm
LayersSeparation
1
ScanlinesIntensity
0
ScanlinesDensity
0
Emissive
0
Roughness
0.200000003
Metalness
0
baseMaterial
base\materials\glass_onesided.mt
TintColor
white (220, 220, 220, 0)
IOR
0.100000001
NormalStrength
5.74905014
Roughness
base\materials\placeholder\black.xbm
GlassRoughnessBias
0
BlurRadius
1
baseMaterial
base\materials\glass_onesided.mt
enableMask
true
TintColor
RGB
colours the material
IOR
0.300000012
Index of refraction
Opacity
1
the material's transparency will be determined by the mask texture
NormalStrength
2.74905014
MaskTexture
texture (black/white)
black parts of the mask will not be affected by this material
Roughness
texture (black/white)
use base\materials\placeholder\white.xbm
for maximum roughness
Normal
texture (normal map)
path\to\your\normal_n01.xbm
GlassRoughnessBias
0
???
MaskOpacity
0.629999995
0 - 1, controls glass opacity
BlurRadius
0
will blur the things behind the glass
LayerTile | Material scaling (zoom on surface) > 1 zooms in, >1 zooms out |
Opacity
float, 0.0 - 1.0
: Controls glass transparency.
GlassTint
A texture to tint your glass. (TBD: Does it work as a mask?)
TintColor
Glass tint as RGB (copy from e.g. mi_neokitsch_fridge_z_emissive.mi
).
IOR
Index of refraction as float, 1.0-2.0:
The refraction properties of your material. (Water > glass > air)
Refraction Depth
float 0.0-10.0:
Control refraction depth here. You can turn your ray into a curve that way!
FresnelBias
float, 0.0 - 2.0
: How much does the glass behave like a lens (that is, warp the picture behind it)?
BlurRadius
float, 0.0 - 1.0
: Blur amount when looking through the glass
VertexColorTint
float, 0.0 - 1.0
: Transparency of vertex colour tint
Emissive | path to emissive texture, e.g. |
EmissiveEV | float, e.g. |
EmissiveColor | Glow colour as RGB (copy from e.g. |
TintColor | liquid's color as RGB (copy from e.g. |
FillAmount | float, e.g. |
FluidBoundingBoxMin FluidBoundingBoxMax | Vectors (X, Y, Z, W) controlling the maximum distance from the container's walls. Each value is a float (decimal) speficying the axis in question - you'll simply have to play around with them (you can ignore W). For a bottle material I've used Max: 0.03, 0.03, 0.155 Min: -0.03, -0.03, 0.09 |
BaseColor |
|
Normal | optional: path to your normal map |
Roughness | optional: path to your roughness map |
RoughnessBias | 0.200000003 |
BaseColorScale |
Overview and introduction
This is the landing page for materials in Cyberpunk 2077. It contains a definition and a rough overview.
Check the section's sub pages in the wiki's navigation tree for more detailed information about the different kinds of materials. Additional material-related information can be found here:
Handy list of references: Cheat sheet: Materials
Re-using materials as templates: Re-using materials: .mi
General information: Multilayered: Cyberpunk's supershader
Properties and definition: Multilayered Material: Properties
Preview images: Multilayered: Previews
In its original state, a https://github.com/CDPR-Modding-Documentation/Cyberpunk-Modding-Docs/blob/main/for-mod-creators/files-and-what-they-do/3d-objects-.mesh-files is a collection of vertices (pixels). The space between those vertices is filled by faces, which form the 3d object's surface.
The shader is the thing that goes on top of the surface, rendering a material such as glass, skin, concrete, steel…
Without a shader, objects would be invisible in the game, the surface simply being transparent. In Cyberpunk, a default shader will be assigned in such cases (such as debug_coloring.mt).
In Cyberpunk 2077, REDEngine shaders are implemented as .mt
/.remt
files.
If you have ever messed with an item's materials, then you already have.
To use a shader, you create a Material Instance, where you can configure the parameters. Not every parameter of a shader can be configured: since skin always has subsurface scattering, it makes no sense to tweak this. But since skin color already varies dramatically if you don't throw exotic chrome into the mix, you can change them easily via tint.
For details how materials are used on a mesh, see the https://github.com/CDPR-Modding-Documentation/Cyberpunk-Modding-Docs/blob/main/for-mod-creators/files-and-what-they-do/3d-objects-.mesh-files, or learn how materials can be defined in a mesh via https://github.com/CDPR-Modding-Documentation/Cyberpunk-Modding-Docs/blob/main/for-mod-creators/files-and-what-they-do/3d-objects-.mesh-files#materialinstance-the-local-material or loaded externally from
In the context of Cyberpunk, a material is the thing that lets the shader define the surface properties of a https://github.com/CDPR-Modding-Documentation/Cyberpunk-Modding-Docs/blob/main/for-mod-creators/files-and-what-they-do/3d-objects-.mesh-files. Typically, you create a local instance, which will then pull in a shader via baseMaterial
.
The property baseMaterial
can point at a .mt
/ .remt
file directly, or to an intermediary .mi
file:
Each part of a mesh (submesh) can have a different material assigned.
Do you want to know more? ( =>https://github.com/CDPR-Modding-Documentation/Cyberpunk-Modding-Docs/blob/main/for-mod-creators/files-and-what-they-do/3d-objects-.mesh-files#chunkmaterials)
For a hands-on guide and something to play around/experiment with, check AMM: Textured items and Cyberpunk Materials using Custom Props.
If you have modded other games, you're used to PBR materials with a bunch of textures like diffuse, normal, metalness etc.
See Cheat sheet: Materials -> #pbr-material for a list.
To change a textured material, see Changing materials, colors and textures -> #step-2-finding-the-correct-appearance
Did you know? You can make Cyberpunk's default textured material glow.
This is specific to Cyberpunk, and it is incredibly cool. If you're used to textured materials, you're probably going to hate it at first, but it has incredible versatility and re-usability.
What is a multilayered material and how does Multilayered: Cyberpunk's supershader work?
What are these properties, how do I use them?
A decal material is applied to a decal (sub)mesh, which is located on the surface of another mesh like a sticker.
Check out our guide on Adding decals for further explanation and detail.
There are various kinds of emissive materials. See Cheat sheet: Materials -> #emissive-materials for a list.
You can make materials display as wireframes of their geometry by changing the following property in their .mt.
Please do not overwrite original .mt files, as this will effect everything in the entire game. Always create your own local copy!
Documentation of properties, with screenshots if applicable
Sets a color from within the mltemplate file. Hex codes corresponds to rows and columns in substance painter.
Depot path to the base material mltemplate from which the surface inherits its properties (lightbreaking, subsurface scattering…).
Example values:
base\surfaces\materials\paint\car_paint\car_paint_metallic_01.mltemplate
base\surfaces\materials\metal\enameled_hq\enameled_hq_01_30.mltemplate
Scaling (tiling multiplier) of the material across the mesh. The higher the value, the smaller it is.
Clamps metalness input levels. This value corresponds to a (generated?) greyscale texture across the entire mesh.
Clamps metalness output levels. This value corresponds to a (generated?) greyscale texture across the entire mesh.
Applies or ignores the base mesh's normal map to this layer. This value can be greater than 1!
For logos: X-offset on the texture. Used for e.g. targeting a certain label.
For logos: Y-offset on the texture. Used for e.g. targeting a certain label.
Transparency of the layer, 0 means that it isn't displayed, 1 means that it's fully visible.
TODO
Determines the roughness of a material
You can only use microblends if this layer's mask is not fully white.
Like #mattile, this determines the scaling of the microblend. The higher the value, the smaller it is.
Depot path to the base microblend texture (xbm), a seamless pattern which will be projected on the surface. Think of an extra normal map that tiles across a layer.
A crossfade between the layer mask and the microblend mask (the black parts of the microblend texture). If you set this to >=1, then the layer will be blocked out where the microblend texture is black.
This requires the xbm's AlphaChannel (transparency) to be set up.
Like #normalstrength for the microblend.
X-offset for the microblend texture.
Y-offset for the microblend texture
This section gives you an overview of shaders and their properties. For a detailed explanation, see Material properties.
We do not have official documentation from CDPR about how shaders are used by artists. Thus any 2d/3d artist is looking at hundreds of black-box shaders with unknown usage. This is extremely demotivating for anyone looking to bring new assets to life with REDengine. The following list of tables is an attempt to make life easier for artists by using the community to document commonly used shaders.
The name and path of each shader will be documented by the header.
Next we are using a table for each texture parameter with the exact name listed by CDPR in the w2mg file, how REDengine uses each specific RGBA channel, and the usable range of the channel if not 0-1/0-255.
When applicable, vertex color properties will be listed underneath the texture table with a similar format.
Scalar, vector, color, and other properties will follow with their own unique description table.
An asterisk (*) is used to notate some degree of uncertainty, or need for more independent testing.
The skin material is a versatile PBR (textured) shader.
You can learn more about the skin shader under Material properties-> Hair and skin material properties.
While it is possible to use the skin shader for things that are not skin, you should consider using metal_base instead.
The DetailNormal texture contains generic normal details that are shared between most faces. This is not a tiling/procedural texture. The DetailNormalInfluence scalar parameter can be used to lower the intensity to simulate makeup or synthetic skin.\
The MicroDetail texture contains a microblend tiling texture used to add procedural detail to the normal map. We believe the Roughness texture blue channel is used to mask parts of the face from exhibiting this detail, such as the lips, eyelids, and ears.
mesh_decal
DiffuseColor multiplies against the texture color to add procedural color
There are many different other glass shaders. This is the most basic one, used for small objects:
To see different glass materials and their configurations, check Material properties -> Transparent material properties.
AdTexture: TV screen will play looping animations that are actually sprites like a .gif. We believe this is for optimization purposes since videos are heavy.
TilesWidth, TilesHeight, and PixelsHeight combine will help the game define the dimension of your tile (sprite) on the sprite sheet.
You should calculate your sprite sheet dimension so it completely fits in a square sheet. For example, a simple dimension is 5x5 tiles with 300x300 pixel sprite. Such a dimension will produce animation with 25 frames of a square sprite.
More examples of such sprite sheets can be found in the path below
It's recommended that you use free tools like Ezgif.com to make .gif and convert it into a sprite sheet for AdTexture
There are many screen shaders, this one is used for small TV screens.
If used cleverly with a properly done mesh, you can make use of this shader to put animation on your clothing or other items
BaseColor | path to your texture.xbm (Diffuse/Albedo) |
BaseColorScale | an RGB color value |
Roughness | path to your roughnessMap.xbm (if you have one) |
Metalness | path to your metalnessMap.xbm (if you have one) |
Normal |
BaseColor | path to your texture.xbm (Diffuse/Albedo) |
Roughness | path to your roughnessMap.xbm (if you have one) |
Metalness | path to your metalnessMap.xbm (if you have one) |
Normal |
Hair and skin shader
Published: Apr 05 2024 by manavortex Last documented edit: Apr 05 2024 by manavortex
This page gives an explanation of properties for the hair and skin shaders.
You can look up different hairstyles and -colours under Cheat Sheet: Hair
You can look up information about skin under Cheat Sheet: Body and Cheat Sheet: Head
Or you can learn more about Creating Custom Skins - Tattoos - Scars Textures
Or you can learn how to make a custom hair profile with the Wolvenkit Blender IO Suite
Properties of the multilayered material
Created: Jan 14 2024 by manavortex Last documented update: Jan 14 2024 by manavortex
This page documents multilayered shader properties.
For an overview of glass shaders, see Cheat sheet: Materials-> #multilayered
For an explanation of material properties and further links, see Material properties
If a layer with a greyscale mask is invisible, set MicroblendContrast in the .mlsetup
to 1!
For a full documentation, check the corresponding page.
To set it up, use these keys for the "values" array of your material:
Materials for colouring splines (e.g. monowire)
Created: Oct 19 2024 by manavortex Last documented update: Oct 19 2024 by manavortex
Based on research by Aanderz and wizard bakery
This page documents monowire materials and their properties.
The monowire's wire is a spline
, not a regular mesh. It will appear invisible in 3d preview and behave in interesting ways if you put any different shader on it than the intended one. Please fuck around, find out, and then document your results!
base\fx_shaders\nanowire_string_spline_deformed.mt
Collect preview pictures for multilayered materials here
@jato on the has created 3D rendered previews as .jpeg
files of all the .mlsetups
in the game. Original post can be found . The following list has been generated from these previews. A .zip
is also on this Wiki.
More accurate previews rendered in-game (check ) can be created with the .
aluminium_annodised | aluminium_bare_01_300 | aluminium_brushed_01_300 |
---|
aluminium_old_01_300 | aluminium_polished_01_300 | aluminium_rolled_annodised |
---|
aluminium_rolled_bare_01_300 | aluminium_rolled_rough_01_300 | aluminium_rough_01_300 |
---|
asphalt_old_01_300 | asphalt_old_fractured_01_300 | asphalt_old_patches_01_300 |
---|
asphalt_paint_01_300 | asphalt_road_01_300 | asphalt_road_damaged_01_300 |
---|
asphalt_road_new_01_300 | asphalt_road_old_01_300 | asphalt_tires_01_300 |
---|
blood_smooth_1_30 | brass_bare_01_300 | brass_brushed_01_300 |
---|
brass_old_01_300 | brass_polished_01_300 | brass_rolled_bare_01_300 |
---|
brass_rolled_rough_01_300 | brass_rough_01_300 | bricks_old_damaged_01_200 |
---|
bricks_old_painted_01_200 | bricks_old_rough_01_200 | bronze_bare_01_300 |
---|
bronze_old_01_300 | bronze_polished_01_300 | bronze_roof_tile_bare_01_300 |
---|
bronze_rough_01_300 | canvas_clean_01_30 | car_paint_metallic_01 |
---|
carbon_fiber_01_30 | carpet_office_felt_clean_01_300 | carpet_ribbed_clean_01_300 |
---|
carpet_thick_clean_01_300 | carpet_underlay_old_01_300 | ceramic_6x6_01_300 |
---|
ceramic_6x6_damaged_01_300 | ceramic_6x12_01_300 | ceramic_6x12_damaged_01_300 |
---|
ceramic_16x16_01_300 | ceramic_16x16_01_metal_300 | ceramic_16x16_dirty_01_300 |
---|
ToDo: These need to be grouped (one picture per type), and then they need to be linked with nice headers. But I'd rather put them on here before they rot away on my disk for a few more months
What is UV mapping and how does it work?
Published: Jan 21 2024 by Last documented update: Jan 21 2024 by
This page contains the theory of how to connect meshes (3d objects) with textures (which are 2d after all)
For a hands-on guide to UV mapping, check ->
For import/export help, check
This is the technical term for the process of mapping a flat texture on your three-dimensional object. The most hands-on example for this is Christmas chocolate:
Regardless of that, you can not eat it.
To look at an object's UV mapping, you'll have to fire up Blender (or a 3d editing software of your choice).
An object's UV maps are visible in the Data tab:
To look at an object's UV mapping, you'll have to fire up Blender (or a 3d editing software of your choice).
Open the UV editing perspective, select a mesh, and switch to Edit Mode. If you select vertices in the viewport
on the right, you can see their UV islands in the UV editor
on the left:
If you work with UV mappings, you should definitely check out MioUV. It automates a bunch of things that used to take the better part of an afternoon:
Published: Jan 20 2024 by Last documented update: Mar 26 2024 by
This page will teach you how to get Cyberpunk materials into Blender (and how to bake them into textures).
If this is your first time in Blender, check out
Most Cyberpunk shaders are procedurally generated from and . As such, there aren't any textures that you can import.
So how is everyone doing it?
This is where the comes in:
On , Wolvenkit creates a .material.json
file containing the .mesh
file's in a machine-readable form.
When into Blender, the plugin reads this file and automatically generates a list of materials. After selecting a mesh, you can see all available options in the Materials tab:
To change the assigned material, complete the following steps:
Select a mesh in Object mode
Switch to Edit Mode (hotkey: Tab
)
Select all vertices (hotkey: A
)
In the list on the material tab, select the appearance that you want to display
Under the list, click "Apply"
Be sure to select "Material Preview" as the Viewport Shading Method (see the screenshot below)
Troubleshooting guide for materials.
If you have , then something in the mesh got borked. Easiest way to fix:
Export your mesh
Re-name it to act as a backup
Replace it with something where transparency definitely works
Import over that mesh
Copy-paste the material setup from the original mesh
That happens when one of the depotPath
s can't be resolved. Double-check your values
— can help you with this.
It's possible that you have a texture ref inside an object that expects mlsetups or mlmasks, or vice versa. File validation can't test for this, so you'll have to do it by hand.
Make sure to have the correct kind of cKeyValuePair for your kind of material.
Test if it is the material, or if your mistake is somewhere else. Replace your material's basePath
with something that you'll definitely recognize, such as base\environment\decoration\containers\cases\coffin\textures\m_z_gold.mi
.
If the gold material shows up and your custom material doesn't, then you have an issue with the material.
The selection of materials and the available colours for each material in Cyberpunk 2077 is very limited and often underwhelming. The colours the game offers by default lack saturation and are usually either too light or too dark. The way of getting around this is layering different materials of different colours at varying opacity.
The Tools
- setup instructions
- setup instructions , from here on out referred to as MLSB
- setup instructions
(or another image editor of your choice if you need to edit an .mlmask
)
(if you want to create an .mlmask
from scratch)
For this to work properly, you need two layers inside the .mlmask
, each of which needs to cover the same part of your .mesh
you want to change. The lower layer needs to be pure white, the other one on top of that at 50% grey (rgb(50%,50%,50%)
). This way, the materials of each layer will blend into each other allowing much greater control over shade, brightness, saturation, and shininess.
If your blue denim lacks saturation, slap a second layer on top of it. Give that second layer the same material and colour and both will amplify each other.
The default .mlmask
found inside your .mesh
might already contain the layers described above. If not, you'll likely get away with editing the layers in Photoshop. To learn more about .mlmask
files go and to learn how to create one yourself using Blender, go .
For a specific example, we'll try to get yellow to look nice as I find yellow to be one of the more finicky colours to get to look "correct" within Cyberpunks shader. Here, I'm using velvet_clean_01_30
with rgb(77%,22%,8%)
as the base and latex_neon_01_30
with rgb(100%,100%,0%)
on top of it. By itself,velvet_clean_01_30
lacks saturation and its selection of yellows is very limited. latex_neon_01_30
on the other hand includes a pretty decent shade of yellow, but also lacks saturation—even though the name implies the opposite. I find that Cyberpunks shader often renders yellows to be more green than I'd expect them to be. Which is why I'm using an orange base layer.
This method of layering materials unfortunately drastically reduces the effect of the normals
of each material. normals
become "filled in" the more of them you stack. A workaround is to mis-appropriate a materials normals
as a microblend
for another material.
Copy the path of the .mltemplate
of a material whose texture you want to use from MLSB.
Paste the path into WolvenKits Asset Browser and hit Enter
to search.
Right click on the .mltemplate
and select "Open without adding to project".
Copy the DepotPath
of the normalTexture
and paste it into the µblends
field in MLSB.
In the µblends Parameters box, you can mess around with its size (Tiles
, higher number means smaller texture—it gets tiled more often across the same surface area), opacity (contrast
) and intensity (normals
, can be higher than 1
).
normals
of µblends
can also be inverted by setting their intensity to a negative number. this will, for example, turn a relief from pointing outwards to pointing inwards. This is sometimes necessary when using the normals
from an mltemplate
as a µblend
, but creative choice takes precendence, of course.
Cyberpunk allows layers in your mlsetup
to exceed Opacity 1.0
. What this does is amplify your current layer. This is very useful for camouflage materials such as denim_camo_01_30
. This material looks faint and lacks saturation by default. This can be mitigated by setting the Opacity
to 3.0
. For denim_camo_01_30
I'd also recommend using olive green as the base colour for your camo layer in the mlsetup
.
If you want your material to be matte, pick a value where the two numbers are roughly equal. For velvet_clean_01_30
this would be 0.502,0.498
. This might end up looking a bit flat though. An alternative with more depth would be 0.1569,0.8431
.
If you want your material to be very shiny, pick a value where the first number is low, and the second is zero.
Confusingly, the opposite might be true, as well. In the following example, 0.6667,0.3333
is shinier than 0.3333,0.6667
. It's quite illustrative of the interaction between the two numbers because they're the exact opposites.
Most of my mlsetups
bascially exclusively contain layers of velvet_clean_01_30
or a similar cloth material with different µblends
. Exceptions are latex_neon_01_30
for anything yellow as described above, and any metals. Although you can colourise those with an additional layer of velvet_clean_01_30
.
If you create your own material combinations, expect a lot of trial and error and bring a lot of patience.
Enter Photo Mode, Alt + Tab
over to MLSB, and make some changes.
Export the .json
and import the .mlsetup
in WolvenKit. Click on "Hot Reload" in the toolbar.
Switch back to the game and, while still in Photo Mode, switch to your saved outfit.
Your changes should show up on your item. Switch back to no outfit again, make more changes in MLSB, export, import, Hot Reload, rinse and repeat.
Colour as x/y/z values (color picker blend file )
Texture | Red | Green | Blue | Alpha |
---|---|---|---|---|
Vertex Colors | Description |
---|---|
Properties | Description |
---|---|
Texture | Red | Green | Blue | Alpha |
---|---|---|---|---|
Properties | Description |
---|---|
Texture | Red | Green | Blue | Alpha |
---|---|---|---|---|
Vertex Colors | Description |
---|---|
Properties | Description |
---|---|
Texture | Red | Green | Blue | Alpha |
---|---|---|---|---|
Properties | Description |
---|---|
path to your normalMap.xbm ()
path to your normalMap.xbm ()
ceramic_16x16_missing_01_300 | cinderblock_01_300 | cinderblock_painted_01_300 |
---|
circuit_board_01_30 | cliff_rock_01 | cliff_rock_02 |
---|
cliff_rock_03 | colour_checker_plastic_tech | concrete_cast_rough_01_300 |
---|
concrete_cast_rough_dyed_01_300 | concrete_new_clean_01_300 | concrete_new_clean_dyed_01_300 |
---|
concrete_new_cracked_01_300 | concrete_new_dirty_01_300 | concrete_new_painted_01_300 |
---|
concrete_new_painted_matte_01_300 | concrete_new_rough_01_300 | concrete_new_rough_dyed_01_300 |
---|
concrete_old_damage_01_300 | concrete_old_damage_rebar_01_300 | concrete_old_panels_01_300 |
---|
concrete_old_panels_cracks_01_300 | concrete_old_panels_horizontal_01_300 | concrete_old_panels_horizontal_cracks_01_300 |
---|
concrete_old_panels_leaks_01_300 | concrete_old_shuttered_01_300 | concrete_old_shuttered_cracks_01_300 |
---|
concrete_old_shuttered_leaks_01_300 | concrete_old_shuttered_painted_01_300 | concrete_road_01_300 |
---|
concrete_road_cracked_01_300 | concrete_road_fractured_01_300 | concrete_road_painted_01_300 |
---|
concrete_road_tires_01_300 | concrete_rough_01_300 | concrete_rough_cracked_01_300 |
---|
concrete_rough_damaged_01_300 | concrete_rough_damaged_rebar_01_300 | concrete_rough_leaks_01_300 |
---|
concrete_smooth_01_300 | concrete_smooth_cracked_01_300 | concrete_smooth_dyed_01_300 |
---|
concrete_smooth_dyed_polished_01_300 | concrete_smooth_old_01_300 | concrete_smooth_polished_01_300 |
---|
concrete_smooth_tile_hex_5x6_01_300 | concrete_smooth_tile_hex_foil_5x6_01_300 | concrete_smooth_tile_hex_foil_5x6_02_300 |
---|
copper_bare_01_300 | copper_brushed_01_300 | copper_old_01_300 |
---|
copper_polished_01_300 | copper_rolled_bare_01_300 | copper_rolled_rough_01_300 |
---|
copper_roof_tile_bare_01_300 | copper_rough_01_300 | corduroy_clean_01_30 |
---|
cotton_shirt_clean_01_30 | cotton_shirt_clean_02_30 | cotton_shirt_neon_02_30 |
---|
cotton_twill_clean_01_30 | debug_outdated | debug_parity_test |
---|
debug_uv_testing | default_gray | denim_camo_01_30 |
---|
denim_clean_01_30 | denim_clean_02 | denim_neon_01_30 |
---|
dirt_universal_01_300 | duct_tape_characters_01_10 | duct_tape_clean_01_10 |
---|
dust_light_01_50 | ebony_irregular_bare_01_300 | ebony_irregular_bare_02_300 |
---|
ebony_irregular_bare_02_hrz_300 | ebony_irregular_polished_01_300 | ebony_irregular_polished_02_300 |
---|
ebony_straight_bare_01_300 | ebony_straight_bare_02_300 | ebony_straight_polished_01_300 |
---|
ebony_straight_polished_02_300 | ebony_straight_polished_02_hrz_300 | ebony_straight_polished_floor_01_300 |
---|
ebony_straight_polished_floor_02_300 | elastic_clean_01_30 | elastic_ribbed_clean_01_30 |
---|
enameled_hq_01_30 | enameled_metal_clean_01_30 | enameled_metal_weathered_01_30 |
---|
factory_floor_cracked_01_300 | factory_floor_cracked_dyed_01_300 | factory_floor_old_01_300 |
---|
factory_floor_painted_01_300 | factory_floor_painted_old_01_300 | factory_floor_rough_01_300 |
---|
felt_clean_01_30 | foam_01_100 | foam_pyramid_01_100 |
---|
gold_bare_01_300 | gold_brushed_01_300 | gold_old_01_300 |
---|
gold_polished_01_300 | gold_rough_01_300 | graffiti_01_100 |
---|
graphics_logos_001 | graphics_logos_002 | graphics_logos_003 |
---|
grass_dry_01 | grass_green_01 | grass_scrub_01 |
---|
gravel_01 | grime_film_01_300 | houndstooth_clean_01_30 |
---|
insulation_quilted_01_200 | iron_bare_01_300 | iron_brushed_01_300 |
---|
iron_cast_01_300 | iron_cast_painted_01_300 | iron_cast_painted_studs_01_300 |
---|
iron_cast_polished_01_300 | iron_cast_studs_01_300 | iron_old_01_100 |
---|
iron_old_rusted_01_100 | iron_polished_01_300 | iron_rolled_bare_01_300 |
---|
iron_rolled_rough_01_300 | iron_rough_01_300 | jersey_clean_01_30 |
---|
latex_01_30 | latex_neon_01_30 | leather_bull_01_30 |
---|
leather_croc_01_30 | leather_holes_01_30 | leather_old_01_30 |
---|
leather_old_02_30 | leather_rough_01_30 | leather_standard_clean_01_30 |
---|
led_matrix_16x16_01_16 | linen_burlap_01_30 | linen_clean_01_30 |
---|
linoleum_floor_6x6_01_300 | linoleum_floor_6x6_worn_01_300 | linoleum_floor_strip_eggshell_01 |
---|
marble_plain_01 | marble_plain_polished_01 | marble_plain_raw_01 |
---|
metal_floor_dirty_01_100 | metal_floor_painted_dirty_01_100 | metal_generic_cast_hq_01_30 |
---|
metal_generic_hq_01_30 | mirror_01_100 | mud_01 |
---|
multilayer_debug | multilayer_default | mylar_clean_01_30 |
---|
mylar_insulation_crumpled_01_200 | mylar_insulation_quilted_01_200 | nylon_01_30 |
---|
nylon_metallic_01_30 | nylon_strap_01_10 | nylon_strap_02_10 |
---|
oxford_clean_01_30 | paint_fine_clean_01_300 | paint_fine_clean_matte_01_300 |
---|
paint_fine_old_01_300 | paint_thick_01_300 | paint_thick_chequer_01_300 |
---|
paint_thick_hazard_01_300 | paint_thick_old_01_300 | paint_thick_peeling_01_300 |
---|
patina_01_300 | patina_roof_tile_01_300 | pebbles_smooth_01_200 |
---|
photovoltaic_cells_01_200 | plaid_clean_01_30 | plaid_clean_02_30 |
---|
plaid_clean_03_30 | plaid_clean_04_30 | plaster_exterior_01_300 |
---|
plaster_exterior_damp_01_300 | plaster_exterior_damp_neutral_01_300 | plaster_exterior_neutral_01_300 |
---|
plaster_exterior_patched_01_300 | plaster_exterior_patched_neutral_01_300 | plaster_exterior_rough_01_300 |
---|
plaster_exterior_rough_neutral_01_300_copy | plastic_camo_01_30 | plastic_hard_scratches |
---|
plastic_hard_smooth | plastic_lightcover_01_50 | plastic_pattern_bubble_01_30 |
---|
plastic_pattern_diamond_01_30 | plastic_pattern_smooth_01_30 | plastic_pattern_square_01_30 |
---|
plastic_pattern_squiggle_01_30 | plastic_scraped_01_300 | plastic_scraped_matte_01_300 |
---|
plastic_scraped_matte_leopard_01_300 | plastic_scraped_matte_zebra_01_300 | plastic_scraped_old_01_300 |
---|
plastic_hard_smooth | plastic_lightcover_01_50 | plastic_pattern_bubble_01_30 |
---|
plastic_pattern_diamond_01_30 | plastic_pattern_smooth_01_30 | plastic_pattern_square_01_30 |
---|
plastic_pattern_squiggle_01_30 | plastic_scraped_01_300 | plastic_scraped_matte_01_300 |
---|
plastic_scraped_matte_leopard_01_300 | plastic_scraped_matte_zebra_01_300 | plastic_scraped_old_01_300 |
---|
plastic_scraped_textured_01_300 | plastic_scraped_textured_hq_01_300 | plastic_scraped_tread1_01_300 |
---|
plastic_tarp_01_200 | plastic_tech_01_300 | plastic_tech_dirty_01_300 |
---|
plastic_tech_glossy_01_300 | plastic_tech_hq_01_30 | plastic_tech_neon_01_300 |
---|
plastic_tech_threadplate_01_300 | plastic_tech_worn_01_300 | player_wa_shirt_01 |
---|
polyester_knit_clean_01_30 | polyester_knit_clean_02_30 | polyester_knit_clean_03_30 |
---|
polyester_knit_metallic_01_30 | polythene_sheet_01_200 | polythene_sheet_leaks_01_200 |
---|
polythene_sheet_moisture_01_200 | rock_debris_01 | rubber_bumper_01_300 |
---|
rubber_bumper_damaged_01_300 | rubber_clean_hq_01_30 | rubber_simple_clean_01_30 |
---|
rubber_simple_weathered_01_30 | rust_thick_flaky_01_300 | rust_thick_rough_01_300 |
---|
rust_thick_smooth_01_300 | rust_thick_spots_01_300 | sand_compressed_01 |
---|
sand_dry_cracked_01 | sand_loose_01 | sequin_clean_01_30 |
---|
silk_clean_01_30 | silver_bare_01_300 | silver_brushed_01_300 |
---|
silver_old_01_300 | silver_polished_01_300 | silver_rough_01_300 |
---|
soil_peat_coarse_01_100 | soil_peat_fine_01_100 | soil_rocky_01 |
---|
soil_rocky_01 | soil_sandy_01 | spandex_clean_01_30 |
---|
spandex_clean_02_30 | stains_oil_01_100 | steel_bare_01_300 |
---|
steel_bare_annodised_01_300 | steel_bare_threadplate_01_300 | steel_brushed_01_30 |
---|
steel_brushed_01_300 | steel_dented_01_100 | steel_dented_annodised_01_100 |
---|
steel_dented_coroded_01_100 | steel_dented_coroded_01_100 | steel_galvanized_01_300 |
---|
steel_galvanized_corrugated_01_300 | steel_galvanized_corrugated_02_300 | steel_galvanized_corrugated_painted_01_300 |
---|
steel_galvanized_corrugated_painted_02_300 | steel_galvanized_corrugated_rust_01_300 | steel_galvanized_corrugated_rust_02_300 |
---|
steel_hq_brushed_01_10 | steel_hq_milled_01_10 | steel_hq_milled_02_10 |
---|
steel_hq_noise_01_10 | steel_old_01_300 | steel_old_rusty_01_300 |
---|
steel_old_rusty_threadplate_01_300 | steel_old_scraped_01_300 | steel_old_threadplate_01_300 |
---|
steel_perforated_01_100 | steel_polished_01_300 | steel_rebar_01_30 |
---|
steel_rolled_bare_01_300 | steel_rolled_bare_annodised_01_300 | steel_rolled_rough_01_300 |
---|
steel_rough_01_300 | steel_rough_threadplate_01_300 | steel_tempered_large_01_30 |
---|
steel_tempered_large_02_30 | steel_tempered_medium_01_30 | steel_tempered_small_01_30 |
---|
sticker_bomb_01 | terrain_asphalt_old_01 | terrain_asphalt_old_fractured_01 |
---|
terrain_cliff_rock_01 | terrain_cliff_rock_02 | terrain_cliff_rock_03 |
---|
terrain_concrete_road_01 | terrain_concrete_road_cracked_01 | terrain_grass_dry_01 |
---|
terrain_grass_green_01 | terrain_grass_scrub_01 | terrain_gravel_01 |
---|
terrain_mud_01 | terrain_rock_debris_01 | terrain_sand_compressed_01 |
---|
terrain_sand_dry_cracked_01 | terrain_sand_loose_01 | terrain_soil_rocky_01 |
---|
terrain_soil_sandy_01 | terrain_trash_01 | titanium_bare_01_300 |
---|
titanium_brushed_01_300 | titanium_old_01_300 | titanium_polished_01_300 |
---|
titanium_rolled_bare_01_300 | titanium_rolled_rough_01_300 | titanium_rough_01_300 |
---|
trash_01 | unused | velvet_clean_01_30 |
---|
wallpaper_pattern_a_old_01_300 | wallpaper_plain_01_300 | wallpaper_plain_damp_01_300 |
---|
water_puddle_01_150 | windows_opaque_01_200 | windows_opaque_foil_01_200 |
---|
windows_opaque_foil_streaky_01_200 | windows_opaque_streaky_01_200 | wood_hq_burl_01_30 |
---|
wood_plain_beech_01_300 | wood_plain_beech_stained_01_300 | wood_plain_oak_01_300 |
---|
wood_plain_pine_01_300 | wood_plain_pine_polished_01_300 | wood_plain_plywood_01_300 |
---|
wool_crossknit_clean_01_30 | wool_knit_clean_01_30 | wool_knit_clean_02_30 |
---|
wool_knit_clean_03_30 | wool_knit_clean_04_30 |
---|
You change the mapping by editing those UV islands. For a more hands-on guide of this, refer to ->
Please see the page.
If the gold material also doesn't show up, then your problem lies somewhere else. Maybe the entire is hidden?
velvet_clean_01_30 by itself | latex_neon_01_30 by itself | together |
---|
µblend normals at 1.0 | µblend normals at -1.0 |
---|
↓ Green base, opacity 3.0 | ↓ Green base, opacity 1.0 |
---|
This tutorial won't go into the technical details of how reflections and roughness work (mainly because I don't get it myself), but for more information, see . Shininess is mainly controlled through the Rough Out value in MLSB. The dropdown contains a list of properties inherent to each material.
velvet_clean_01_30 @ 0.502,0.498 | velvet_clean_01_30 @ 0.1569,0.8431 |
---|
velvet_clean_01_30 @ 0.6667,0.3333 | velvet_clean_01_30 @ 0.3333,0.6667 |
---|
Item | MLSB Screenshot |
---|
Once you've found material-colour-texture-shininess combinations you like, I'd recommend writing them down somehwere to be re-used across your mods. Good starting points for base materials are velvet_clean_01_30
, spandex_clean_01_30
, and nylon_metallic_01_30
. All of these are very versatile because they offer a broad range of colours and levels of shininess. The first two of those also work very well as materials to be used on the top layer. canvas_clean_01_30
and denim_clean_01_30
have lovely textures. For reference, contains previews for all materials available in Cyberpunks shader. There's also a downloadable .zip
in there which is useful to keep on hand when you're messing with materials.
To quickly check how your changes look in-game, you can use .
Create an outfit using your item, save it with and un-equip it
Strand_ID
Texture - Paths to an identity map (.xbm
).
This is a greyscale texture where every masked hair strand has a single, unique greyscale value. gradientEntriesID
colour gradient in hair profile (.hp
) is mapped to this texture.
Strand_Gradient
Texture - Paths to a root map (.xbm
). This is a greyscale texture with a vertical black to white gradient from root to tip. gradientEntriesRootToTip
colour gradient in hair profile (.hp
) is mapped to this texture.
Strand_Alpha
Texture - Paths to an opacity mask texture (.xbm
). Black = fully transparent. White = fully opaque.
RoughnessScale
Scalar with a decimal value between 0 and 1.0. Determines how rough or smooth hair material look. 0 = least rough (high specular, shiny reflection characteristics). 1.0 = most rough (high diffuse, matte reflection characteristics). Hair will look unnatural if this is too low (shiny).
See#roughness-metalness for a picture
RoughnessBias
Scalar with a decimal value between 0 and 1.0 that is applied between min and max RoughnessScale
, which changes the suddenness of its onset.
AlphaCutoff
Flow
Texture - Paths to an anisotropic rotation map (.xbm
). Anisotropy is a reflection characteristic of materials with fine grooves/ridges predominately following the same direction. The reflection will become blurred and stretched perpendicular to the direction of the grooves.
FlowStrength
Scalar with a decimal value between 0 and 1.0. Anisotropic materials have unique reflection characteristics as a result of their grooved/ridged surface. The more anisotropic a material is, the more its reflection is influenced (stretched/blurred) by the direction of its grooves/ridges. 0 = fully isotropic. 1.0 = fully anisotropic. Hair should have high or full anisotropy.
VertexColorStrength
Scalar with a decimal value between 0 and 1.0. Determines how much influence vertex colour has in the material. Vertex colour is a mesh attribute (colour, red channel). Cyberpunk hair meshes are vertex coloured red on the cap mesh and the innermost layer of hair clumps. They fade to black at the outermost layer of hair clumps. RGB 255, 0, 0 = max dull/dark. RGB 0, 0, 0 = max bright/glossy.
Scattering
Scalar with a decimal value between 0 and 1.0. Effect is not well understood at this time. Related to some internal light scattering function in hair shader. It affects the colour and reflection characterics of hair materials. There is some interaction between this and advanced game options for hair rendering. Specifically AlphaShifts R, TT, TRT (light scattering modes), single scattering and multiple scattering. Default values can be overridden with CET console commands. e.g. GameOptions.SetFloat("Editor/Characters/Hair/AlphaShifts", "TRT", 0.375000
ShadowStrength
ShadowMin
ShadowMax
ShadowRoughness
DebugHairColor
HairProfile
HairParameters - Paths to a hair profile or .hp
file. Hair profiles contain 2x arrays named gradientEntriesID
and gradientEntriesRootToTip
. Each array contains a set of colour values and gradient stop positions. They are mapped to the greyscale identity and root maps respectively, which are blended to form the hair material's base colour. Cheap method to create a large variety of editable hair colour variations without the need to use large, colour textures.
Albedo
Texture - Paths to an albedo texture (.xbm
). This texture is used to determine the base colour of skin. Most skin albedo maps are pale/caucasian and tinted darker tones via TintColor.
SecondaryAlbedo
Texture - Paths to a secondary albedo texture (.xbm
) with alpha transparency, which is blended with Albedo
. Intended for secondary colour details like freckles. Commonly used by texture frameworks to blend tattoos with Albedo
.
SecondaryAlbedoInfluence
Normal
Texture - Paths to a primary global normal map (.xbm
).
DetailNormal
Texture - Paths to a secondary global normal map (.xbm
). This is typically used for muscle/vein definition and is blended with primary normal.
Roughness
Scalar with a decimal value between 0 and 1.0. Determines how wet/shiny or dry/matte skin material appears. 0 = least rough (most wet/shiny). 1.0 = most roughness (most dry/matte). See #roughness-metalness for a picture
DetailRoughnessBiasMin
DetailRoughnessBiasMax
MicroDetailUVScale01
Scalar - UV scale compensation factor for microdetail_n01.xbm
. See Fig. 1. Value is an integer between 0 and 100. A particular value is required for this detail normal map to tile seamlessly depending on the UV scale of the body part mesh. See Fig. 2.
MicroDetailUVScale02
Scalar - UV scale compensation factor for microdetail_n02.xbm
. See Fig. 1. Value is an integer between 0 and 100. A particular value is required for this detail normal map to tile seamlessly depending on the UV scale of the body part mesh. See Fig. 2.
MicroDetail
Texture - Paths to a microdetail texture (.xbm
). See Fig. 1. This is a tileable detail normal map, typically used for pore structures. There are 3x by default (microdetail_n01.xbm
, microdetail_n02.xbm
and a 2:1 combination of the two textures called microdetail_n.xbm)
.
MicroDetailInfluence
Scalar with a decimal value between 0 and 1.0. Determines normal strength of microdetail_n01
and microdetail_n02
. See Fig 1.
TintColorMask
TintColor
Color - RGB uint8 colour value multiplied with the per pixel colour of Albedo
and SecondaryAlbedo
texture. Used to make all of the skin tone options in character creator (ca_almond, ca_senna, bl_dark etc).
TintScale
SkinProfile
Detailmap_Stretch
EmissiveMask
EmissiveEV
Detailmap_Squash
CavityIntensity
Bloodflow
Texture - Path to a bloodflow (vein) texture (.xbm
).
BloodColor
DetailNormalInfluence
MainColor
Influences the color but is overridden by Temperature
EmissiveMaskPower
Influences the brightness of the Monowire, but Temperature takes priority.
StartGradient
Influences the gray wire near the hand. Set to -1 to disable.
NoiseScale
Influences the animation of the Monowire, but Temperature takes priority.
NoiseAmount
Noise scale and amount set how much the wire wobbles when used. Unstable wires, which wobble across the entire screen, are set to a scale of 1.5 and amount 50.
Thickness
Influences the thickness of the Monowire.
MinimumEmissive
Influences the brightness of the Monowire, but Temperature takes priority.
Emissive
Influences the brightness of the Monowire, but Temperature takes priority
Temperature
The key value. The higher the value, the brighter it gets, and it changes color in the following order as it increases: black → red → orange → yellow → white
Albedo
Color
Color
Color
?
SecondaryAlbedo
?
?
?
?
Normal
Normal
Normal
None
?
DetailNormal
Additive Normal
Additive Normal
None
?
Roughness
Roughness
None
MicroDetail mask (0.5-1)*
?
MicroDetail
Additive Normal
Additive Normal
None
?
TintColorMask
?
?
?
?
Detailmap_Stretch
Additive Normal
Additive Normal
None
?
Detailmap_Squash
Additive Normal
Additive Normal
None
?
EmmisiveMask
?
?
?
?
Bloodflow
?
?
?
?
Red
Ambient Occlusion*
Green
Subsurface Scattering Mask
Blue
Improved Facial Lighting Mask
SecondaryAlbedoInfluence
?
SecondaryAlbedoTintColorInfluence
?
DetailRoughnessBiasMin/Max
?
MicroDetailUVScale01/02
?
MicroDetailInfluence
Controls MicroDetail normal intensity
TintColor
?
TintScale
?
SkinProfile
?
EmissiveEV
?
CavityIntensity
?
BloodColor
?
DetailNormalInfluence
Controls DetailNormal normal intensity
DiffuseTexture
Color
Color
Color
Opacity Mask
SecondaryMask
?
?
?
?
NormalTexture
Normal
Normal
None
?
NormalAlphaTex
?
?
?
?
NormalsBlendingModeAlpha
?
?
?
?
RoughnessTexture
Roughness*
Roughness*
Roughness*
?
MetalnessTexture
Metalness*
Metalness*
Metalness*
?
VertexOffsetFactor
?
DiffuseColor
Procedural Color
DiffuseAlpha
Alpha
UVOffsetX/Y
?
UVRotation
?
UVScaleX/Y
?
SecondaryMaskUVScale
?
SecondaryMaskUVInfluence
?
NormalAlpha
?
UseNormalAlphaTex
?
NormalsBlendingMode
?
RoughnessScale
?
RoughnessBias
?
MetalnessScale
?
MetalnessBias
?
AlphaMaskContrast
?
RoughnessMetalnessAlpha
?
AnimationSpeed
?
AnimationFramesWidth
?
AnimationFramesHeight
?
DepthThreshold
?
GlassTint
Color
Color
Color
?
MaskTexture
?
?
?
?
Roughness
Roughness
Roughness
Roughness
?
Normal
Normal
Normal
Normal
?
Red
Color
Green
Color
Blue
Color
TintColor
Procedural Color
Opacity
Overall Opacity
OpacityBackFace
Opacity of back face
TintFromVertexPaint
Control how much vertex color will tint the glass color. If set to max value, vertex color will completely replace TintColor.
FrontFacesReflectionPower
How much front face reflect light
BackFacesReflectionPower
How much back face reflect light
IOR
Index of Refraction?
RefractionDepth
?
FresnelBias
?
GlassSpecularColor
Color of light reflected from glass
NormalStrength
Control how much normal map affects mesh
NormalMapAffectsSpecular
Control how much normal map affects reflected light
SurfaceMetalness
Metalness
MaskOpacity
?
GlassRoughnessBias
?
MaskRoughnessBias
?
BlurRadius
?
BlurByRoughness
?
AdTexture*
Color
Color
Color
Color
DirtTexture
Color
Color
Color
Color
TilesWidth*
How many tiles are on the horizontal axis of the sprite sheet
TilesHeight*
How many tiles are on the vertical axis of the sprite sheet
PlaySpeed
Speed of which animation will play
InterlaceLines
How much screen scanline is visible
PixelsHeight*
Height of sprite in pixel
EmissiveEV
Energy Voltage of light emission
EmissiveEVRaytracingBias
Energy Voltage of light emission by Raytracing
EmissiveDirectionality
?
EnableRaytracedEmissive
Enable Raytraced Emission
BlackLinesIntensity
?
BlackLinesRatio
?
BlackLinesSize
?
LinesOrDots
?
DistanceDivision
?
Metalness
?
Roughness
?
IsBroken
If enabled, the animation will have a broken TV overlay effect
UseFloatParameter
?
UseFloatParameter1
?
AlphaThreshold
?
DirtOpacityScale
Opacity of Dirt Texture
DirtRoughness
Roughness of Dirt
DirtUvScaleU
UV Scale of Dirt Texture
DirtUvScaleV
UV Scale of Dirt Texture
HUEChangeSpeed
?
↓ Grey base, opacity 3.0 | ↓ Grey base, opacity 1.0 |
Substance Designer 2077: How it works and why it's actually super
Published: Last documented edit: Oct 15 2024 by manavortex
This page describes Cyberpunk's multilayered supershader.
This wiki contains multiple guides about editing multilayered materials, such as:
For editing .mlmask files: Textures: Custom MultilayerMask
For editing .mlsetup files:
Everyone asks this question in the beginning, but you're only a single epiphany away from a change of mind. The multilayered shader can pack up to 20 layers of texture into a single file! Read on to find out how it works.
A significant portion of assets for Cyberpunk 2077 leverage the complex multilayered.mt supershader. The supershader has several different component files which are used to create masks to blend procedural textures without baking them. You can read more about this technique in this documentation by CDPR Technical Art Director Krzysztof Krzyścin.
While the multilayered supershader is very common, there are hundreds of other non Substance-style shaders, some with traditional baked PBR textures.
For a list of shader properties in multilayered.mt, see Multilayered Material: Properties
The multilayered shader is composed of three distinct parts:
Layer Masks | Mask textures that control where each surface is visible .mlmask files
Layer Definitions | Controls procedural effects such as tiling or color for each layer .mlsetup files
Layer Surfaces | Links PBR textures to create numerous pre-defined visual surfaces .mltemplate files
For editing mlsetup files, you'll want to use the MlSetupBuilder (download)
MLMASK files are the core element of the substance-style integration. These files contain an array of up to 20 textures which are used to control the blending between pre-defined surfaces called mltemplates. These mask textures are more-or-less 1:1 with substance-style layer masks.
As shown above, each mesh using the multilayer shader uses a unique mlmask file that is hand authored by CDPR artists. To take effect in game, each mask file is linked by the mlsetup file.
MLSETUP files are fairly self-explanatory when considering the name, multilayer setup. These files correspond with an mlmask file and are responsible for setting up parameters for each layer from the mlmask. Each layer within an mlsetup contains information very similar to materials or shaders.
To edit .mlsetup files, it's recommended that you use the MLSETUP Builder software.
For a definition of the properties, see Multilayered Material: Properties.
For a guide on how to edit one, check R&R: Colour Editing.
MLTEMPLATE files are the actual visible surfaces that appear on meshes using the multilayered.mt supershader. The multilayer templates include a wide variety of surfaces such as steel, iron, aluminum, plastic, nylon, linoleum, carpet, soil, grass, rubber, concreate, and everything else imaginable. Each template can use a unique color, normal, roughness, and metallic PBR texture. The mltemplate files are selected from within each layer definition of an mlsetup file. Meshes can blend up to 20 mltemplate surfaces into a single material by masking them with the mlmask.
multilayered
GlobalNormal
path\to\normal.xbm
MultilayerMask
path\to\mask.mlmask (white file)
MultilayerSetup
path\to\material.mlsetup
Multilayered Shaders |
---|
Texture Channels | Red | Green | Blue | Alpha |
---|---|---|---|---|
Name | Description |
---|---|
engine\materials\multilayered.mt
base\materials\multilayered_clear_coat.mt | Adds clearcoat effect
base\materials\vehicle_destr_blendshape.mt | Adds procedural vehicle damage
base\materials\cloth_mov_multilayered.mt
base\materials\multilayered_terrain.mt
base\materials\ver_mov_multilayered.mt
GlobalNormal
Normal R
Normal G
?
?
MaskAtlas
?
?
?
?
MultilayerMask
See mlmask
MultilayerSetup
See mlsetup
GlobalNormalIntensity
Sets visual intensity of normal map texture
GlobalNormalUVScale
?
GlobalNormalUVBias
?
MaskAtlas
?
MaskTiles
?
Layers
?
LayersStartIndex
?
SurfaceTexAspectRatio
Sets number of mlmask layers to be used
MaskToTileScale
?
MaskTileSize
?
MaskAtlasDims
?
MaskBaseResolution
?
SetupLayerMask
?
NormalsTextureDDXYMultiplier
?
MicroblendsTextureDDXYMultiplier
?