Skip to content

UV Layout

UV Layout
Generator

Draws a 3D model’s UV layout as a texture-sized image to paint against, with its polygon edges, islands, overlaps, and mirrored halves.

A lantern's UV layout drawn by UV Layout over the lantern's own color texture, every polygon edge a white line over the brass it paints

A model’s UVs decide where every texel of its texture lands on the surface. UV Layout shows them flat: paint against it, check a model’s unwrap before you texture it, or export it as a template. Its partner UV Grid shows the same UVs on the model itself, in 3D Render.

The quickest start is the Add UV Layout button on 3D Render, which builds a UV Layout for the model it shows and wires a UV Grid onto both (see Add UV Layout).

Choose a model in File: a glTF 2.0 (.gltf, .glb), OBJ (.obj), or FBX (.fbx) file, the same formats 3D Render reads. You can also drop a model file on the File field. The node draws the model’s first UV set, the one 3D Render maps the texture with, so a line on the layout lands exactly on that edge of the model in the render. Turn on Watch File to redraw when the model changes on disk.

The layout uses the same convention as 3D Render and every ArcBrush image: UV (0, 0) is the top-left corner. Neither node has a flip setting, because a flip could only make the lines disagree with where the texture lands.

  • Materials lists the model’s materials, one row each, as on 3D Render. Click a row’s eye to hide that material in the layout, and again to show it. The same eyes show the same triangles on both nodes. An eye drawn half open means only some of the meshes using that material are shown; one click shows them all.
  • Outside 0 to 1 decides what happens to triangles whose UVs leave the 0 to 1 square. Wrap (the default) repeats them into the square, where the repeating texture puts them on the model. Clip cuts them off at the square’s edge.
A chess set's UV layout two ways: the Image output, its polygon edges in white on black, beside the Islands output, every island a white shape on black
  • Image is the layout itself, drawn over the Background input when one is wired, else over the Background Color (transparent by default).
  • Islands is a single-channel image of exactly what the shown geometry covers in UV space: white inside the islands, black outside, with anti-aliased edges.

Output decides what the node publishes. One Image (the default) is one layout of everything shown; One per Material is a batch with one layout per shown material, and Islands follows with one mask each (see One per Material).

Select the node and the Preview’s tool row starts with Image and Islands view buttons, so you can look at either output without rewiring.

Width and Height set the output size (2048 by 2048 by default, up to 16384). A wired Background sets the size instead, and the two rows hide, along with Background Color, since the layout is drawn on the background.

A chess set's UV layout with Fill on Per Island and Show Overlaps and Show Mirrored on: each island filled in its own hue under white edges, with overlapping and mirrored islands tinted
  • Lines: Show picks the edges. All Edges (the default) draws every polygon edge. Island Outlines draws only each island’s border, which is where the seams are. None draws no lines and hides the line rows. Width is the line width in pixels (1.5 by default, anti-aliased) and Color is white by default.
  • In the Fill section, Mode colors the islands. None (the default) leaves them unfilled, Flat fills them with one Fill Color (a clear blue by default); Per Island gives every island its own hue, the same each time the model is drawn; Per Material gives every material its own hue the same way, so you can see which islands belong to which material. Fill Opacity (0.35 by default) sets how strongly the fill covers what is under it.
  • Show Overlaps tints geometry stacked on other geometry: red where it stacks by accident, amber where a mirrored half lies on its original, the usual way to share one half of a texture between two sides.
  • Show Mirrored tints violet each island whose UVs are mirrored, so the texture reads backward on it. An island counts as mirrored when its UVs wind the other way from the model’s front faces.

The tints sit under the lines, so the edges stay readable.

All Edges draws polygon outlines: a quad shows its four edges and an n-gon its outline, never the diagonals the model is split into for rendering. OBJ and FBX files keep their polygons, so their layouts read as the model was built. A glTF file stores triangles only, so every triangle edge shows, and the status line says so: “glTF stores triangles only, so every triangle edge shows.” Island Outlines looks the same for every format.

The lines under File describe the model:

  • The triangle and island counts, such as “12,480 triangles, 36 islands”, or “No UVs in this model”.
  • How many materials are shown, such as “2 of 5 materials shown”, when the file has more than one.
  • The share of triangles outside 0 to 1, such as “8% of triangles lie outside 0 to 1”, with “and are cut off” under Clip.
  • With Show Overlaps on, how many islands overlap by accident and how many mirrored islands are stacked on their originals, or “No islands overlap”.
  • For a UDIM model, where every island sits inside one whole tile and more than one tile is used, the tiles it spans: “UVs span 4 UDIM tiles (1001 to 1004); UDIM tiles are drawn on top of each other”. ArcBrush textures one 0 to 1 square, so the tiles land on the same square of the layout and of the render.
  • Notes from the model loader, the same ones 3D Render shows.

The layout is texture-sized, so it lines up pixel for pixel with a texture painted at the same size. Two ways to use it:

  • Draw the layout over your texture. Wire your texture (a Paint node, an Image In, or the end of a texture chain) into UV Layout’s Background. The layout takes the texture’s size and draws its lines over it, so you see at once whether a painted feature sits on the island it was meant for. Keep 3D Render’s Texture wired from the texture itself, not from the layout.
  • Start from the layout. Export the layout as a template and paint over it in another app, or wire it as the top layer of a Layer stack while you work and hide that layer before you export.
The texture you paint goes into Background, so the lines are drawn over it at its size.

Texture filtering and mipmaps read a little past each island’s edge, so paint needs to run past it too. The Islands output is the exact coverage of the islands: wire it into Mask Refine and set Erode / Dilate to a negative value to grow it by that many pixels. The grown mask shows how far past each island to paint, or masks a fill that bleeds the texture’s edge colors outward.

Islands into Mask Refine with a negative Erode / Dilate grows each island by that many pixels.

If the painted features sit mirrored top to bottom against the lines, the texture was authored for an app that counts UVs from the bottom-left. Flip that image with a Mirror node set to Vertical before it reaches 3D Render; the lines then sit on the features and the render matches.

Do not wire a transparent layout into 3D Render’s Texture

Section titled “Do not wire a transparent layout into 3D Render’s Texture”

3D Render reads a single image’s alpha as the surface’s opacity. The layout is transparent everywhere but its lines and fill by default, so wired straight into 3D Render’s Texture it would cut the model away and leave only a wireframe. To see the layout on the model, give it something opaque underneath first: an opaque Background Color, a UV Grid, or your texture on its Background input. Add UV Layout never makes that wire.

UV Layout on One per Material: the Preview's All view showing one layout for each of a chess set's three materials, the white pieces, the board and the black pieces, each named after its material

Set Output to One per Material to paint each material of a model on its own texture. The node then publishes a batch with one layout for each shown material, named after it, and Islands follows with one mask per material under the same names. A material hidden with its eye gets no layout, and a model with one material gives a batch of one, so what the node publishes follows the Materials list, not the file.

The layouts are named as 3D Render’s Materials table and Model Textures name the materials, so a batch painted over them, wired into 3D Render’s Texture under Assign by Material, puts each painting on its own material. As with one layout, give the layouts an opaque background before they reach 3D Render (see above).

Background under One per Material:

  • One image backs every layout.
  • A batch pairs with the shown materials by name first: an image named after a material, in any letter case, backs that material’s layout. The images left over then pair with the materials left over in the Materials list’s order, when there are as many of each. The Base Color batch that Split Texture takes from a Model Textures library, or a batch of images you named after the materials, pairs by name; a batch with other names pairs in order.
  • A line under the status lines lists every pairing, such as “Wood: Wood, Metal: crate_metal (in order)”, so a wrong pair shows at once.
  • When a material is left with no image, the node stops with an error naming it, such as “3 materials are shown but the background has 2 images, and Glass has no image to match by name.”

UV Layout, 3D Render, and Model Textures each keep their own File row. Add UV Layout fills the new layout’s File from 3D Render for you, and you can also drop a model file on the File field. On a UV Layout or 3D Render you added by hand, click the arrow beside the File field and pick the model from In this document, the models this project already uses; the path is copied exactly as the other node stores it (see Choosing a file the project already uses). If the model later moves, one Locate… in File > Missing Files… relinks every node that reads it (Missing Files).

When both should follow one place, use a token in both rows. {project_dir}/models/chair.glb resolves against the folder the saved .arcb file is in, on any machine, and a variable you define ({MODELS}/chair.glb) moves both nodes when you change it once.

Pins

BackgroundImage
InputOptional
ImageImage
Output
IslandsMask
Output

Model

FileText

A glTF 2.0 (.gltf, .glb), OBJ (.obj) or FBX (.fbx) model. Its first UV set is drawn, the one 3D Render maps the texture with

Watch FileToggle
Default: false

Reload when the model file changes on disk (polls once per second)

SubmeshesChoice
Default: All Geometry Range: All Geometry / Selected Materials

What to draw when the file splits its geometry across several materials.

  • All Geometry: the whole model.
  • Selected Materials: only the materials whose eye is open in the Materials table, the same ones 3D Render shows for the same eyes.

Set by the Materials table's eyes.

Material GroupsData
Submeshes = Selected Materials

The material groups Selected Materials draws, as the loader names them. Edit through the Materials table's eyes

Mapping

Outside 0 to 1Choice
Default: Wrap Range: Wrap / Clip

Where triangles with UVs outside the 0 to 1 square are drawn.

  • Wrap: repeated into the square, where the repeating texture puts them on the model.
  • Clip: cut off at the square's edge.

Output

Width (px)Integer
Default: 2048 Range: 16–16384
Background is not wired

Output width. A wired background sets the size instead

Height (px)Integer
Default: 2048 Range: 16–16384
Background is not wired

Output height. A wired background sets the size instead

Background ColorColor (RGBA)
Default: rgba(0, 0, 0, 0)
Background is not wired

The color under the layout, transparent by default. A wired background is drawn on instead

OutputChoice
Default: One Image Range: One Image / One per Material

What the node publishes.

  • One Image: one layout of everything shown.
  • One per Material: a batch with one layout per shown material, each named after its material, so a painted batch fills the matching materials in 3D Render. A batch on Background pairs with the materials by name, then in order.

Lines

ShowChoice
Default: All Edges Range: All Edges / Island Outlines / None

Which edges are drawn.

  • All Edges: every polygon edge. A glTF model stores triangles only, so it shows every triangle edge.
  • Island Outlines: only each island's border, which is where the seams are.
  • None: no lines.
Width (px)Number
Default: 1.50 Range: 0.25–16.00
Show ≠ None

Line width in pixels, anti-aliased

ColorColor (RGB)
Default: rgb(255, 255, 255)
Show ≠ None

Line color

Fill

ModeChoice
Default: None Range: None / Flat / Per Island / Per Material

How the islands are filled.

  • None: no fill.
  • Flat: one color.
  • Per Island: a different hue for each island, the same every time the model is drawn.
  • Per Material: a different hue for each material, the same every time the model is drawn.
Fill ColorColor (RGB)
Default: rgb(77, 163, 255)
Mode = Flat

The fill color

Fill OpacityNumber
Default: 0.35 Range: 0.00–1.00
Mode ≠ None

How strongly the fill covers what is under it

Checks

Show OverlapsToggle
Default: false

Tints geometry stacked on other geometry: red where it stacks by accident, amber where a mirrored half lies on its original

Show MirroredToggle
Default: false

Tints violet each island whose UVs are mirrored, so the texture reads backward on it

  • Turn on Show Overlaps and Show Mirrored before you start painting, so a stacked or mirrored island is no surprise.
  • Use Island Outlines when you only need the seams; All Edges on a dense model can bury the picture under lines.
  • Per Island fill tells neighboring islands apart at a glance, even where their outlines touch.
  • When 3D Render’s UV Tiling or UV Aspect is not 1, the render repeats or stretches the texture across the UVs; the layout always shows one repeat.