Game Dev



Baking Low Poly Tutorial

no description available

27 images :: Gold Coast :: Unreal 4 :: 2018



Let's look at this floating link. It has a lot of little pieces. This causes one draw call per asset and per material. So if an asset has 4 material id's that makes it 4 draw calls. Generally you want the draw calls to be less than 1000 at any time no matter where you look at.

I found the asset in the clients files and copied just the pieces I need into a new max file.

Then I move the parts so the center of the combined object will be at 0,0,0 in 3ds max. I also rotated it to be either 0 or 90 degrees and removed any horizontal tilt.

Below you see the parts I need from 2 angles. Everything else is mirrored.


First I built one of the large buoyes on the side. I used a box and a cylinder as a base and the inset the middle part before pulling it out a bit. This is much easier than trying to fix the provided mesh.


This is the layout of the UVs. I can use those for the light maps as well. So no need to create a 2nd UV set.

The asset will have 3 materials: Yellow painted steel, dark steel and stainless steel. I'm starting to separate the 3 materials. Everything yellow will be growing from the bottom left of the square.


This is the connector and handle of the buoye. Created from scratch as simple assets. Making sure that they have a line on each sharp edge so we can set everything to smoothing group one or "smooth" in 3ds max.

2017 seems to crash a lot when you set smoothing groups manually. Everytime you add a chanfer the objects smoothing groups will be reset. So its best to ignore the smoothing groups till you are done with the object.

Note: I removed the face that is attached to the buoye from the large plates. I did that later. The face is helpful to create the high poly object and I will create some of them from the low poly objects. So start optimizing after you made the high poly objects.


This object will be dark steel. So I placed it in the top corner. The slightly bent handle is there twice. I only want one of them to be baked. So I selected the one I doubled up one and moved it by exact 1 unit to the left (U=-1). Make sure the arrow symbol is clicked befor you type in "-1".

Baking does not get a good result if there are more than one chart on the same spot. Even if the chart is an exact copy. if you have 5 screws exactly the same. Move 4 of the to the side. Only the 5th will actually bake so only the 5th needs a high poly object.


Next object is the large plate in the center of the object. There are actually 2 plates but they are the same. So we need only one.

I created this from a spline. The screws are very simple shapes. We have the high poly versions for baking so no need to add more detail. Just make sure the shape follows the general shape of the high poly versions.


I also created this from a box and the screws from cylinders. Faster and a lot cleaner than trying to fix the overly complicated source mesh.


The UVs of the 2 objects. You can select both objects and add one "unwrap UV" to both of them. This way you see both of the objects charts.

Dark metal is at the right side and stainless steel on the top left.

These islands are already aligned proper. You can add one UV modifier to all of the objects and make sure that nothing is overlapping and there are no gaps. I usually do the fine tuning at the end. You can just roughly place the island sorted by material Only make sure they are easy to select for now.

If you have doubled up overlapping islands then leave them overlapping for now.


This is the result. This are all parts we need for baking. Everything else is doubled up.


We still need the mirrored parts so now I mirror them to the other side and align them.

Don't forget to reset x-form for the mirrored mesh before you reattach it or this part will be rotated in unreal.


Keeping the polygons selected I can move all the island to the side.


High Poly Models

Now for the high poly models: Because I built the low poly models from scratch it is easier to copy the whole object and use some of the low poly as base for the high poly models.

I only improve the one side that is inside the UV square. This will be the part that bakes.

We could use the high poly versions of the buoye here but because the shape is slightly different the result might not be as good as we want.


Baking only picks up angles. If you have 2 flat planes on top of each other the baker will make them look like they are at the same height. You can take that to your advantage. Instead of insetting some geometry creating a bit of a mess I just added the inserted part on top of the mesh. Same for the screws.

We may have to adjust the bake settings so the baker picks them up. For now make sure they don't float too high.


For the center part I use the low poly objects and add chamfers to the sharp edges. I also built the splint for one of the screws because the original splint was a bit of a mess.


Those are the original client provided screws. They are very detailed so lets use them. Some of the low poly objects need a bit of a tweak to match these objects.

There are 3 of the smaller screws. I only replace the one that will get baked because the island is within the square.

Go back up to the low poly model and take note how low poly the screws are in comparison to these. They will still look good after the bake.


This is the result. I only replaced the right side with high poly versions. The left side needs to be present though because we also bake the ambient occlusion.

You can leave the objects separated. Create a substance folder within the asset's folder and export the high and low poly objects into this folder. I called them "mlinktochain-high" and "...-low".

Before I exported the low poly version I made sure all the smoothing was set to 1 and none of the charts were overlapping and (only) the right island that had a high poly to bake from was within the center square in max. High poly needs to have smoothing set to 1 as well.


Substance Designer

Create a new substance and call the graph T_MLinkToChain. This name will be the base name for the textures created. Eg. T_MLinkToChain_NRM.

Save the new substance as something like in the substance folder

Open the substance folder in windows explorer and drag the low and high poly mesh files onto the graph in this window. It can be a bit tricky.

Once you see them in the Resources folder right click the mlinktochain-low and select "Bake model Information"


Set the high poly mesh.

Add the 2 bakers on the bottom

Leave the settings for now but at the end you should double the resolution and add some Anti Aliasing.

Make sure you save to the correct folder

Click on Render selected baker to start the baking.


Now setup the graph nodes. Drag the 2 baked textures into the graph and reduce the size to 2048 (or lower) if necessary.

Add 2 outputs for MSK and NRM

Add a channel shufle and plug the AO into input 1. Set green to this input and everything else to the other input.

Create a simple mask. If it gets too complicated then use photoshop. But I usually try to keep it simple.


Right click on the graph in the graph explorer and choose "Compute Outputs"

The right click again and choose "Export outputs as bitmaps"

In the next window make sure you export to the asset folder and not the asset/substance folder.

Choose tga as file format. Then export the 2 textures. - Doneskies!


Baking more than one asset into the same textures

You can bake more than one asset into the same set of textures. This saves setup time and reduces materials in unreal for assets that look similar.

You cannot have them on the same spot though. The assets need to stay at 0,0,0 for exporting them to unreal but you can create instances of them and move them with their high poly versions a bit away from each other. I use round numbers like 100 units up.

Then export the low and high poly models into one fbx file each.

In substance make sure the low poly meshes are all selected in the baker window (top left).


Select all low poly models together and add ONE "unwrap UV" modifier to all of them together. Now you can see all the islands and arrange them if necessary.

There is still some space left here. I wasn't sure what else would fit, like the small buoyes probably. Ideally you don't want to wast too much space but no need to go crazy about it.


Make sure the meshes you export are still on 0,0,0. I use layers to keep organized.



This is the M-Link-Buoye in unreal with the material applied. I'm using functions now so setting up a material is very simple if you have the functions already.


This is the center part of the same asset. The only difference despite the missing buoyes is that the side plates have holes. So I only copied the side plates and modeled some holes into them. Everything else is used from the larger yellow M- Link.

If you look close you can see the detail in the screws from the high poly models. Looks pretty convincing.



I'm now using material functions. Here is the setup of a 3 layer material called M_MLinkToChain.

To use material functions add a new material, name it. Click on an empty area within the material and tick the box "Use Material Attributes" in the details panel. Then right click and type in "MF_3LayersSimple". Connect this to the Material Attributes. Drag your normal map and mask into the material and connect them to Overlay Normal and Mask.

Search for the material functions you want to use. They sit within the TilingMaterial folder. Some you can access by right clicking in the material. Plug them into Layer 1, 2 and 3. (Unused layers need to have a false "Static Bool" plugged into the "Use Layer" input.

You can plug some values into the inputs or you can create a material instance which will reveal preset parameters you can then tweak per instance

Top of page