Skip to content

Model Textures

Model Textures
Inputs

Model Textures reads the textures a model came with as texture sets, one per material, so the model renders in 3D Render with the textures it was made with. A glTF .glb packs its images inside the file and a .gltf names image files beside it; an OBJ names its maps in the .mtl file beside it; an FBX names the image files its materials use. Each material’s maps are read from the slots the file puts them in, so there is nothing to pack or rename.

A marble chess set rendered with the textures its model file came with: a wooden board, polished white marble and dark pieces, each material its own set
A chess set model on the graph as Model Textures, holding one texture set per material, wired into 3D Render, whose card shows the set rendered with each material's own textures

Drag a textured .glb, .gltf, .obj, or .fbx onto the Node Graph (or paste it, or open it with ArcBrush) and it arrives as two nodes, in one undo step:

Model Textures 1 chair.glb texture All materials 3D Render 1 chair.glb textureenvironmentbackground imagedepth Assign by Material
What a dropped textured model becomes. Model Textures publishes one set per material, named after it, and 3D Render puts each set on the material of the same name.
  • a 3D Render with Mesh set to Custom, the file loaded, and Texture Library set to Assign by Material;
  • a Model Textures reading the same file under All materials, placed to the render’s left and wired into its Texture input.

Every material then reads the set named after it, with no other step. A model counts as textured when at least one of its maps leads to an image ArcBrush can find and read, on the first UV set. A model with no textures, such as an OBJ whose .mtl sets only colors, arrives as a 3D Render alone. See Materials for how 3D Render matches sets to materials.

To add the node by hand, search the node library for “model”, “glb”, “gltf”, “obj”, “mtl”, “fbx”, or “material”.

  • File is a glTF 2.0 model (.gltf or .glb), an OBJ, or an FBX. The arrow beside the field lists the models this project already uses, such as the one its 3D Render reads, so you can pick it without browsing; see Choosing a file the project already uses. A moved model is relinked with every other node that reads it through File > Missing Files….
  • Watch File reloads when the model file, an OBJ’s .mtl, or any texture the node reads changes on disk (checked about once a second).
  • Material picks what the node publishes. All materials (the default) is a library with one set per material, in the file’s order, each named by its material exactly as 3D Render’s Materials table names it, so Assign by Material matches every one. A single material publishes that material alone, as one set. The list fills once a model is loaded.
  • Fit Maps To decides what happens when a material’s maps are not all the same size. Largest (the default) resamples every map to the largest one; Base Color and Smallest resample to that map’s size; Off fails that material, with a line saying so, while the other materials still publish.
  • Fit Filter (shown when Fit Maps To is not Off) is the resampling filter: Nearest, Bilinear (the default), or Lanczos. Normal uses Bilinear when Lanczos is chosen, because Lanczos ringing distorts a surface map.
  • Normal Convention (shown for an OBJ or FBX model) is the green-channel orientation of its normal maps, which neither format records. Auto (the default) reads a hint in the normal map’s file name, such as _dx or _gl, and otherwise reads OpenGL; OpenGL and DirectX set it for every material. A glTF model is always OpenGL, so the row is hidden for it.

Texture paths in model files often point where the model was made: an absolute path on another computer, a path written with backslashes, or a folder the download no longer has. Model Textures reads every texture path the same way for all three formats:

  • A path is read inside the model’s own folder. Backslashes count as folder separators, and a path that leads outside the folder is never opened.
  • When the path leads to no file, the texture is looked for by its file name in the model’s folder and the folders inside it, up to four levels deep, so C:\Users\artist\Desktop\wood.png is found as textures/wood.png. Letter case is ignored for plain English letters, and a file whose case matches exactly wins. The map’s line in the panel says where it was found, as in “found by name in textures/wood.png”.
  • When two files match the name equally well, neither is read and a line says so, since guessing could put the wrong image on the material. Rename one, or fix the path in the model file.
  • The search looks at the first 5,000 files of the folder; past that, a line says the texture was not found in them.

Every map a material uses fills its role in the set: Base Color, Normal, Height, Roughness, Metallic, Ambient Occlusion, Opacity, and Emissive. A glTF’s combined occlusion, roughness, and metallic image fills all three roles from its own channels; in an OBJ or FBX, Roughness, Metallic, and Ambient Occlusion each read the red channel of their image unless an OBJ’s -imfchan names another. A material with no images at all publishes small flat maps of its colors and values.

Each material’s maps are read as the glTF format defines them, with the material’s colors and values applied, so the set looks as the file does in any glTF viewer: the base color and emissive colors tint their maps, the roughness and metallic values scale theirs, the occlusion strength and the normal scale are applied, and the Normal is stored in the OpenGL convention. Opacity follows the material’s alpha mode: an opaque material is fully opaque, a masked one is cut at its cutoff, and a blended one keeps its alpha. PNG and JPEG images are read.

An OBJ’s materials come from the .mtl file its mtllib line names. When that file is not at its path, it is looked for by name in the model’s folder and the folders inside it, as textures are, and a line says where it was found. When the mtllib line is missing or its file cannot be found, Model Textures reads the .mtl with the model’s own name beside it (chair.mtl for chair.obj) and a line says so. Each usemtl name reads the .mtl block of the same name.

.mtl slotRole
map_KdBase Color
map_dOpacity
map_KeEmissive
map_PrRoughness
map_PmMetallic
normNormal
dispHeight
bumpNormal when the file comes from Blender, has a -bm strength, or its file name says normal; otherwise Height
map_KaAmbient Occlusion, only when its file name says so, such as chair_ao.png
  • When two slots claim one role, norm and disp win over bump.
  • A .mtl written by Blender’s OBJ export reads its map_Ns as Roughness and its refl as Metallic, as Blender writes them, unless map_Pr or map_Pm is there too.
  • A map replaces its color: Kd beside map_Kd does not tint the map. A bump -bm strength scales a normal map.

Every image type ArcBrush opens is read, TGA included. When the .mtl cannot be read, the node shows an error saying why; a usemtl name the .mtl has no block for fails that material with a line, while the other materials still publish.

An FBX file’s materials name image files beside the model, often in a .fbm folder next to it, and Model Textures finds them by the path rules above.

  • The Base Color, Normal, Bump, Displacement, Emissive, Opacity, Roughness, Metallic, and Ambient Occlusion slots fill their roles; Bump and the Ambient slot follow their file names as they do for an OBJ.
  • On a Lambert or Phong material a map replaces its color; on a physically based material the map is multiplied by the material’s value, as in glTF.
  • A Lambert or Phong Shininess map is never read as Roughness, except in an FBX written by Blender, whose Shininess map is its roughness. A Glossiness map is read as Roughness, inverted.
  • Textures an FBX file carries inside itself are not read; export the textures as files beside the model.
The Model Textures panel for a chess set: the line 3 materials: 3 with textures, a row per material, and the board's row opened to list each map and the image it came from

A status line under File counts the materials, such as “3 materials: 2 with textures, 1 from its factors”. Under All materials each material has a row of its own, such as “Wood: 4 maps”; open it to see one line per map with the image it came from (and the channel, for a combined image), its size, “found by name in …” for a map found by its file name, and “factor” for a map made from the material’s values alone.

A line in the warning color says when part of a material could not be used. The map then uses the material’s own value instead, and the material still publishes:

  • An image ArcBrush does not read, or a damaged one: “The Base Color image could not be read (…); its factor is used.” A DDS or SVG texture gets a line naming its type.
  • An image whose path leads outside the model’s folder and whose name matches no file inside it.
  • A name two files in the model’s folder share, or a name not found in the first 5,000 files.
  • A map that reads a second UV set: 3D Render maps every texture with the first one.
  • A map no role reads, such as an OBJ’s map_Ks, or one that loses its role to another slot: “The bump image wood_h.png is not read; disp already fills Height.”
  • An FBX texture slot turned off in its material, or a layered or procedural texture (a layered texture reads its first image).
  • “This material offsets or scales its UVs; ArcBrush ignores that.”
  • “This material’s maps clamp or mirror at the edge; ArcBrush repeats them.”

The sets flow through the graph like any texture set. To change one material, pick it in Material and edit its set with the texture nodes before 3D Render, or keep All materials and edit the whole library; see Texture Sets. To paint against each material’s UVs, set UV Layout’s Output to One per Material: its layouts are named after the materials the same way, so each pairs with its material by name.

Pins

TextureTexture
Output

Model

FileText

A glTF 2.0 model (.gltf or .glb), an OBJ (.obj) or an FBX (.fbx). Its materials' own textures are read as texture sets, with the material's factors applied. An OBJ's come from its .mtl file

Watch FileToggle
Default: false

Reload when the model file, an OBJ's .mtl or a texture it reads changes on disk (polls once per second)

MaterialText

Which material to read.

  • All materials: a library with one set per material, named by the material, which 3D Render's Assign by Material matches by name.
  • A material: that material alone, as one set.

Maps

Fit Maps ToChoice
Default: Largest Range: Off / Base Color / Largest / Smallest

What to do when a material's maps are not all the same size.

  • Off: a size mismatch fails that material.
  • 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.
Fit FilterChoice
Default: Bilinear Range: Nearest / Bilinear / Lanczos
When Fit Maps To is not Off

Resampling filter used by Fit Maps To. Bilinear and Lanczos smooth a map as it shrinks; Nearest never filters.

Normal uses Bilinear when Lanczos is chosen, because Lanczos ringing distorts a surface map.

Normal ConventionChoice
Default: Auto Range: Auto / OpenGL (Y+ up) / DirectX (Y+ down)
When File is an OBJ or FBX model

Green-channel orientation of an OBJ or FBX model's Normal maps. glTF models are always OpenGL.

  • Auto: a hint in the file name such as _dx or _gl, else OpenGL.
  • OpenGL (Y+ up): most downloadable assets.
  • DirectX (Y+ down): the other common convention.
  • Drop the model instead of adding the node by hand: the drop wires Model Textures into 3D Render with Assign by Material already set.
  • Read the status line under File first. A material that shows “from its factors” found no image to read.
  • When a texture is not found, put the image anywhere inside the model’s folder; the search by name finds it up to four folders deep.
  • Copy an FBX’s embedded textures out as files beside the model; textures packed inside an FBX are not read.