Anchors, Open Graph and modules

Reuse one stack's result elsewhere, see the set as a node graph, and keep reusable folders updatable.

On this page 4 sections

Three features let one part of a texture set feed another without duplicating work. Anchor points publish the result of a stack at a position so other layers can read it. Open Graph is the built-in node editor for those layers, masks, filters and connections. Material modules make a folder reusable across sets and updatable in place.

Anchor points

An anchor is a row in a mask stack or a channel's filter list that publishes everything evaluated before it. It changes nothing itself. Consumers elsewhere in the set pick the anchor by name.

AnchorWherePublishes
Mask anchorMasks › Add Mask Effect › Add Anchor PointThe coverage accumulated by the masks above it in the list.
Channel anchorInspector › channel › Channel Filters › AnchorThe channel's straight RGBA after the filters above it, before later filters, opacity, blend or masks. Paint layers can publish their painted channel this way.
Layer OutputLayer Inspector › Published OutputsThe layer blended over its backdrop, in its group's context. Every channel is available; the consumer picks one.
Folder CompositeFolder Inspector › Published OutputsThe folder's child composite before the folder's own opacity, mask and blend.

Consumers

  • Published Input mask — the mask's Anchor picker lists every anchor in the set as Name · Layer · stack, sorted by stack position. Scalars are read as-is; colour channels as Rec.709 luminance.
  • Fill content — a fill channel's Content Anchor replaces its colour, value or image. The channel's own detail and filters still apply, so anchor + Gaussian Blur is a blurred copy of another layer's channel.
  • Micro Details — Edge Wear, Chips, Dirt, Cavity Dirt, Rust and Drips masks accept Micro Height and Micro Normal anchors with intensity sliders and a texel radius. Painted or procedural relief then gets wear on its convex rim and dirt in its concave ring, as if it were baked geometry.

Any acyclic reference is allowed — above, below or inside the same layer's stack. Cycles are refused when picked. Selecting an anchor shows Used by N with a select button per consumer; every consumer shows a magnifier that locates its anchor. Deleting an anchor, its layer, or baking a mask stack reports "Broke N references"; a missing anchor evaluates as neutral (mask 0, transparent content, no micro detail) and is reported, not repaired.

Open Graph: the built-in node editor

More › Edit Nodes or the layer-row context menu opens Open Graph framed on the selected layer, mask or filter. It edits the same stack as the panels: layers and folders, mask chains, channel filters, composition links and anchor references. Selection stays synchronized.

  • Shift+A adds layers, mask sources and channel filters to the active target.
  • Drag an anchor output into a Published Input, channel-content or Micro Detail input to set a reference. Unpublished layer Output and folder Composite sockets publish when connected.
  • Connect Coverage to Previous to reorder masks, or reorder filters within their channel. Layer Output to Backdrop changes layer order; a folder's Children input places a layer inside it.
  • Deleting an anchor link clears its reference. Composition chains remain connected.
  • Deleting a mask or filter node removes that item; painted masks and layers must be deleted in the Painter panel, and their nodes are otherwise recreated.
  • Cycles, incompatible sockets and cross-layer mask chains are rejected with a status message.

Node bodies expose relevant layer, mask and filter controls. Sockets identify Material bundles, Color, Scalar, Normal and Coverage. Frame Selected, Full Graph and Auto Layout help navigation; manually placed nodes keep their positions across syncs.

Material modules

A module is a folder subtree with an identity and a version. Save any folder as a module, insert instances of it in any texture set, edit the instances freely, publish a new version and update the instances in place: your edits survive, the module's changes apply, and the few places where both changed keep your value and are listed.

ActionWhereEffect
Save Folder as ModuleFolder Inspector › Module (or Save Version on a module folder)Writes <Name> v<n>.openpaintmaterial to the smart-material library; the folder becomes the origin instance. Saving again writes v n+1.
Insert ModuleAdd Layer › ModuleSearches the library's modules (newest version each) and the built-in catalog modules, and inserts an instance above the selected layer.
Update / Update AllFolder InspectorThree-way merge to the newest version for this instance or every non-detached instance in the set. Reports conflicts kept in your favour.
Replace with Library VersionFolder InspectorDiscards local edits. Needed when an instance's base snapshot is missing.
DetachFolder InspectorKeeps the provenance badge but excludes the folder from updates.
Situation on updateResult
The module changed a value you did not touchApplied
You changed a value the module did notKept
Both changed the same valueKept (yours wins), reported as a conflict
The module added or removed a layer, mask or filterAdded; removed unless you edited it
You added your own layers inside the instanceKept
Painted imagesAlways yours — an instance's own paint is never replaced

Updates apply in one transaction; any failure restores the previous subtree exactly. Instances show a package badge with their version in the layer list, and an alert badge when a newer version exists. Two instances never collide, and references from outside into an instance keep working across updates. Every catalog smart material is a module instance of its recipe, and the built-in Damage module (Scratches, Edge Wear, Dirt, Rust) can be inserted directly or nested inside recipes.

Module files use format version 4 of the material format; team libraries install them like any other material. Reference: docs/material-modules.md, docs/anchor-points.md, docs/open-graph.md.