Hey everyone,
I’ve been trying to use Maya’s arnoldToMaterialX command to bring Arnold materials into UE5 (Substrate), and ran into a wall: the exported .mtlx files simply won’t import. UE5’s Interchange importer throws errors like:
-
has no matching NodeDef -
Mismatched types in port connection -
There was no data to import
After digging into the MaterialX spec and UE5’s importer behavior, I built a Python conversion script that fixes all of these issues automatically.
What it does
Arnold’s exporter produces non-standard constructs that UE5 doesn’t understand. The script converts them:
Structural fixes
-
Removes
xi:include/xmlns:xideclarations -
Fixes
standard_surface type="closure"→type="surfaceshader" -
Sanitizes node names containing
/or.
Arnold node normalization
-
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 needed -
Grayscale channels (
channels="r") →image type="float"direct connection -
Arnold-only inputs removed (
ignore_missing_textures, etc.)
uv_transform expansion
-
Replaced with
texcoord + multiply -
Maya
repeat=2correctly maps to UV multiply by 2 (Note: UE5’splace2dscale works in the opposite direction — 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 UE5 doesn’t support is automatically bypassed
-
Downstream connections are rewired to keep the network intact
-
Chains of unsupported nodes are resolved iteratively
Usage
bash
python arnold_mtlx_to_ue5.py input.mtlx output.mtlx
Python 3.8+, no dependencies.
Known limitations
-
hue_shiftincolor_correctis not converted (no hue-rotation node in UE5’s standard library) -
uv_transformrotation is not supported (only repeat/offset) -
Unsupported nodes are bypassed — visual result may differ from Arnold
Tested with
-
Maya 2026 + Arnold 7.x
-
Unreal Engine 5.7.3 (Substrate + Interchange)
-
MaterialX 1.39
GitHub: https://github.com/c-Carter-z/arnold-materialx-to-ue5
To my knowledge there’s no other public tool that handles this conversion end-to-end. Hope it helps. Feedback and PRs are welcome.
— C.Carter