Arnold MaterialX to UE5 Converter — free Python script (fixes Interchange import errors)

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:xi declarations (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 into power + mix(luminance) + subtract/multiply/add

  • aiNormalMap / normal_mapnormalmap

  • aiMultiply, aiAdd, aiMix, aiClamp, aiPow → standard equivalents

  • Input names normalized (input1/input2in1/in2, etc.)

Image node fixes

  • filename input → file (type filename)

  • color_space input → colorspace attribute

  • type="color4"color3 / float / vector3 as 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=2 correctly maps to UV multiply by 2

  • (UE5’s place2d scale works in the opposite direction — this one took a while to figure out)

Colorspace mapping

  • sRGB Encoded Rec.709 (sRGB)srgb_texture

  • Raw / Linearlin_rec709

  • ACEScgacescg

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_shift in color_correct is not converted (no hue-rotation node in UE5’s standard library)

  • uv_transform rotation 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