3D ARTIST

MODELING - TEXTURING

3D

PORTFOLIO

Create and Use Normals inside Substance Painter

Substance Painter - Pipeline

Updated 2023-02-10: Add captions; Clarify which normals are which


There are two workflows I use.

Method1: Baking decal with blender

GrabDoc is a free addon that simplifies the baking process.

The addon utilized blender's baker so the same limitation applies here.

Bring out the Addon panel by pressing N and click on "Setup Scene"

Addon toolbar
Addon toolbar
An orthographic camera above the backing plane, the camera is pointing at the plane
An orthographic camera above the backing plane, the camera is pointing at the plane
Objects created when New Scene is created.
Objects created when New Scene is created.

Three things happen when you add a Scene.

  1. A square backplate
  2. A orthographic camera above the plane pointing at it.
  3. The render resolution is set to 2048x2048 pixels

For basic usage you only need to know three settings.

  1. The backplate control. Selectibility, viewport visibility, render visibility (toggle this off for transparent background)
  2. Export path. Where the texture will be saved.
  3. Three columns
    • Checkbox: Check the map you want to be exported
    • Long button with text: Preview bake within viewport
    • Short button: Preview in a pop up window.

Example 1: Screw

Here I modeled a very simple screw like object. There is a round plane underneath the plane with a groove. They are not connected. Since normal map doesn't store height information, the edge where the two plane join will be seamless as long as they are facing the same direction.

Wireframe View
Wireframe View
Solid View
Solid View

In this case I only needed the normal map. So I unckecked all the other maps and hit Export Map. Remember to uncheck render under ❶

Exported Normal map
Exported Normal map
Normal map being used as a stamp inside Substance Painter
Normal map being used as a stamp inside Substance Painter

Remember blender uses and bakes OpenGL normal maps. This will be important later.

Example 2: Ornamental Curve

Just a bunch of curves with a bevel profile on them. I also baked an alpha for masking.

An ornamental Normal Map
An ornamental Normal Map
The above map being painted onto the side of a wood table
The above map being painted onto the side of a wood table

Method2: Alpha map -> Normal map with Materialize

Materialize is a standalone software that can generate various texture maps with just a color image.

Several alpha textures are created in affinity designer
Several alpha textures are created in affinity designer

The maps are then imported into materialize.

Import your diffuse map into the software by clicking on the O under the Diffuse Map.

One of the alpha inside materialize
One of the alpha inside materialize

Create a Height Map using the Create button under the height Map.

Using the sliders to adjust the height map look. Area in white will appear indented. If embossed look is desired, adjust the contrast so the height map is inverted.

Side by side preview is provided
Side by side preview is provided
Messing with the slider to get a desired look
Messing with the slider to get a desired look

If the alpha map is aliased at the edge it is a good idea to make the heightmap slightly blurry so the final normal map wouldn't be as pixelated on the edge when applied.

Click on the S to save the map.

A normal map created from the heightmap
A normal map created from the heightmap

Now let's import the map into substance. Create a new paint layer, turn off all the channels except the normal channel.

Unfortunately there are a couple of problems.

  1. The edge is blurry
  2. The stamp is stretched

The solutions are quite simple:

  1. Change to a hard edge brush
  2. Modify the texture to a square texture

The normal map produced by Materilize follows the DirectX convention and will work in Substance Painter without any changes.

Although substance painter can export either OpenGL or DirectX normal maps, the incoming normal maps still need to be in DirectX format otherwise the viewport won't show the shading correctly when you texturing. If you need to convert one format to the other, invert the green channel of the normal map.

After exporting normals from Materilize, be sure to pad the map with transparency until the image is square. In Substance Painter, Rectangular normal maps will be distorted to fit a square. When painting the normal, use a brush with hard edge.

Substance Painter Viewport, light coming from the top, the bottom DirectX normal has correct lighting
Substance Painter Viewport, light coming from the top, the bottom DirectX normal has correct lighting
Blender viewport, light coming from the right, the top OpenGL normal has the correct Lighitng
Blender viewport, light coming from the right, the top OpenGL normal has the correct Lighitng
OpenGL normal
OpenGL normal
DirectX normal
DirectX normal

Here is two screenshots of the viewport of substance painter and the viewport of blender. The lights are coming from the north. Top row opengl maps, bottom row directx maps.

Recall the flathead decal I have shown earlier. If you paid attention you might have realized something isn't quite right.

Incorrect Lighting, using OpenGL normal
Incorrect Lighting, using OpenGL normal
Correct Lighting, using DirectX normal
Correct Lighting, using DirectX normal