Normal Layer
Normal Layer stacks tangent-space normal maps, each with its own placement, into one complete normal map. Use it for trimsheet work: pores over a bevel, a screw dropped onto brushed metal, or any decal whose directions must turn when it is placed. Wire in a base normal (from Bevel, Normal Map, or an imported map) and add rows above it. The stack composes bottom to top into one Normal output that Relight uses directly and a Texture node carries into 3D Render. To stack whole materials, where every map follows one placement, use Texture Layer instead.
The stack works like Layer and Height Layer: the same drag to reorder, visibility and lock toggles, on-canvas gizmo, and trailing empty pin for a new row. The difference: Layer moves pixels, while Normal Layer moves pixels and turns the directions they carry, so a rotated or mirrored row still points the right way.
Add Detail and Blend Surfaces
Section titled “Add Detail and Blend Surfaces”Every row composes against a flat background pointing straight up, so the first row is treated like any other.
- Add Detail keeps the surface accumulated below and rides this row’s relief on top. Use it for pores, scratches, and engraving over an authored base.
- Blend Surfaces replaces the surface below with this row’s, mixed in by coverage and Amount; a flat row deliberately flattens what was under it. Use it where one material stops and another begins, such as a screw on metal.
Each row’s Format is the green-channel convention its source was authored in. Every row is converted to one common frame before composing, so a stack can mix OpenGL and DirectX maps freely. Output Format only re-encodes the finished normal.
Placement turns the directions
Section titled “Placement turns the directions”Each row gets translation, pivot, rotation, scale on either axis, skew, and independent Mirror X / Mirror Y. Placing a row reorients its directions as well as moving its pixels: the green channel flips with Mirror Y, the directions turn with rotation, and a stretched or skewed row leans by the ratio between its two axes, so a placed decal keeps pointing the right way after it lands.
Rows resample with Nearest or Linear. Lanczos is not offered, because its ringing would push a filtered normal off its proper length.
Coverage
Section titled “Coverage”A row’s alpha is its coverage and nothing else. There is no per-row mask input: to narrow a row’s footprint, attach one upstream with Mask Apply.
The output is always a complete surface, fully opaque with normalized directions, never a transparent stamp, because a partly transparent normal would have its coverage applied again by whatever reads it next.
Height and normal together
Section titled “Height and normal together”A surface’s normal can come from two places, and Normal Layer does not keep them in sync for you.
- The height leads. Build the height in Height Layer and derive the normal from its Height output with Normal Map, when the relief is what you are authoring.
- An authored normal leads. Compose the normal here, independent of any height, for a decal whose normal was hand-painted or baked and never matched a literal height.
Both stacks share the same placement controls, so a height piece and its authored normal line up when placed with matching values; move a row in one and move its partner in the other by hand. Height Layer’s Top Weight output can drive a Blend Surfaces row here so both stacks agree on which piece is on top.
Loading and writing normal map files
Section titled “Loading and writing normal map files”When you load a normal map with Image In or Image Folder, set Input Color Space to Normal Map, the entry at the top of the list. A normal map holds packed directions rather than light, and this entry carries the values through so every node that reads normals reads them correctly. It matters most for a float OpenEXR normal in a 32-bit (Float) document.
The simplest way to write the result is to wire it into a Texture node and use Export Texture, which always writes a Normal as packed data in the convention you choose.
To write it with Export Image instead, set Color Handling to Convert to color space and Target Color Space to sRGB Encoded Rec.709 (sRGB), so the view, exposure, and look are never baked into the map. For a float file, set the bit depth to 32-bit float, since OpenEXR’s 16-bit half default quantizes. Read the file back as data in the receiving tool, not as a color image. If the normal points below the surface anywhere, check that the target keeps it: some renderers rebuild the blue channel on import.
Parameters
Section titled “Parameters”Pins
Output
Which rows set the canvas size.
- Deepest Visible: the lowest visible row.
- Max W&H: the largest width and height across visible rows.
- Topmost Visible: the highest visible row.
How rows are positioned on the canvas when their dimensions are smaller than the canvas size
Green-channel convention the finished normal is written in.
- OpenGL: +Y is up. Blender, Unity, Godot and glTF.
- DirectX: +Y is down. Unreal and 3ds Max.
Rows can mix conventions; each is converted from its own Format first.
Per-row state (operation, amount, format, visibility) plus each row's placement (translate, rotate, scale, mirror, skew, pivot, filter). Edited in the stack
Row
How this row combines with the surface below.
- Add Detail: adds the row's relief onto the surface below, whose shape is kept.
- Blend Surfaces: the row's surface replaces the one below, so a flat row flattens the relief.
How much of this row's effect reaches the result, on top of its alpha coverage.
0 = no effect. Under Add Detail it fades the detail toward flat; under Blend Surfaces it sets how far the surface is replaced.
Green-channel convention of the map wired into this row.
- OpenGL: +Y is up.
- DirectX: +Y is down.
Usage Tips
Section titled “Usage Tips”- Pick Output Format for where the map is going. The Texturing Guides list the convention each destination expects: OpenGL for Unity, Godot, and glTF, DirectX for Unreal.
- Compose in a 32-bit (Float) document, the default for new projects, when a stack accumulates many rows of detail. An 8-bit document quantizes each row on the way in and the result on the way out.
- Where opposing directions cancel out during resampling, the pixel falls back to flat and the node reports a single warning.
- Search the node library for “normal blend”, “tangent normal”, or “decal”.