Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/armory3d/armorpaint/llms.txt

Use this file to discover all available pages before exploring further.

Materials in ArmorPaint define what gets painted onto the mesh surface. Each material is a node graph that drives the full PBR (Physically Based Rendering) channel set—base color, roughness, metallic, normal, occlusion, height, emission, subsurface, and opacity—allowing procedurally generated textures, color ramps, image lookups, and mathematical operations to feed directly into paint output. Materials are stored in the project’s material list and can be assigned as fill materials for fill layers.

PBR Channels

Each material slot (slot_material_t) exposes per-channel toggles that control which texture channels the material writes to when painting or filling. All channels default to enabled when a new material is created.
Controls the diffuse/albedo color of the surface. Stored in the texpaint (base channel) texture of the layer. Applicable in all three workflows (PBR, Base Color, Sculpt).
Controls the transparency of the painted result. The Opacity Mode (paint_opac_mode) switches between:
ModeValueDescription
AlphaOPACITY_MODE_ALPHA = 0Standard alpha-blend transparency.
TranslucencyOPACITY_MODE_TRANSLUC = 1Subsurface-style translucency rendering.
Applicable in all workflows.
Ambient occlusion channel. Packed into the Red channel of the texpaint_pack texture. Darkens areas in crevices for more realistic shading. PBR workflow only.
Microsurface roughness. Packed into the Green channel of texpaint_pack. Values near 0 produce a mirror-like specular reflection; values near 1 produce diffuse/matte surfaces. PBR workflow only.
Controls whether a surface behaves as a metal or a dielectric (non-metal). Packed into the Blue channel of texpaint_pack. PBR workflow only.
Tangent-space normal map data, stored in the texpaint_nor texture. Adds surface detail without additional geometry. PBR workflow only.
Parallax/displacement height information, packed into texpaint_pack. Used for height-based displacement or parallax occlusion mapping effects. The paint_height_blend flag (on layers) controls whether height values blend or replace. PBR workflow only.
Self-emission glow channel. Packed into texpaint_pack. Emissive areas appear to glow and are unaffected by scene lighting. PBR workflow only.
Subsurface scattering amount. Packed into texpaint_pack. Simulates light penetrating translucent materials such as skin, wax, or foliage. PBR workflow only.

Workflows

ArmorPaint supports three distinct painting workflows, selected in Preferences or project settings:
WORKFLOW_PBR = 0The full physically based rendering pipeline. All nine material channels are available: Base Color, Opacity, Occlusion, Roughness, Metallic, Normal, Height, Emission, and Subsurface. This is the default and most common workflow for game assets and visualization.

Material Slots

Every project contains a list of material slots displayed in the Materials panel of the sidebar. Each slot (slot_material_t) holds:
  • Node canvas (canvas) — the node graph that defines the material’s look.
  • Preview image (image, image_icon) — a rendered sphere preview at 200×200 px (full) and 50×50 px (icon).
  • Channel flags — individual paint_* booleans controlling which channels are written.
  • Opacity modepaint_opac_mode for Alpha or Translucency rendering.

Managing Material Slots

ActionHow
New materialClick + (New) in the Materials panel.
Import materialClick Import to load a .arm material file.
DuplicateRight-click → Duplicate or Ctrl+D in the panel.
DeleteRight-click → Delete (requires at least two materials).
ReorderDrag and drop a material slot to a new position.
Select by shortcutShift+[1–9] (select_material) selects materials by index.

Node-Based Materials

Each material is driven by a node graph opened via the Nodes button in the Materials panel (or Tab shortcut to toggle the node editor). The node canvas connects texture nodes, color operations, math nodes, and other procedural generators to a final Output Material PBR node that feeds each PBR channel. For a full reference of available material nodes, see the Material Nodes page.
Enable material_live in Preferences → Usage to have the material preview and all fill layers update in real time as you edit nodes. This provides instant visual feedback while building procedural materials, at the cost of slightly increased CPU/GPU load during node editing.

Fill Material

Assigning a material to a layer converts it into a Fill Layer. The fill layer’s content is generated procedurally by the material’s node graph rather than storing hand-painted brush strokes.
1

Create a fill layer

In the Layers panel, click + (New) and choose Fill Layer. A new layer is created with the currently active material assigned as its fill_material.
2

Change the fill material

Select the fill layer. Switch to the desired material in the Materials panel. Right-click the layer and choose To Fill Layer to reassign it to the newly active material.
3

Adjust tiling and projection

Right-click the fill layer to access UV Scale, Angle, and UV Type (UV Map, Triplanar, or Project) controls in the context menu.
4

Convert back to paint

Right-click the layer and choose To Paint Layer to bake the fill result into a static raster texture, enabling hand-painted edits on top.

Build docs developers (and LLMs) love