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.
Export presets tell ArmorPaint how to map its internal PBR channels — base color, normal, occlusion, roughness, metallic, height, and more — into the specific texture layout expected by a target game engine or renderer. Each preset is a small JSON file that lists one or more output textures and defines which source channel fills each RGBA slot of that texture. The active preset is selected from the Preset dropdown in the Export dialog, and the same preset editor is available on the Presets tab.
Preset JSON Format
Each preset file lives in the export_presets/ data folder and follows this schema:
{
"textures": [
{
"name": "base",
"channels": ["base_r", "base_g", "base_b", "1.0"],
"color_space": "linear"
}
]
}
| Field | Type | Description |
|---|
name | string | Suffix appended to the output filename (e.g. _base, _orm). Use "" for no suffix. |
channels | string[4] | Source channel for each of R, G, B, A in the output texture. |
color_space | string | Currently "linear" for all built-in presets. |
Available Channel Values
These are the valid values for each entry in the channels array, as recognised by export_texture.c:
| Value | Source |
|---|
base_r | Base color — red channel |
base_g | Base color — green channel |
base_b | Base color — blue channel |
nor_r | Normal map — red (X) channel |
nor_g | Normal map — green (Y) channel — OpenGL convention |
nor_b | Normal map — blue (Z) channel |
nor_g_directx | Normal map — green channel inverted for DirectX convention |
occ | Ambient occlusion |
rough | Roughness |
metal | Metallic |
smooth | Smoothness (inverted roughness) |
emis | Emission |
height | Height / displacement |
opac | Opacity / alpha |
diff_r | Computed diffuse color — red channel (derived from base color × (1 − metallic)) |
diff_g | Computed diffuse color — green channel |
diff_b | Computed diffuse color — blue channel |
spec_r | Computed specular color — red channel (derived from base color × metallic + 0.04 × (1 − metallic)) |
spec_g | Computed specular color — green channel |
spec_b | Computed specular color — blue channel |
0.0 | Constant black (channel filled with 0) |
1.0 | Constant white (channel filled with 255) |
nor_g_directx inverts the green channel of the normal map to convert from OpenGL-style normals (Y-up) to DirectX-style normals (Y-down). Use this for any engine that expects DirectX normal maps — most notably Unreal Engine. Failing to flip the green channel produces lighting errors that look like inverted bumps.
Built-in Presets
ArmorPaint ships with eight presets that cover the most common real-time rendering workflows.
Generic
Unreal Engine
Unity
Unigine
X-Plane
Minecraft MER
Base Color Only
Specular
The default preset. Outputs each PBR channel as a separate grayscale or RGB texture with no channel packing.{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" },
{ "name": "nor", "channels": ["nor_r", "nor_g", "nor_b", "1.0"], "color_space": "linear" },
{ "name": "occ", "channels": ["occ", "occ", "occ", "1.0"], "color_space": "linear" },
{ "name": "rough", "channels": ["rough", "rough", "rough", "1.0"], "color_space": "linear" },
{ "name": "metal", "channels": ["metal", "metal", "metal", "1.0"], "color_space": "linear" }
]
}
Output files: _base, _nor, _occ, _rough, _metal Packs occlusion, roughness, and metallic into a single ORM texture. The normal map uses nor_g_directx to flip the green channel for Unreal’s DirectX normal map convention.{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" },
{ "name": "nor", "channels": ["nor_r", "nor_g_directx", "nor_b", "1.0"], "color_space": "linear" },
{ "name": "orm", "channels": ["occ", "rough", "metal", "1.0"], "color_space": "linear" }
]
}
Output files: _base, _nor (DirectX Y-flip), _orm (R=Occlusion, G=Roughness, B=Metallic) Outputs a Unity HDRP / URP compatible set. The MOS texture packs metallic into R, occlusion into G, and smoothness (inverted roughness) into A. Height is stored in the G channel of a dedicated height texture.{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" },
{ "name": "nor", "channels": ["nor_r", "nor_g", "nor_b", "1.0"], "color_space": "linear" },
{ "name": "mos", "channels": ["metal", "occ", "1.0", "smooth"], "color_space": "linear" },
{ "name": "height", "channels": ["0.0", "height", "0.0", "1.0"], "color_space": "linear" }
]
}
Output files: _base, _nor, _mos (R=Metallic, G=Occlusion, A=Smoothness), _height Matches the Unigine engine’s packed texture convention. The normal map stores only XY components; the SH texture packs metallic into R and roughness into G. Occlusion is stored alone.{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" },
{ "name": "nor", "channels": ["nor_r", "nor_g", "0.0", "1.0"], "color_space": "linear" },
{ "name": "sh", "channels": ["metal", "rough", "0.0", "1.0"], "color_space": "linear" },
{ "name": "occ", "channels": ["occ", "0.0", "0.0", "1.0"], "color_space": "linear" }
]
}
Output files: _base, _nor (XY only), _sh (R=Metallic, G=Roughness), _occ Designed for X-Plane aircraft and scenery. The base texture carries opacity in its alpha channel. The normal texture packs metallic into B and smoothness into A.{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "opac"], "color_space": "linear" },
{ "name": "nor", "channels": ["nor_r", "nor_g", "metal", "smooth"], "color_space": "linear" }
]
}
Output files: _base (RGB + Opacity in A), _nor (Normal XY + Metallic B + Smoothness A) Matches the Minecraft Bedrock Edition PBR format. The base color texture has no name suffix. A separate normal map and a MER texture (Metallic / Emission / Roughness) are exported.{
"textures": [
{ "name": "", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" },
{ "name": "normal", "channels": ["nor_r", "nor_g", "nor_b", "1.0"], "color_space": "linear" },
{ "name": "mer", "channels": ["metal", "emis", "rough", "1.0"], "color_space": "linear" }
]
}
Output files: (no suffix — base color), _normal, _mer (R=Metallic, G=Emission, B=Roughness) Exports a single base color map. Useful for baking materials to a flat colour texture or for quick previews.{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" }
]
}
Output files: _base A specular-workflow preset for older rendering pipelines. Computes diffuse and specular colors from the metallic-roughness values. Also exports normal, occlusion, and smoothness as separate maps.{
"textures": [
{ "name": "diff", "channels": ["diff_r", "diff_g", "diff_b", "1.0"], "color_space": "linear" },
{ "name": "spec", "channels": ["spec_r", "spec_g", "spec_b", "1.0"], "color_space": "linear" },
{ "name": "nor", "channels": ["nor_r", "nor_g", "nor_b", "1.0"], "color_space": "linear" },
{ "name": "occ", "channels": ["occ", "occ", "occ", "1.0"], "color_space": "linear" },
{ "name": "smooth", "channels": ["smooth", "smooth", "smooth", "1.0"], "color_space": "linear" }
]
}
Output files: _diff (computed diffuse), _spec (computed specular), _nor, _occ, _smooth
Custom Presets
You can create your own presets to target any engine or pipeline.
Open the Export dialog
Press Ctrl+E and switch to the Presets tab.
Create a new preset
Click New, enter a name (e.g. my_engine), and press OK. ArmorPaint creates a minimal template preset with a single base-color texture entry and opens it in the preset editor.
Edit channels
The preset editor shows a row for each output texture. You can:
- Edit the texture name (output filename suffix).
- Change the R, G, B, A dropdowns to any supported channel value.
- Set the Color Space (currently
linear for all channels).
- Click Add to append a new texture row, or right-click a row and select Delete to remove it.
Changes are saved to disk automatically as you edit. Import an existing JSON preset
Click Import on the Presets tab to browse for a .json file. ArmorPaint copies it into the export_presets/ folder and makes it available immediately.
Manual Editing
Preset files are stored as plain JSON in the export_presets/ folder inside ArmorPaint’s data directory. You can also create or edit them with a text editor and restart ArmorPaint, or place them in the folder while ArmorPaint is running and click Import to load them without restarting.
The template written when you click New looks like this:
{
"textures": [
{ "name": "base", "channels": ["base_r", "base_g", "base_b", "1.0"], "color_space": "linear" }
]
}
Extend it by adding more objects to the textures array. Each output texture generates one image file per export.
Creating engine-specific presets is one of the most effective ways to streamline your export pipeline. A well-crafted preset means you can hit Ctrl+E → Export and immediately get correctly packed textures without any post-processing steps in the engine.