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.
| Anchor | Where | Publishes |
|---|---|---|
| Mask anchor | Masks › Add Mask Effect › Add Anchor Point | The coverage accumulated by the masks above it in the list. |
| Channel anchor | Inspector › channel › Channel Filters › Anchor | The 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 Output | Layer Inspector › Published Outputs | The layer blended over its backdrop, in its group's context. Every channel is available; the consumer picks one. |
| Folder Composite | Folder Inspector › Published Outputs | The 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.
| Action | Where | Effect |
|---|---|---|
| Save Folder as Module | Folder 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 Module | Add Layer › Module | Searches the library's modules (newest version each) and the built-in catalog modules, and inserts an instance above the selected layer. |
| Update / Update All | Folder Inspector | Three-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 Version | Folder Inspector | Discards local edits. Needed when an instance's base snapshot is missing. |
| Detach | Folder Inspector | Keeps the provenance badge but excludes the folder from updates. |
| Situation on update | Result |
|---|---|
| The module changed a value you did not touch | Applied |
| You changed a value the module did not | Kept |
| Both changed the same value | Kept (yours wins), reported as a conflict |
| The module added or removed a layer, mask or filter | Added; removed unless you edited it |
| You added your own layers inside the instance | Kept |
| Painted images | Always 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.