Create and Use Normals inside Substance Painter
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"
Three things happen when you add a Scene.
- A square backplate
- A orthographic camera above the plane pointing at it.
- The render resolution is set to 2048x2048 pixels
For basic usage you only need to know three settings.
- The backplate control. Selectibility, viewport visibility, render visibility (toggle this off for transparent background)
- Export path. Where the texture will be saved.
- 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.
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 ❶
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.
Method2: Alpha map -> Normal map with Materialize
Materialize is a standalone software that can generate various texture maps with just a color image.
The maps are then imported into materialize.
Import your diffuse map into the software by clicking on the
O under the Diffuse Map.
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.
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.
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.
- The edge is blurry
- The stamp is stretched
The solutions are quite simple:
- Change to a hard edge brush
- 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.
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.