Texture Folder
Texture Folder imports a folder of map files as a texture set, matching each file to its role by the end of its file name. Point it at a downloaded material and the Base Color, Normal, Roughness, and the rest arrive on one wire, instead of five Image In nodes wired into a Texture node by hand. There is no color space to pick per file: the node decides from each file’s role.
One asset or a whole library
Section titled “One asset or a whole library”Files that share an asset name are one asset. A folder holding twelve assets publishes a batch of twelve texture sets, a library, in name order, each asset keeping its own size and list of roles.
Asset Name narrows that to one: type an asset’s name and the batch is the one asset that matches, so a library and a single asset are the same node with one field filled in. An asset that cannot be read is a failed frame naming its file, and the others still arrive.
For a library, the node body draws one tile per asset with a badge counting its maps, and the panel summary reads “12 assets, 96 maps”, with ”, 1 failed” when one did not import. For a single asset, the body shows a film strip of the imported maps.
Dropping a folder on the canvas
Section titled “Dropping a folder on the canvas”Drag a folder from your file manager onto the graph and ArcBrush reads the file names first. When they look like a texture set, a Which Folder Node? prompt asks, with a headline such as “This folder looks like a texture set” or “This folder looks like a library of 12 texture sets”, and two buttons: Image Folder and Texture Folder. Either way the node lands where you dropped it, with the folder path and label filled in; Escape creates nothing.
A folder that does not read as a texture set (photographs, an image sequence, a single map) creates an Image Folder node without asking. Dropping several folders asks once per folder that matched. Dropping a folder onto this node’s own Folder field never asks.
A folder handed to ArcBrush from the desktop, with the Windows Open in ArcBrush menu entry or on the command line, asks the same question. See Open With.
Source
Section titled “Source”Source is the naming convention the folder was written in: ArcBrush, Substance Painter, Poly Haven, ambientCG, Megascans, glTF, Unity Built-in / URP, Unity HDRP, Unreal, Godot, and your own saved presets, under Yours. It is the same list, and the same presets, as Export Texture’s Destination, so a folder written by one node is read by the other. Each has a page in the Texturing Guides.
Auto is the default, and it says what it found. Every source’s name table is run over the folder and the one matching the most files wins. The line under the combo names it:
Auto detected Poly Haven: 7 of 7 file names match. Pick a source to override.
When no source wins outright, or none recognizes the names, the line says so and the ArcBrush names are used. Picking a source outright replaces the whole name table.
Names shows the source’s table, one editable row per role. Edit a row and an amber dot and a reset arrow appear beside it: that row overrides the source for this node, and the rest still follow the source.
- Reset to Source puts every row back.
- Save as Preset… stores the whole table, the packed files, and their lanes under your own name, under Yours on this node and on Export Texture.
Under the eight role rows, each packed file the source reads has a Packed row of its own (see Packed files), and last comes Ignored: the endings of files that are not maps. Ignored is empty under every built-in source and fills when you pick Not a map under Read as.
A suffix matches a whole word between separators (_, -, ., or a space), never the tail of a name: n matches screw_n.png and never lantern.png. The ArcBrush default suffixes for each role are in the parameters table below.
A name ending in two roles is read from the rest of the folder. _metal_rough can mean a file holding both maps, or the Roughness map of an asset whose name ends in “metal”. brushed_metal_rough.png beside brushed_metal_basecolor.png is the Roughness of brushed_metal, because that asset is already named. The same file on its own is listed as Packed.
Packed files
Section titled “Packed files”Each file the source reads by a recipe rather than by name alone has a Packed row in Names: the name endings that file answers to, editable like a role row with the same amber dot and reset arrow, and a line under it spelling out its lanes, such as arm = R ao, G rough, B metal.
Packed files are unpacked by a declared recipe or by a name that spells its lanes, never by guessing. Under a source that declares a packed file, a matching file is taken apart into its roles, each listed as Unpacked with its file and lane, such as ..._arm_2k.png (B).
A file whose ending spells its lanes unpacks in that order under any source with no row of that name, ArcBrush included:
| Ending | Red | Green | Blue |
|---|---|---|---|
orm, arm, ormmap, OcclusionRoughnessMetallic | Ambient Occlusion | Roughness | Metallic |
rma | Roughness | Metallic | Ambient Occlusion |
Each of those lanes says where the order came from: “Lanes read from the file name: …”. A source’s own row of that name, or a Read as pick, always wins over the spelling. A glTF-style mask, or any other packed name that spells nothing, is reported as Packed and left alone until a source declares it or you pick Read as. A file’s pixels never decide which role it holds.
-
A role’s own file beats a packed lane. When a download ships
armbesideroughandao, the separate files are read and the duplicated lanes are listed as Skipped. To read a lane anyway, open its file in the Files section and pick the “read this lane instead” item in that lane’s row. -
An empty Ambient Occlusion lane is dropped. A declared occlusion lane that is zero everywhere carries no occlusion, and importing it would light the material as fully shadowed. It is skipped with the reason stated. A Metallic or Roughness lane of zero is a real value and is always imported.
-
Two files for one role never stop the import. Downloads often carry both, a Bump beside a Displacement or a PNG beside an EXR, so one file is read and every other is listed as Skipped, naming the file read instead. The order is fixed:
- A normal map whose
_glor_dxhint disagrees with Normal Convention always yields to one that does not, so of..._nor_gland..._nor_dxthe one matching the convention is read. - The ending listed first in that role’s Names row wins. The default Height row lists
displacementbeforebump, so a Displacement is read over a Bump. - Then the container: EXR, TIFF, PNG, any other format, JPEG.
- Then the file name.
To read the other file, pick Use this file under its Read as. Two packed files feeding one role follow the same order, by the packed row listed first.
- A normal map whose
How each role is read
Section titled “How each role is read”- Base Color and Emissive go through the input color handling like any color image.
- Normal is always read as packed directions, never as color. Normal Convention’s Auto item says where its answer came from, such as
Auto (OpenGL, from the file name)for a_glor_dxhint, orAuto (DirectX, from the source). A hint in the file name beats the source’s declaration. - Height and the single-value roles are literal: the red channel is read as raw values whether the file is grayscale or RGB, so nothing is decoded as sRGB that was not color to begin with.
The cutout comes back where the source says it is. An Opacity file, an Opacity lane of a packed file, or a declared alpha lane all become the set’s one Opacity. Most sources declare their color file’s alpha as a place the cutout can travel; import reads it back and lists it under Opacity with the carrier’s (A) lane named. An Opacity file in the folder wins over the alpha, and with neither the set is fully opaque. An alpha no source declares is never read as Opacity, so a downloaded diffuse with a stray alpha is unaffected.
A 16-bit PNG or TIFF map imports at full precision in a 32-bit (Float) document. In an 8-bit document it loads at 8 bits and the node notes “16-bit file shown at 8-bit”.
A map saved as a PSD or PSB reads its flattened picture, like any other map file; a PSD the node cannot read shows the file and its map with the reason, such as a file saved without Maximize Compatibility. A color map with an embedded color profile is converted through it, while Normal, Height, and the single-value roles are read as the raw values they hold. See PSD Files & Color Profiles.
Size mismatches
Section titled “Size mismatches”Fit Maps To repairs maps of different sizes by resampling to the Base Color, the Largest, or the Smallest map. Left Off, a mismatch is an error naming the roles and their sizes.
What the panel reports
Section titled “What the panel reports”The Parameters panel lists what it matched: one row per file for a single asset, one row per asset for a library, with each map’s role, size, precision, and status.
| Status | Meaning |
|---|---|
| Imported | A file of its own, or the declared Opacity alpha |
| Unpacked | A lane of a packed file, with the lane named |
| Skipped | A second file for a role that already has one, a lane displaced by a role’s own file, an empty Ambient Occlusion lane, or an Opacity alpha with no cutout in it |
| Packed | A packed file no source declared and no name spells |
| Not used | A map a texture set has no role for, such as Cavity or Specular, or a glossiness file beside the asset’s own Roughness |
| Unrecognized | A file whose name carries no recognized ending |
| Ignored | A file you marked Not a map with Read as |
| Repaired | A size mismatch that Fit Maps To fixed |
Read as
Section titled “Read as”A file the names read wrong, or not at all, is fixed from the list itself. Each file’s row ends in a Read as combo showing what the file is read as now, or “Read as…” when it is read as nothing. Its items are the eight roles, four packed readings, and Not a map:
- A role adds the file’s ending to that role’s row in Names and takes it off any other row that held it.
- Packed (ORM) and Packed (ARM) read red as Ambient Occlusion, green as Roughness, and blue as Metallic; Packed (RMA) reads red as Roughness, green as Metallic, and blue as Ambient Occlusion. Each adds a Packed row named by the file’s ending and opens that file in the Files section so you see its lanes. Packed (custom) adds the row with every lane Unused, for you to fill in under Files.
- Not a map adds the ending to the Ignored row. The file then reads Ignored and stays out of the set.
- Use this file, listed first on a Skipped file that lost to another file of the same role, moves its ending to the front of that role’s row in Names, so it is the file read and the other is skipped. Only a file whose ending differs from the one read offers it.
A pick changes the names, not a note on one file, so it fixes every asset in a library that names its files the same way. Each pick is one undo step, Save as Preset… keeps it, ignore list included, and Reset to Source takes it back. A source you picked by name reads Custom afterward, as after any hand edit; Auto stays Auto.
In Files, a packed row that matched no file says so and what to do: “No file matches orm. Add its name in Names, or pick Read as on the file.” Add Packed File adds an empty packed row to fill in yourself. A packed row added that way or by Read as has a remove button beside its name; a row the source declares has none, since the source would only declare it again.
Parameters
Section titled “Parameters”Pins
Asset
Folder of texture map files to import as a texture set. A folder holding several assets imports as a batch, one set per asset name
Which pipeline wrote this folder. A source sets the file names and the packed files this node looks for, and picking one rewrites the Names table below.
Auto uses the source that matches the most file names, or the ArcBrush names when none wins; the line under the combo says what it found. Editing any name below switches the source to Custom, which still imports.
Which asset in the folder to import, by the part of the file name in front of the map suffix. Leave it empty to import every asset.
Naming one asset of a folder that holds several still outputs a batch, so downstream wiring does not change.
Maps
Green-channel orientation of the imported Normal map.
- Auto: a hint in the file name such as
_dxor_gl, else what the detected source declares, else OpenGL. - OpenGL (Y+ up): the Normal Map node's output and most downloadable assets.
- DirectX (Y+ down): the other common convention.
What to do when the asset's maps are not all the same size.
- Off: a size mismatch is an error.
- Base Color: resample every map to Base Color's size.
- Largest: resample every map to the largest one.
- Smallest: resample every map to the smallest one.
Resampling filter used by Fit Maps To. Bilinear and Lanczos smooth a map as it shrinks; Nearest never filters.
Normal and Height use Bilinear when Lanczos is chosen, because Lanczos ringing distorts a surface map.
How an EXR Base Color or Emissive map stores color where it is partly transparent. Data maps are always read as stored.
- Associated: color is already multiplied by alpha, the OpenEXR convention and what ArcBrush exports.
- Straight: color is stored as is. Older documents read EXR files this way.
Names
Comma-separated name endings that mark a Base Color map.
An ending matches a whole word between separators, so col matches wood_col.png and never protocol.png.
Comma-separated name endings that mark a Normal map
Comma-separated name endings that mark a Roughness map.
Glossiness and smoothness maps are refused by name, not inverted.
Comma-separated name endings that mark a Metallic map
Comma-separated name endings that mark an Ambient Occlusion map
Comma-separated name endings that mark a Height map
Comma-separated name endings that mark an Opacity map.
mask is left out by default because a file ending in _mask reads as a packed file. Add it here if your opacity files use that ending.
Comma-separated name endings that mark an Emissive map
The packed files this source writes, one row per file, and which map each channel holds. A matching file is unpacked into those maps, with any declared inversion undone.
A packed file's name field takes comma-separated name endings, like a map's. Read as on a file adds one, and Add Packed File starts an empty row whose lanes you pick under Files.
A map that also has its own file in the folder is read from that file instead. A color file whose alpha is the asset's cutout is listed here too.
Comma-separated name endings of files that are not maps. A matching file is listed as Ignored and never read.
Read as on a file in the list above writes these rows: a map adds the file's ending to that map's row, a packed pick adds a packed file, and Not a map adds it here. Every asset whose files end the same way is read the same way.
Use this file on a Skipped file puts its ending first in its map's row, so it is read instead of the other file.
Usage Tips
Section titled “Usage Tips”- Leave Source on Auto first and read the line under it. Pick a source outright only when Auto could not tell.
- Point the node at a folder of many assets to get a library, then feed it to Scatter, Texture Layer, or Export Texture.
- Wire the output into 3D Render’s Texture input to check the import on a mesh.
- Search the node library for “pbr”, “material”, “texture set”, or “library”.