Skip to content

16. Material sets, Object sets

Two set systems, two different jobs, independent of each other:

Set kind Answers Lives in
Material set which materials share one layer stack OP Painter ▸ Material Sets
Object set which meshes are painted and exported as one object OP Painter ▸ Object Sets

A character with a skin material and an armour material spread over eleven mesh objects usually ends up with two material sets and one object set.

16.1 Material sets

A shared stack. Every member material uses the same stack. Paint once and they all show it. With no set, the material simply has its own stack (solo), so you do not need a set to start.

Making a set. Type a name in the field at the top of the Material Sets panel and press +.

Adding materials. The Material Sets panel stays empty until the active object has a material. Tick the materials you want — in the set's own expanded list, or in Model Collection Materials below — then press the + on the row of the set they should join. The ticks clear themselves afterwards, and the set is activated so the viewport routing follows.

One set per material, always. Adding a material to a set removes it from every other set, drops its solo group from the material and drops its solo stack from the panel: the material adopts the set's stack, it does not bring its own layers with it. The canvases it painted are still in the .blend (and on disk if they were saved), but nothing in the panel points at them any more. So: join the set first, paint second.

Taking a material out (the unlink icon on the set row) works the same way in reverse. Tick the members you want out and press it: the set group instance comes off those materials, each one gets its solo group back and the output route is reapplied. The layers you built in the set stay with the set.

Renaming changes the set's label. Removing it takes its shared stack off the member materials, which return to solo mode.

Active sets — which stack the panel is editing. The set name in the row is a toggle, and it decides more than highlighting:

  • with one or more sets active, the panel edits the active set(s), and their groups are the ones routed to the material output;
  • with no set active, the panel edits the active material's own solo stack;
  • clicking an active set deactivates it;
  • clicking an inactive set while at most one set is active activates all sets at once — the quick way back to "show me everything". Click again on the ones you did not want.

Which materials the list offers. OP Settings ▸ Material Set Settings:

Setting Effect
Collection Filter only materials used by mesh objects inside that collection are listed (empty = every used material)
Exclude Names comma-separated; a material whose name contains one of them (case-insensitive) is hidden

Both are worth setting on an imported scene, where a hundred materials would otherwise fill the panel.

16.2 Object sets

An object set merges copies of several meshes into one object, so you paint one thing instead of twenty and export one texture set instead of twenty.

Building one. Type a name and press + at the top of Object Sets. Select meshes in the viewport and press the + on the set's row to add them. Then press the set's name button, which builds it:

  1. every member mesh is duplicated;
  2. the duplicates are joined into one object named set_<Label>;
  3. that object goes into the _SET collection, which is created, un-hidden and un-excluded as needed;
  4. the set becomes the active object set and the merged object is selected for you.

The copies share the original materials, so painting the merged object paints the same stack the sources use — the originals show every stroke. They are not hidden and the merged copy sits right on top of them, so work with Isolate on. Press the name button again whenever you add members, edit geometry or change UVs.

The row, button by button:

Button What it does
▸ expand: lists the member objects
+ add the selected meshes to this set (and remove them from any other set)
rename rename the set; the generated objects take the new name at the next build
the set name build or rebuild the merged object, make the set active, select it
isolate local view with only this set's generated objects and the cutters aimed at it; press to leave
⚠ a member's UVs changed since the last build — rebuild
↺ Revert last UV rebake, shown only while a same-session rollback exists
unlink remove the selected objects from the set
X delete the set and its generated set_<Label>* objects; your source meshes are untouched

One object, or one per material. OP Settings ▸ Object Set Settings ▸ Object Set Mode:

  • Single Object — one merged set_<Label>.
  • Per Material — the merged mesh is separated by material into set_<Label>_<MaterialName>, and an Object Selection block appears in the main panel with one button per part. Clicking a part selects it and puts you back into Texture Paint, so you can hop between materials without dropping the brush. UI Layout draws those buttons as a column or as rows of five.

UV rebake. When a member's UVs change, rebuilding asks if you want to transfer the textures to the new UVs. Check the workload estimate before continuing (large jobs can take a while). Leave Rebake textures to new UVs ticked to keep the painting, including UDIM tiles.

If a transfer fails, OP keeps the old mesh hidden so you can retry. Revert last UV rebake restores the images from just before the transfer (available in the same session, not a full history).

At export. The exporter's Merge Set Objects box lists every set_… object it finds in _SET, grouped by set; tick the box's own checkbox, then a set and the objects you want, and the bake merges them into one texture set. Sync with Active Set keeps that selection following the set object you have active and unticks the others; untick it for manual control. The merged copy bakes with the first ticked object's active material, so in Per Material mode export the parts one material at a time (chapter 13).

Naming. Keep underscores out of object-set labels. The generated names are set_<Label> and set_<Label>_<Material>, and the exporter reads the label as everything up to the first underscore, so Body_Armor would be grouped as Body.