Arnold MaterialX to UE5 Converter — free Python script

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:xi declarations

  • Fixes standard_surface type="closure"type="surfaceshader"

  • Sanitizes node names containing / or .

Arnold node normalization

  • 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 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=2 correctly maps to UV multiply by 2 (Note: UE5’s place2d scale works in the opposite direction — took a while to figure out)

Colorspace mapping

  • sRGB Encoded Rec.709 (sRGB)srgb_texture

  • Raw / Linearlin_rec709

  • ACEScgacescg

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

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