The PBR Project Model: Layers, Materials, and Assets

ArmorPaint’s project model answers a practical question: what exactly must the application remember so a surface can be painted, rendered, previewed, saved, and reopened? This chapter examines the relationships among mesh objects, materials, brushes, layers, masks, channel textures, and external assets. The reader’s goal is to stop seeing a project as a stack of images and start seeing it as a set of linked decisions that the renderer and file system can consume.

A mesh is the visible shape, but it does not by itself explain the appearance. A material describes how surface inputs become PBR outputs. A brush describes how an interaction modifies those inputs. Layers determine which contribution is visible, how it is blended, and which object or UV context receives it. Assets supply images, meshes, environments, fonts, or sounds that those decisions can reference. ArmorPaint keeps these roles distinct because their lifecycles are different, even when one user action crosses all of them.

A project is a coordinated state, not a bitmap

At runtime, ArmorPaint keeps a paintable object set, material slots, brush slots, and an ordered layer structure. Material slots are backed by node canvases. Brush slots are backed by logic canvases. The project also tracks assets and mesh relationships. These are not merely labels attached to pixels. They are the editable sources from which the application can rebuild previews, render a viewport, perform an operation, or write a project file.

The distinction becomes clear with a simple surface decision. “Put a worn dark material on this object” could be represented as a fill material assigned to a layer. “Paint a dark mark here with a soft edge” could be an interactive brush operation that writes into a paint layer. Both may change the visible surface, but they have different meanings. The first says the layer is driven by reusable material logic; the second says the layer contains painted data that can be edited directly. If the project flattened both immediately, it would lose the reason the surface looks that way.

Layers therefore carry more than an image. A layer can be visible or hidden, have opacity and blending behavior, target a particular object, use a UV map or projected coordinates, and participate in a group. A mask can limit the layer’s influence. A fill material can make the layer a live consumer of a material slot. A path or decal-style layer can retain information about how content was placed rather than only retaining the final raster result. The layer is the place where these relationships become an ordered surface contribution.

This is why the project model is a bridge between the editor and the renderer. The editor needs named, selectable entities. The renderer needs textures, masks, transforms, and material outputs. The file lifecycle needs enough information to reconstruct both. One model can serve all three, but only if the relationships remain explicit.