Skip to content
← Back to Blog 3d-modeling

Substance Painter to Unreal Engine 5: Complete Texture Export and Material Setup Workflow

By BitSoul3D5 min read248 views

Every game artist hits the same wall: your textures look perfect in Substance Painter, then land in Unreal Engine 5 looking flat, washed out, or wrong. The problem is almost never the art. It's the export pipeline.

Substance Painter to Unreal Engine 5: Complete Texture Export and Material Setup Workflow

This guide walks you through every decision point — from setting up your export template to wiring the final material in UE5 — so your assets look the same in both tools.

Setting Up Your Export Template in Substance Painter

Substance Painter ships with a built-in Unreal Engine 4 (Packed) export preset. In 2026, this preset still works for UE5 — the format hasn't changed. Navigate to File → Export Textures, then select Unreal Engine 4 (Packed) from the Config dropdown.

This preset produces four textures:

Key settings to lock in before exporting:

Avoid exporting TGA unless your pipeline specifically requires it. PNG is smaller and lossless. Avoid EXR for anything except HDR emissive or displacement data — EXR files are massive and UE5 won't apply GPU texture compression to them automatically.

Understanding Channel Packing for UE5

Channel packing is the single biggest performance win in a PBR pipeline. Instead of three separate grayscale textures (AO, Roughness, Metallic), you pack all three into the RGB channels of a single texture. UE5 reads them out per-channel with zero overhead.

Understanding Channel Packing for UE5 — illustrated

The ORM packing convention used by UE5 is:

ChannelData
RAmbient Occlusion
GRoughness
BMetallic

The Substance Painter preset does this automatically. But if you're baking from Blender or using a custom pipeline, you need to pack manually. Here's a Python snippet using Pillow:

from PIL import Image

ao = Image.open("asset_AO.png").convert("L")
roughness = Image.open("asset_Roughness.png").convert("L")
metallic = Image.open("asset_Metallic.png").convert("L")

width, height = ao.size
orm = Image.merge("RGB", (ao, roughness, metallic))
orm.save("asset_OcclusionRoughnessMetallic.png")

One important note: the ORM texture is not sRGB data. It's linear mask data. Marking it as sRGB in UE5 will destroy your roughness and metallic values. More on this in the import section.

Exporting Textures at the Right Resolution

Resolution decisions compound. Export at the wrong size and you're either wasting texture memory or losing detail that can't be recovered later.

Here's a practical resolution guide based on asset role:

Asset TypeBase ColorNormalORM
Hero character409640962048
Standard prop204820482048
Background/LOD prop102410241024
Tiling surface204820482048

UE5's texture streaming system handles these efficiently, but only if you follow consistent naming conventions. Adopt a naming standard before exporting:

AssetName_BaseColor.png
AssetName_Normal.png
AssetName_OcclusionRoughnessMetallic.png
AssetName_Emissive.png

Keep names lowercase and hyphen/underscore separated. UE5 uses the filename as the asset name — inconsistent naming creates chaos in your Content Browser.

Importing Textures into Unreal Engine 5

Drag your exported PNGs into the UE5 Content Browser. UE5 will auto-detect most settings, but it gets two things wrong almost every time:

  1. It marks ORM textures as sRGB
  2. It uses Default compression instead of optimal per-type compression

Importing Textures into Unreal Engine 5 — illustrated

For each texture, open its settings and configure as follows:

BaseColor texture:

Normal map texture:

ORM texture:

Emissive texture (if used):

To save time importing multiple assets with correct settings, create a Texture Import Profile in Project Settings → Texture Import Settings. You can define rules that auto-apply compression and sRGB flags based on filename suffix.

Building the Material in UE5 Material Editor

Create a new Material asset in the Content Browser. Set the Shading Model to Default Lit (or Subsurface for skin). Open the Material Editor.

Here's the standard node hookup:

BaseColor texture (sRGB)     → Base Color pin
Normal texture              → Normal pin (after TextureCoordinate)
ORM.R (AO channel)          → Ambient Occlusion pin
ORM.G (Roughness channel)   → Roughness pin  
ORM.B (Metallic channel)    → Metallic pin
Emissive texture            → Emissive Color pin

To split the ORM channels, use a Texture Sample node connected to three Component Mask nodes:

This uses a single texture sample — no extra draw cost.

For production workflows, consider converting your Material to a Material Instance immediately after verifying it looks correct. Material Instances compile instantly, expose parameters to level designers, and are required by UE5's batching systems for instanced static meshes.

If you're distributing assets through BitSoul's marketplace, pack your materials as Material Instances with sensible parameter defaults. Buyers should be able to adjust color tint, roughness multiplier, and emissive intensity without touching the master material.

Common Mistakes and Quick Fixes

A few issues come up constantly:

Textures look washed out in UE5. Almost always an sRGB mismatch. Check your ORM texture — if it's flagged as sRGB, disable it and re-save.

Normal map has a seam visible. Usually a Mikktspace mismatch between Blender/Painter and UE5. Ensure your mesh was triangulated before baking, and that you didn't flip the green channel. UE5 uses DirectX-style normals.

Asset looks plastic in lit scenes. Your roughness values are probably too low (too smooth). Real-world surfaces rarely go below 0.2 roughness. Use UE5's built-in PBR validation tool (enable via Show → Visualize → PBR Validation) to check if values are physically plausible.

ORM texture looks all grey. You packed the channels in the wrong order, or exported non-packed textures. Re-export from Substance Painter using the UE4 Packed preset and check the channel assignments in the export dialog.

Conclusion

The Substance Painter to UE5 pipeline is straightforward once you lock in the right settings. Export with the UE4 Packed preset, keep ORM linear, set compression per texture type in UE5, and split ORM channels with Component Masks in the Material Editor.

Once your pipeline is set up, it takes under two minutes to import and wire a full PBR asset correctly. If you're looking for pre-optimized 3D assets with correct texture sets already packed for UE5, check out BitSoul's marketplace — assets are tagged by engine and include export-ready texture maps.


Need drop-in assets for this workflow? Grab the 94-model Animal Bundle on the BitSoul marketplace and drop them straight into your project.

Tags: animals

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)