Skip to main content

Legendary Armor Skins/LAS/MOOG/Outfit Module Guide

This guide as also made by Columbus, if you'd like to contact me on Discord, please join the modworkshop.net server and ping me if you have any questions in #payday2-modding.

DISCLAIMER: THIS IS STILL A WORK IN PROGRESS, NOT EVERYTHING HAS BEEN EXPLAINED YET.

I just wanted to get this out to anyone who wanted to get started and have prior knowledge with Blender and modding other games first. If you a complete beginner, please wait until this guide is fully finished. Thank you.

Now to start...

Prerequisites:

  1. Blender, you could either download it at Blender.org or through Steam

  2. Any text editing software, I recommend Notepad++

  3. PAYDAY 2 Model Tool (install .net version 6 if it does not run)

  4. Any image editing software, such as Paint.Net, Photoshop, or GIMP

These are all the bare essentials you'll need to begin your path down modeling and porting models to PAYDAY 2.

Got them all downloaded and everything is running correctly? Good. Now, let's move on.

Model Tool

If this is your first time modding for PAYDAY 2, and you don't know what does what on the model tool, I'll explain a basic run down of each section, and tab.

  1. For the import screen, this is where all the magic happens, The first section "Select Base Model" this is where you'll import the base model of what you're modifying. (side note by thot_patroll, if you are making a new model instead of replacing one then this can be turned of with the checkbox)
  2. The second section "Script" is what you'll be using the most (or least) to import your .glb file and have it be read by the model tool.
  3. Object is the alternative to Script, where instead of using a script to import your model and have it be saved/converted into a .model, you'll just import the .glb file by itself with no .mscript file to assist you in doing so.
  4. Pattern UV can be safely ignored since it is more suited for weapon modders, and that's what we're not here for.
  5. Animations can also be safely ignored, it is made for baking animations directly into the .model file, but we won't need that.
  6. The check boxes, Importing objects not in base file, and Import transforms, it's best to always keep those two ticked on, no matter the circumstances.
  7. "Save To: is where you wish to place your newly generated .model file in a folder.

Exporting your model file

This is the export screen of the model tool, this is where you drag and drop your .model file and convert it to either a .dae .obj .gltf .glb or .animation

All I should say for this is that always keep your export format as a .glb format.

I will not go through a preview of the Objects tab since it is more meant for users who are more well-versed in model editing.

Now that we've gone through the basic rundown of the Model Tool, let's start to move into Blender. To export your first .model file, select the .model you want to export, I'll for example use Kento's model, located at "units\pd2_dlc_des\characters\civ_male_des" in the game files. you can use Diesel Bundle Viewer to extract the models.

Blender

Importing

When you export the model to a .glb a new file should appear with the same name in a glb format. Open up blender, and at the left of the screen there should a piece of text called "File" click on it and a new menu should appear, and hover over import, it should look like this if you've done it correctly.

You're import file list won't be as big as mine since I have several plugins installed, but click the glTF 2.0 option and a new menu should appear.

Right before you import, change the setting at the right side of the new window called Bone Dir, change it from Temperance to Blender, Blender 4.X has this option automatically selected. Dont mind the weird looking skeleton, if this step is not done then the model will be broken in game.

You've now imported your model that you'll be using as a base. Unfortunately if you're a new Blender user, this could be extremely complex at first, but if you're a experienced Blender user, new to PAYDAY 2 modding, this should be easy.

Now to begin, let me start off by saying that the model you want to insert must be in a humanoid shape or a human. Anything that involves animals that were meant to originally be a quadruped, will be impossible to import or to even look good. Additionally most models will have different proportions then the payday characters so you will have to either edit the model itself or scale/move the bones to try and cram it in.

I won't bore people with the details, since the process of converting a rig to PAYDAY 2's rig is different with each character since all rigs are made differently, but if you want a more fleshed out guide to wanting to make your model work with the engine, I suggest looking at THOT_PATROLL's guide linked here

Exporting

Once you have completed your model in Blender, and would like to export, there are some settings you should check or uncheck before you export it.

Tangents

It is highly important that you export with tangents on your model so that your normals will not look bad when importing the model into the game and previewing it. The setting can be found under

Data > Mesh > Tangents (Tick tangents so that there is a checkmark)

Vertex Colors

While this setting is highly situational for some users, most models will not need this setting enabled. The setting can be found under the same tab where tangents are located, just under the "Vertex Colors" tab, uncheck "Export all vertex colors" and when the file won't export the mesh with any vertex colors.

Materials

The materials are controlled by the material_config file. Each material will need to have a render template which is what tells the game what the material will do. So if you want a material to glow or have transparency then you will need a render template that supports that. There is a file that contains all the templates but most of the time you will only be using a few basic ones unless you need a special one.

For first person models you will need special materials that have "DEPTH_SCALING" in the render template. This makes the object render "infront" of everything else so it wont clip with other objects in the world.

Textures

Got your model all setup now? Good, now it's time to move on to texturing. The basic textures you will most commonly see with character models are color/diffuse textures or albedo depending on the game, a specular or roughness map, and a normal map. There are some more unique textures like metallic, emissive/illumination, transparency, ambient occlusion and others, but for now let's focus on the most common ones.

Albedo/Color Textures

Let's start with their color/diffuse texture, I will refer to it as diffuse now for simplicity. A diffuse texture is basically what everyone will see on the character and what gives them their look. Without a diffuse texture, the textures will just be a flat color, but let's not dive too deep into what they are, and more of how to work with them. I will use a baked texture I made for Houston's upper suit texture from Payday 3 as an example.

upper_albedo_1k.png

Ambient Occlusion/AO Textures

This is an albedo texture, there is no post processing effects on it, such as ambient occlusion or whatever else. If we were to import this into the game right now, it would not look appealing. To make it look good, see if the textures you extracted or downloaded have a "ambient occlusion" texture or AO for short. This will significantly help how your model would look. To apply the effect over the albedo texture, you will need a photo manipulation program like Photoshop or GIMP, I will be using Photoshop for the example pictures. To apply a ambient occlusion texture, simply layer the texture on top of the albedo texture and adjust for scaling if the texture resolutions are different from one another, and once you got that all down, change the bar where it says "normal" to "multiply"

Metallic Masking Textures

Next up I'd like to talk about textures have a metallic layer. Since this game doesn't support metallic layering, apart from the very scuffed blue channel of the GSMA (which is most of just a cubemap masking layer) you will need to apply the metallic layer yourself on Photoshop/Gimp, this is similar to how we would apply our AO, but with a couple of extra changes. Firstly, layer your metallic mask on top of the color texture and apply the "subtract" for the metallic mask. This should at first completely black out whatever was marked as metallic on your layer, but now you want to adjust the opacity of the layer. I personally like to scale it around 50-60% as it closely reflects how it should look if it did have a metallic layer if it were rendered in a game that supported it, but your values may vary depending on what you think looks best. I will use Houston's accessory texture to compare how it will look before and after with the metallic mask applied.

layered.png

Once you have done that, your new texture will look like this.

upper_diffuse_1k.png

Notice how the AO helps give the texture more depth and darkens the wrinkles and areas where the suit is less commonly seen, this will help the texture looks much better when ported over to Payday 2.

Payday 2 commonly uses .dds files when creating textures and it is suggested that you should too, if you use Photoshop, you may download the .dds plugin here

Exporting

If you are new to making textures and don't care to mess with a GSMA texture, you could place your specular map into the alpha layer of your diffuse texture and save it from there. If you do make sure you save it as a "DXT5 ARGB 8 bpp | interpolated alpha" texture, if you save as DXT1, you will lose your alpha channel data and the model would end up looking extremely glossy. If however, you want to make a GSMA texture I will explain it now.

GSMA

A GSMA texture is a texture that was used more later down the development pipeline of Payday 2 models. GSMA (Gloss, Specular, Material, Alpha) is probably the closest we will get to a PBR type texture. To properly use a GSMA texture, place the specular texture you have and insert it into the green channel. If you however have a roughness texture, no worries. Just invert the color of the image and you have a specular. Once inserted, your red channel will be the determining factor of what parts you want the shine from your green channel to be shiny or glossy, think of it like its an anisotropy factor for your specular. The blue channel of the GSMA texture is a masking layer used to determine what part of your texture will have a cubemap reflection or not. This could be useful especially if you are making a texture with a metallic part, and you want to apply a steel reflection cubemap, but don't want the entire material reflecting that texture to have a metallic look to it. It's practically a dumbed down metallic layer that doesn't make the texture look more metallic with it on its own. The alpha layer of the GSMA is used in more rare cases when render templates (shader templates) specify that the GSMA alpha layer will be used for transparency in the material_config file.

Normal Map/NM

Now that you've gotten the most important texture all setup and good to go, let's move on to the second most important texture, your normal map. Normal maps come in all sorts of ways, depending on the game engine formats them, your X/Red channel could be layered in the alpha channel, while the Y/Green channel remain in the green layer of the image, which is more commonly seen with DXT5nm formatted normals, either that or your texture will be a blueish/purplish texture, with the X, Y and Z channels being in the red, green and blue channels.

Here is an example of the latter normal map I explained.

upper_normal_1k.png

But it's not as simple as it may look here, some games rendering template could also determine how the normal map will really looks when importing it into the game.

OpenGL Normal Maps Compared to DirectX formatted Normal Maps

Games rendered using OpenGL will have the Y channel set to Y+, and games running on DirectX will have the Y channel inverted at Y-. If your normal map looks like the image on the left side image in the comparison, you will need to invert your green channel of your normal map, so that it looks more alike to the OpenGL normal map.

While this games renders with the DirectX API, you will need to format your normal map to the OpenGL format, this reason is because of when you export with tangents, normal vectors are used to convert normal maps from tangent space to world space normals when previewed in game.

So, with all that said, once you have finished all the other textures, now comes the time to format the normal map to be compatible with diesel engine. You will need to move some channels around. I will use a traditionally formatted normalmap as an example (directx). This is typically controlled on the right of your image editor of choice. We are going to copy the red channel onto the alpha. Diesel does not actually use red and blue channels, so we will simply make the red channel white and the blue channel black. This saves on compression. You may also need to invert the green channel. Once you’re done, the final result should be mostly orange. Because every Payday 2 normalmap uses an alpha channel, you must compress this texture with DXT5. Alternatively, you could not compress the texture at all, but this is generally ill-advised because of the higher memory usage. Memory being much more precious in Payday 2, because of how unoptimized this game is.

If you want to see for yourself how much this effects memory usage, you can use the -qa launch parameter to monitor this. I measured memory usage with the "-qa" launch parameter and the results were:

978-983 Mb | W/UC NM Textures ///

950-954 Mb | W/C NM Textures.

Illumination/IL Textures

Illumination is the texture used for glowing materials. It will look like a regular albedo/color texture however the non glowing parts will be black and the glowing parts will have the color you want. The brightness and bloom are controlled by variables called il_multiplier and il_bloom. They will look something like the code below and changing the value number will change their strength. There is a premade set of values that you can use which can affect the intensity of the brightness of the illuminated texture.

name="none" value="0.0"/>

name="identity" value="1.0"/>

name="match" value="0.4"/>

name="candle" value="0.5"/>

name="desklight" value="0.6"/>

name="neonsign" value="0.7"/>

name="flashlight" value="0.8"/>

name="monitor" value="0.9"/>

name="dimlight" value="1.0"/>

name="streetlight" value="1.2"/>

name="searchlight" value="1.4"/>

name="reddot" value="2.5"/>

name="sun" value="3.0"/>

name="inside of borg queen" value="6.0"/>

name="megatron" value="8.0"/>

<variable type="scalar" name="il_multiplier" value="1"/>

<variable type="scalar" name="il_bloom" value="1"/>

Opacity/OP Textures

Opacity textures are used for transparent materials, they will be black/white with white being the parts that are visible and black being parts that are invisible. parts that are partially white/black will be semi-visible

You will need a special render template to get this to work, but we'll talk about render templates later.

Opacity textures may seem simple on the surface, but the color channels do serve different purposes

Red = Fresnel Reflection Strength (This is a bit more confusing, if you're unsure how to properly control this channel, keep it the same as the green channel) (This feature is only available with render templates that support Fresnel, editing this channel while using a generic opacity render template causes... interesting visual issues to say the least.)

Green = Opacity (Fairly straight forward, it just controls the scale of the opacity of the texture

Blue = Cubemap Strength (Think of this like a specular channel, this basically just controls the gloss of the texture if you want it to reflect a cubemap or have it be matte)

Render Templates

Now this is a VERY important thing to learn. Render templates is basically the shaders used to render your characters textures. Whether you want to use a diffuse texture or a normal map, the shader you use will determine all of that. To find a list of render templates that has been implemented, I'll leave a .zip file of render templates that are meant for static props and props that have weighting. Click this very funny hyperlink and you'll get redirected to download it.

To get started on what we're even looking at. Let's start with the basic render templates first that I and many other people will probably use the most for third person meshes.

generic:CONTOUR:DIFFUSE_TEXTURE:NORMALMAP:SKINNED_3WEIGHTS

Templates basically highlight what textures you can use them for and what vector parameters you can insert in them. With this render template you can have whatever material is using this render template to:

CONTOUR: Have an outline when the character is behind a wall or whenever your view from them is obstructed

DIFFUSE_TEXTURE: This allows you to input a diffuse/color texture and this will be reflected on the material in-game when previewed.

NORMALMAP: This allows you to input a normal map texture which will give the material a fake bumpiness and lighting when previewed.

SKINNED_3WEIGHTS: While you don't need to input anything for this, this is crucial for you to have when you are in this line of work when you port character models. Failing to do will result in the character either staying in a resting pose of how it was in blender, or a crash to desktop.

While this is just a very basic render template, this is what many players usually resort to when porting models, if you would like to use different templates that have different functions: GSMA Texture support, Cubemap reflections, you can look in the material_config files that are found in game and take an example of how they are implemented.

First Person Rendering

Got whatever you were porting to work as a third person model now? Great, now to move on to first person rendering. You will need to make a new unit for the first person mesh since all you'll need is just a pair of arms, anything else will just clutter your screen or block it. When it comes to the fps material_config's file, you'll need to include this node in your render template called "DEPTH_SCALING". What this does is basically render your arms over everything so that if you are near a wall or prop, your arms won't phase through.

generic:DEPTH_SCALING:DIFFUSE_TEXTURE:NORMALMAP:SKINNED_3WEIGHTS

This is the template you should use if you are making a character with only a diffuse and normal map texture. If you are using other textures such as a GSMA or an Illumination texture, you can find those in the render template database.

(Optional, but highly recommended)

If you want a pro-tip on how to find these templates you want to take a chunk out of, if you are on Windows 10/11 go to your search and type in "Indexing Options" and click enter, click "Advanced" then "File Types" where it says "Add new extension to list:" put "material_config" without the quotes fyi and when asked of how should this file be indexed, click "Index Properties and File Contents" what this will do is when you search for a render template in your file explorer tab, it would find if there is any matching text of the render template you pasted in. Mind you when you do this, you will need to rebuild the files you have indexed and it may take a while depending on how many files are on your computer or what drives or folders you have selected to index.