Skip to content

Texture Layer

Texture Layer
Texture

Texture Layer stacks whole texture sets the way Layer stacks images, with one placement, one opacity, and one order per row. Use it for a screw, a decal, or any asset whose maps have to move, rotate, and scale together. Placing a row moves and reorients every map in it, and the row’s Height decides which surface is on top for every map at once, so there is no Layer, Normal Layer, and Height Layer to keep in sync by hand.

Rows run from Texture 1 at the top of the stack to the highest-numbered Texture at the base, with Layer’s reorder drag, visibility and lock toggles, and on-canvas transform handles: translate, pivot, rotate, scale on either axis, skew, and Mirror X / Mirror Y. Connecting the trailing empty pin adds another row. Each row is named by its set’s Name, with the feeding node’s title in parentheses, so a stack reads as its materials.

  • A plain image on a row is read as a Base Color only set, so a Texture Layer over ordinary color inputs behaves like Layer.
  • An image batch is refused on a row. Use Split to turn it into individual rows first.
  • A library (a batch of sets) on a row fans that row out, one composition per frame. A row fed a single set is shared across every frame, so one base under a library of unique overlays needs no duplication. Two library rows must carry the same number of frames.

There is no background input. An empty canvas is no surface: where nothing is below a row yet, the row simply lands, so the first row you wire in defines the base with no special mode. To layer over a lower material, wire it as the bottom row.

Each row’s channel strip has one line per role its set carries, with an operation and an Affects toggle. Base Color and Emissive use Color Operation (the Layer blend modes), Normal uses Normal Operation, Roughness, Metallic, and Ambient Occlusion use Map Operation, and Height uses Height Operation, with the same controls as Height Layer. The options are listed in the parameters table.

Height has no Affects toggle, since the Height Operation is the row’s one control for it. There is no Opacity line at all: a set’s Opacity is not a map a row blends, it is where the row lands. A row participates wherever its set is opaque, scaled by the row’s Opacity slider, and the stack’s Opacity is worked out from the rows (see Output).

A sparse row inherits. A role a row does not carry passes through from beneath, so a color-plus-height screw over a brick base keeps the brick’s Normal and Roughness under the screw. For a full material replacement, wire the missing maps in explicitly.

When a row has a Height map and its operation is Higher Surface or Lower Surface, that row’s height decides where the row shows, for every map in it at once. Its Normal then composes by Blend Surfaces and every single-value map by plain interpolation, whatever their own combos say; the panel disables those combos and says why. Color always composes by its own blend mode.

Otherwise, a row covers what is below it wherever it is opaque, scaled by its opacity, and every channel composes by its own operation. Replace, Add Detail, and Subtract Detail rows always work this way, as does any row with no Height map.

Every row starts on Higher Surface, so where rows overlap the higher surface shows. Change the Height Operation, right under the row’s Opacity, when a row should cut in below (Lower Surface), sit on top regardless of height (Replace), or add relief (Add Detail, Subtract Detail). The row’s status line says what the current choice does, such as “The higher surface shows where rows overlap” or “No height map: covers the rows below wherever it is opaque”.

These appear on a row whose set has a Height map and whose operation is Higher Surface, Lower Surface, or Replace. Height Scale multiplies the row’s height before it is compared; Height Offset then lifts it, so raising it pulls a screw’s whole surface (color, normal, and roughness together) out of what is beneath, and a negative value sinks it in.

Seam Feather, in Output, softens the seam between Higher Surface or Lower Surface rows across all maps together, as a width in pixels on the finished image. At the default 0 nothing changes. Set it to 1 to antialias crossings into a clean edge instead of a staircase; go higher only when the join should read as soft.

A row’s maps never appear where that row loses, and the winning surface is never changed, so Higher never lowers the result, Lower never raises it, and no groove or ridge appears along the seam. A row’s Transition still sets its one-sided softness in height values, and the two work together.

Texture Layer publishes one set. Its Opacity is the union of the rows’ Opacity: where no row landed the stack is transparent, so a stack of stamps over no background renders in 3D Render and exports as the stamps alone, not as a square. A Texture Layer used as a row inside another Texture Layer behaves as a decal: the rows below show through its transparent pixels. There is no Top Weight output; inside a set, each row’s weight is already applied to every map.

A half-transparent row lands at half strength. A 50% opaque row, a frosted-glass decal say, lays half its color, single-value maps, and relief over the rows below, as Layer treats a half-transparent image, and the wall under it stays opaque. It never punches a hole in the rows below.

A window in a wall is a Texture override after the layer. To make the finished surface see-through somewhere, such as a glass pane in a brick wall, lay the stack out first, then wire the Texture Layer into a Texture node’s Texture input and the window’s mask (white for the wall, gray for the glass, black for an open hole) into its Opacity input, with Opacity From on Opacity Input. Every map passes through, and the mask becomes the set’s Opacity, which is what 3D Render and Export Texture read.

Output Size and Output Anchor work as they do on Layer. Background Height is only what is reported where nothing was stamped, not a ground that rows are compared against.

The node body shows a thumbnail of the composed result’s first map, which is Base Color whenever the stack has one.

Dragging a row’s handles, or scrubbing one of its sliders, redraws the Preview continuously from the map you are looking at, composed at a reduced resolution matched to your zoom, so it keeps up at any stack size. The full-resolution result for every map arrives when you let go. Nothing downstream sees the reduced picture, and nothing is saved from it.

Pins

Texture 1, Texture 2, ...Texture
InputOptionalVariable count
TextureTexture
Output

Output

Output SizeChoice
Default: Deepest Visible Range: Deepest Visible / Max W&H / Topmost Visible

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.

Moving a row never resizes the canvas.

Output AnchorChoice
Default: Center Range: Top-Left / Center

How rows are positioned on the canvas when their dimensions are smaller than the canvas size

Background HeightNumber
Default: 0.000 Range: -1.000–1.000

The height reported where no row covers the canvas.

Rows never compare against it: a Higher Surface or Lower Surface row always wins over empty canvas. Heights below 0 or above 1 need 32-bit (Float) Mode.

Seam Feather (px)Number
Default: 0.00 Range: 0.00–32.00

Fades each Higher Surface or Lower Surface row in over this many pixels from the edge of the region it wins, across all maps together.

0 = hard seam, 1 antialiases it, and larger values give a softer join. A row's Transition still applies on top.

Normal ConventionChoice
Default: OpenGL Range: OpenGL / DirectX

How the composed Normal map is written.

  • OpenGL: green points up. Blender, Unity, Godot and glTF.
  • DirectX: green points down. Unreal and several older pipelines.

Rows in either convention compose correctly; this only sets the output.

RowsData

Per-row state (opacity, visibility, the height operation and its controls, the per-channel operations) plus each row's placement (translate, rotate, scale, mirror, skew, pivot, filter). Edited in the stack

Set NameText

The name of the composed texture set. Exported file names and downstream row labels use it.

Left empty, an export falls back to this node's label.

Row

OpacityNumber
Default: 1.00 Range: 0.00–1.00
Per row, in the stack

How much of this row reaches the result. Fades all of its maps and its Opacity together, wherever the row is opaque

Height OperationChoice
Default: Higher Surface Range: Add Detail / Subtract Detail / Higher Surface / Lower Surface / Replace
Per row, in the stack

How this row's Height combines with the surface below.

  • Add Detail: adds the row's height on top of the surface below.
  • Subtract Detail: cuts the row's height into the surface below.
  • Higher Surface: keeps whichever surface is higher; the row's other maps follow.
  • Lower Surface: keeps whichever surface is lower; the row's other maps follow.
  • Replace: the row's surface replaces the one below wherever it is opaque, by Amount.

A row with no Height map covers the rows below wherever it is opaque.

AmountNumber
Default: 1.00 Range: 0.00–1.00
Per row, in the stack

How much of this row's height effect reaches the result, wherever the row is opaque.

0 = no effect. Under Higher Surface or Lower Surface the other maps follow the height, so at 0 the whole row contributes nothing.

Detail StrengthNumber
Default: 1.000 Range: 0.000–16.000
Per row, in the stack (Add Detail and Subtract Detail)

Scales how tall this row's detail is on the surface below. 1 = as authored, 0 = no change

Detail NeutralChoice
Default: Black Range: Black / Midgray / Custom
Per row, in the stack (Add Detail and Subtract Detail)

The height in this row's source that means "no change".

  • Black: 0. For a Bevel height or any map that starts from nothing.
  • Midgray: exactly 0.5.
  • Custom: the Custom Neutral value below.
Custom NeutralNumber
Default: 0.00000 Range: -16.00000–16.00000
Per row, in the stack (Detail Neutral set to Custom)

The exact source height that means "no change", used when Detail Neutral is set to Custom

Height ScaleNumber
Default: 1.000 Range: 0.000–16.000
Per row, in the stack (Higher, Lower and Replace)

Multiplies this row's source height before it is compared with, or written over, the surface below.

The row's Normal map is not recomputed from the scaled height.

Height OffsetNumber
Default: 0.000 Range: -1.000–1.000
Per row, in the stack (Higher, Lower and Replace)

Lifts or drops this row's whole surface after Height Scale.

Raising it lifts the asset out of the surface below and reveals all of its maps together. The row's Normal map is not recomputed.

TransitionNumber
Default: 0.000 Range: 0.000–16.000
Per row, in the stack (Higher and Lower)

Blends every map across a band this many height units wide where the two surfaces cross.

0 = exact, which leaves a crease at the crossing. The band is measured in height values, not pixels.

Color OperationChoice
Default: Normal Range: Normal / Multiply / Screen / Overlay / Linear Dodge (Add) / Subtract / Difference / Hard Light / Soft Light / Darken / Lighten / Color Dodge / Color Burn / Exclusion / Hue / Saturation / Color / Luminosity
Per row, per color channel, in the stack

How this row's Base Color or Emissive map blends with what is beneath it, using the Layer blend modes.

Set per map, so a row can screen its Emissive while its Base Color stays on Normal.

Normal OperationChoice
Default: Add Detail Range: Add Detail / Blend Surfaces
Per row, in the stack (when the row has a Normal map)

How this row's Normal map combines with the normal beneath it.

  • Add Detail: adds the row's detail onto the surface below, so both show. For a scratch or a fabric weave.
  • Blend Surfaces: the row's normal takes over where it is present. For a separate object sitting on the surface.
Map OperationChoice
Default: Replace Range: Replace / Multiply / Add / Min / Max
Per row, per single-value channel, in the stack

How this row's Roughness, Metallic or Ambient Occlusion map combines with the value beneath it.

  • Replace: the row's value.
  • Multiply: the value below times the row's.
  • Add: the value below plus the row's.
  • Min: the lower of the two.
  • Max: the higher of the two.

Set per map, so one row can replace Roughness while multiplying Ambient Occlusion.

AffectsToggle
Default: true
Per row, per channel, in the stack (not Height)

Whether this row contributes this map.

Turn it off to keep the map beneath, for example to place an asset by its height and color while leaving the roughness below untouched. The row's Opacity always joins the result.

  • Wire the ground material as the bottom row, then drop decals and details above it on Higher Surface.
  • Use a negative Height Offset to sink a rock or a screw into the surface below instead of scaling it down.
  • Give details that only carry Base Color and Height their own row; the base material’s Normal and Roughness show through underneath.
  • For many instances of the same assets, use Scatter, which offers the same Height Operations per instance.
  • Search the node library for “pbr”, “material”, or “texture set”.