Hey everyone,
If you’ve tried importing MaterialX files exported from Maya/Arnold (arnoldToMaterialX) into UE5 via the Interchange importer, you’ve probably seen errors like these:
-
has no matching NodeDef -
Mismatched types in port connection -
There was no data to import in the provided source data
The root cause is that Arnold’s exporter produces non-standard .mtlx constructs that UE5’s Interchange importer doesn’t recognize. I spent a while digging into the MaterialX 1.39 spec and UE5’s importer behavior, and built a Python script that fixes all of these issues automatically.
What it fixes
Structural issues
-
Removes
xi:include/xmlns:xideclarations (Arnold includes these for its own node library) -
Fixes
standard_surface type="closure"→type="surfaceshader" -
Sanitizes node/nodegraph names containing
/or.
Arnold-specific nodes → standard MaterialX
-
aiColorCorrect→ expanded intopower+mix(luminance)+subtract/multiply/add -
aiNormalMap/normal_map→normalmap -
aiMultiply,aiAdd,aiMix,aiClamp,aiPow→ standard equivalents -
Input names normalized (
input1/input2→in1/in2, etc.)
Image node fixes
-
filenameinput →file(typefilename) -
color_spaceinput →colorspaceattribute -
type="color4"→color3/float/vector3as required by Substrate -
Grayscale channels (
channels="r") →image type="float"direct connection -
Arnold-only inputs removed (
ignore_missing_textures,missing_texture_color, etc.)
uv_transform → texcoord + multiply
-
Maya
repeat=2correctly maps to UV multiply by 2 -
(UE5’s
place2dscale works in the opposite direction — this one took a while to figure out)
Colorspace mapping
-
sRGB Encoded Rec.709 (sRGB)→srgb_texture -
Raw/Linear→lin_rec709 -
ACEScg→acescg
Unsupported node passthrough
-
Any node not supported by UE5’s Interchange is automatically bypassed
-
Downstream connections are rewired to keep the material network intact
Usage
bash
python arnold_mtlx_to_ue5.py input.mtlx output.mtlx
Python 3.8+, no dependencies. Then drag the output .mtlx into the Content Browser.
Known limitations
-
hue_shiftincolor_correctis not converted (no hue-rotation node in UE5’s standard library) -
uv_transformrotation is not supported (repeat and offset only) -
Unsupported nodes are bypassed — visual result may differ from Arnold render
Tested with
-
Maya 2026 + Arnold 7.x (
arnoldToMaterialX) -
Unreal Engine 5.7.3 (Substrate + Interchange MaterialX importer)
-
MaterialX 1.39
GitHub: https://github.com/c-Carter-z/arnold-materialx-to-ue5
Hope this saves someone the hours I spent on it. Feedback and PRs are welcome.
— C.Carter







