Group PBR textures as a material

Turn a pile of loose texture maps into one material

Five thumbnails, one material

Most PBR texture sets arrive as a pile of loose files: rock_albedo.png, rock_normal.png, rock_roughness.png and friends. Dropped into the grid, that's five near-identical thumbnails for what is really one thing.

Group as Material folds those maps into a single library item. It previews as a lit sphere, drags or exports as one material, and takes up one tile instead of five. It's built on variants, so nothing on disk is moved or copied when you group.

Creating a material

  1. Select two or more texture images in the grid or list.
  2. Right-click the texture you want as the material's face. This is usually the albedo (base colour).
  3. Choose Group as > Material. The menu shows how many assets you've selected, for example Group 4 as.

The texture you right-clicked becomes the material's main. The rest fold in behind it and are hidden from the grid.

The Material option only appears when:

  • every selected asset is an image (a texture or sprite), and
  • none of the selected assets already belong to a group.

If the selection includes something else, like a model or an audio file, you'll only see Variants.

Supported map formats

png, jpg, jpeg, tga, targa, bmp, tif, tiff, webp, dds, exr, hdr

DDS, EXR and HDR maps can join a material and are exported untouched, even though they can't be drawn on the preview sphere.

Automatic channel detection

When you create a material, AssetHoard reads each file name and works out which PBR channel it drives. The name is split on anything that isn't a letter or a digit, so Rock_Normal-01 becomes rock, normal and 01. Channels are checked from top to bottom, and the first keyword that matches wins.

ChannelKeywords
Packed (ORM)orm, arm, rma, mra, mr, metallicroughness, roughnessmetallic, metalrough
Normalnormal, normals, nrm, nor, n, normalmap
Roughnessroughness, rough, r, roughnessmap
Metallicmetallic, metal, metalness, m, metallicmap
AOao, occlusion, ambientocclusion, aomap
Heightheight, displacement, disp, bump, h, heightmap
Emissiveemissive, emission, emit, e, emissivemap
Opacityopacity, alpha, transparency, a
Albedodiffuse, albedo, basecolor, color, colour, col, d, diffusemap, albedomap

Packed is checked first, so an ORM or metallic-roughness map isn't mislabelled by the metal or rough in its name. Albedo is checked last, because its keywords are the most generic.

A file whose name matches nothing is marked Unassigned.

Joined words aren't split. RockNormal.png won't be detected, but Rock_Normal.png will. If your maps use camel case, set the channels by hand (see below).

Fixing channels

Detection is a starting point. To correct it:

  1. Select the material. The details panel shows a Material section listing each map with its swatch, channel and file name.
  2. Click the pencil icon to open the large preview.
  3. Pick the right channel from each map's dropdown. The sphere updates as you go.

Your choices stick. Adding more maps later only detects channels for the new ones, and never overwrites a channel you've set by hand.

If two maps share a channel, a warning icon appears on both rows. Only one of them is used on the preview sphere.

How a material looks in the library

  • Grid card. The main's card shows the assembled material on a sphere, instead of the flat albedo thumbnail.
  • Fanned out. Expand the group and each map is tagged with a channel pill: Albedo, Normal, Roughness and so on.
  • Preview. The details panel and large preview show an interactive, lit sphere built from all the channels.
  • No sprite slicing. Material maps never offer sprite sheet slicing, since a normal map isn't a sprite sheet.

A packed ORM map is approximated on the preview sphere by using it for AO, roughness and metallic together, following the glTF convention of red, green and blue.

Adding and removing maps

  • Add. Drag another texture onto the material's main card. It joins the group and gets its channel detected.
  • Remove. In the large preview, hover a map's row and click the × button.
  • Ungroup. Use the Ungroup button in the details panel, or right-click the main and choose Ungroup Material. Every map becomes a normal asset again. Select several materials first to ungroup them together.

Every map in a material has to be a texture image. If you drag in something that isn't, like a GIF or a model, the group stays together but stops being a material and becomes a plain variant group. A group left with fewer than two maps dissolves on its own.

Grouping and ungrouping can be undone with Ctrl+Z (Cmd+Z on macOS). Channel changes aren't on the undo stack, so to reverse one, pick the previous channel again.

Exporting a material

Right-click the material's main and open Export.

MaterialX (.mtlx)

Writes a self-contained folder named after the material:

rock/
  rock.mtlx
  rock_diffuse.png
  rock_normal.png
  rock_roughness.png

The .mtlx file references its textures by relative path, so you can copy or move the folder as a unit. Maps are wired into a MaterialX standard_surface:

ChannelInput
Albedobase_color
Roughnessspecular_roughness
Metallicmetalness
Emissiveemission_color
Opacityopacity
Normalnormal(through a normalmap node)

AO, height, packed and unassigned maps are still copied into the folder and referenced in the .mtlx, but they aren't connected to the surface. Colour maps are read as sRGB, and data maps (roughness, metallic, normal and opacity) as linear.

All Maps (Folder)

Copies every map into a folder you pick, without the .mtlx.

File naming

Both exports name files the same way:

  • The material's name is the longest prefix its maps share, so rock_diffuse and rock_normal give rock. If there's no meaningful shared prefix, the main map's name is used.
  • Each map is saved as {name}_{channel}.{ext}, or just {channel}.{ext} if the maps share no prefix.
  • Unassigned maps keep their original file name.
  • Files are copied byte for byte, never re-encoded, so EXR, HDR and DDS maps come through intact.

Because the main texture is only one part of the material, the usual single-image Export As options are hidden for it.

Dragging a material out

Drag a material's main card into Explorer, Finder or another app and you get the same self-contained MaterialX folder as the export.

This works when you drag a single material. Drag a multi-selection and the assets go across as individual files.

Good to know

  • Grouping never touches your files on disk. A material is a library view, not a folder move.
  • Already have a material file, like a .mtl or .mtlx? Import it directly and AssetHoard finds its textures for you. See Materials.
  • Exports are new files. The maps in your library aren't changed.