MaterialX

MaterialX logo

MaterialX is an open standard for describing surface materials and procedural textures as a portable node graph. Originated at Lucasfilm and now hosted by the Academy Software Foundation (ASWF) alongside projects like OpenColorIO and OpenEXR, it is the shared material format across film, VFX, and game pipelines — the same graph can move between Paintapp, USD-based renderers, and DCC tools like Maya, Houdini, and Blender without losing its shading logic.

In Paintapp, MaterialX is one of the ways to shade a surface in the 3D environment: instead of a fixed set of sliders, a MaterialX graph wires together textures, math, and pattern nodes into a shader, and that same graph drives both the real-time preview and the path tracer.

A MaterialX graph: Projection and Image nodes feeding a Standard Surface shader into a Surface Material

A simple graph — a Projection feeds an Image texture into base_color on a Standard Surface, which plugs into the Surface Material assigned to geometry.

Getting a MaterialX graph

Paintapp reads .mtlx documents directly — open one with File → Open or drag it onto the canvas, the same as any other file (see File Formats). USD scenes and material prims that carry an embedded MaterialX graph pick it up automatically. You can also build a graph from scratch: assign a MaterialX material to an object and open it in the node graph editor to wire nodes together, exactly like a 2D effects graph — see Node-Based vs Layer-Based Editing if the graph editor is new to you.

Editing a MaterialX graph is live: change a value or rewire a node and both the preview and an in-progress path-traced render update to match.

Supported shaders

A graph's shading result reaches geometry through one of these shader nodes, wrapped in a Surface Material:

ShaderWhat it is
Standard Surface The MaterialX/Autodesk standard_surface shader — the de-facto standard PBR uber-shader (the same model Arnold, Maya, and most DCCs ship as their default). Layered base, specular, coat, sheen, transmission, subsurface, thin-film, and emission inputs, each individually connectable to a texture or pattern.
OpenPBR Surface The newer ASWF open_pbr_surface shader — a from-scratch, more physically rigorous successor to Standard Surface (F82 metal Fresnel, energy-compensated EON diffuse). Same vertically-layered idea — fuzz over coat over a metal/dielectric base — with a cleaner parameterization.
Surface Unlit A flat-color/emissive shader with no lighting response — for UI overlays, gizmos, and pure-emissive look-dev.
Surface Material Not a shader itself — the material root that binds a surfaceshader (and optionally a displacement shader) so it can be assigned to geometry.

Node library

Beyond the shaders, Paintapp implements a broad slice of the MaterialX standard node library for building the pattern graphs that feed them:

CategoryNodes
TexturesImage, Tiled Image, Normal Map
Input / geometricPosition, Normal, Tangent, Bitangent, Texcoord, Projection, View Direction, Geom Property
Math — arithmeticConstant, Add, Subtract, Multiply, Divide, Modulo, Invert, Mix, Convert, Dot
Math — power / trigPower, Safe Power, Sqrt, Exp, Ln, Sin, Cos, Tan, Asin, Acos, Atan2
Math — round / clampAbs, Sign, Floor, Ceil, Round, Fract, Clamp, Min, Max, Triangle Wave
Math — vectorNormalize, Magnitude, Distance, Dot Product, Cross Product, Reflect, Refract
Math — 2D/3D transformRotate 2D, Rotate 3D, Place 2D
AdjustmentLuminance, Contrast, Saturate, HSV to RGB, RGB to HSV, HSV Adjust, Smoothstep, Remap, Range
CompositingPlus, Minus, Difference, Burn, Dodge, Screen, Overlay, Inside, Outside
Conditional / logicalIf Greater, If Greater Eq, If Equal, Not, And, Or, Xor
ChannelCombine 2/3/4, Swizzle
Procedural / shapeRamp (L→R, T→B), Split (L→R, T→B), Checkerboard, Line
ApplicationTime, Frame

Every node type above appears in the node graph editor's insertion menu, so building a pattern network is the same drag-and-wire workflow as any other Paintapp graph. A handful of less-common nodes (matrix construction/inversion/transpose, per-texel hex-tiled normal mapping) are recognized by the .mtlx reader but not yet wired to a working implementation — a graph that uses one keeps its place in the layout but passes its input through unchanged until that node is finished.

Limitations

A MaterialX graph is authored once and drives both the real-time preview and the path tracer, but MaterialX support is still under active development in each. A few gaps to know about:

RendererLimitations
Real-time preview Transmission (glass) and thin-film on an OpenPBR Surface are not yet shaded (they do render correctly through Standard Surface).
Path tracer Procedural pattern graphs (noise-like math, ramps, checkerboards, position-driven tiling — see Node library) can use at most four unique textures across the whole scene; any beyond that quietly fall back to a flat, non-patterned value for that material. A pattern-driven emissive surface also lights the scene using a single flat brightness rather than its per-pixel pattern.
Both Subsurface scattering currently falls back to plain diffuse shading rather than simulating light transport under the surface.
New to 3D in Paintapp? Start with 3D in Paintapp for scenes, lights, and cameras, and Path Tracer for how the high-fidelity renderer works.