Free · MITv1.0.0

Texture sets to material instances, in one click.

Select T_Rock_BaseColor, T_Rock_Normal and T_Rock_ORM, click once, and get MI_Rock with every map in the right slot, the texture settings fixed and the material onSM_Rock.

Engine
UE 5.6 · 5.7 · 5.8
Platforms
Win64 · Mac · Linux editor
Type
C++ editor plugin, source included
License
MIT, free for commercial use

Interactive demo with the plugin's test textures. Click a set, toggle options, then press Create.

Material SmithSample project
Material SmithTexture sets to material instances, in one click
0Texture sets
0New
0Updates
0Texture fixes
0Mesh slots
0Not recognized
No selection
No textures selectedSelect textures or folders in the Content Browser, then click Use selection.
Select textures or folders, then click Use selection.tridiARTWebsiteContactDiscordDocumentationv1.0.0
The real thing

Native Slate panel, right inside Unreal Editor.

ta Material Smith panel in Unreal Editor with nine texture sets, options and the details of Chair_Metal
ta Material Smith 1.0 in Unreal Editor 5.6 with the same nine texture sets as the demo above.
30textures from 6 folders, selected at once
9material instances created
11texture settings fixed on the way
1click on Create 9 material instances

Numbers from the test project in the screenshot above.

Naming

Reads the names your textures already have.

No renaming before import. Material Smith knows 97 name endings used by the tools and libraries your textures come from, ignores resolution and file type tokens, and reads packed maps in any channel order.

  • Unreal / EpicT_Rock_BaseColor · T_Rock_N · T_Rock_ORM
  • Substance PainterChair_Wood_BaseColor · Chair_Wood_Normal · Chair_Wood_OcclusionRoughnessMetallic
  • Fab / MegascansT_Cliff_vdzkbf_2K_D · _2K_N · _2K_ORDp
  • Poly Havenbrick_wall_001_diff_2k · _nor_gl_2k · _rough_2k · _ao_2k
  • ambientCGMetal049A_2K-PNG_Color · _NormalDX · _Roughness · _Metalness
Try it

Paste your texture names.

See which texture sets and maps Material Smith finds. This runs the plugin's default name table right here in your browser.

Texture names

One per line. File extensions are fine.
0Texture sets
0Maps
0Not recognized
Features

Everything between import and a working material.

A master material in your project

The first run creates M_Smith_Standard in /Game/MaterialSmith. Only the switches a set needs are turned on, so unused maps cost nothing. Virtual textures get their own variant. Remove the plugin any time; your materials keep working.

Fixes texture settings

sRGB, compression (Normalmap, Masks, BC4 for single channel maps), Flip Green for OpenGL normals and virtual texture streaming. No more sampler type errors.

Your own master materials

Pick any material as the parent. Material Smith guesses which parameter takes which map and remembers it as a Master Profile.

Assigns to meshes

SM_Rock gets MI_Rock. Substance exports land in the matching material slots. Static and skeletal meshes.

Safe to run again

Existing instances are updated, not duplicated. Parameters you tweaked by hand stay. Imported textures are never overwritten.

Preview before you click

For every set, What will happen lists the packing, texture changes, instance path, mesh slots and any problem.

Suggests itself after import

Import a texture set and a notification offers to create the material instances. Masked foliage becomes two-sided automatically.

Python and Blueprint API

Find sets, preview, create instances and pack channels from your own pipeline scripts and Editor Utility Widgets.

Channel packer

Pack ORM textures right here.

Material Smith packs separate roughness, metallic and AO maps while it creates instances, or by hand on itsChannel packer page. This is the same idea as a free tool in your browser: drop your own maps, pick channels, download the PNG.

Source maps

Drop image
Ambient OcclusionSample
Drop image
RoughnessSample
Drop image
MetallicSample
Drop image
HeightSample

Channels

R
G
B
A

Packed texture

Packed in your browser. Your images never leave your computer. In Unreal, Material Smith also sets the result to Masks compression with sRGB off.

Details

Every map, every slot, before anything changes.

Select a set to edit its instance name and folder, blend mode, two-sided, the type of each map, the channels of packed textures, OpenGL and glossiness flags, and which mesh slots get the instance.

Panel walkthrough
Material Smith details for an ambientCG texture set with color, normal, roughness and metalness maps
An ambientCG set: Color, NormalDX, Roughness and Metalness recognized from their names.
The master

M_Smith_Standard

Separate maps have a Use ... Map static switch, so only what a set needs is compiled. Edit the master, move it or replace it with your own.

GroupParameters
Base ColorBase Color Map, Base Color Tint
NormalNormal Map, Normal Strength
RoughnessRoughness Map or packed channel, Invert Roughness (Glossiness), Roughness Min/Max, Roughness (without a map)
MetallicMetallic Map or packed channel, Metallic Intensity, Metallic (without a map)
Ambient OcclusionAmbient Occlusion Map or packed channel, Ambient Occlusion Strength
Packed MapPacked Map and one channel selector each for AO, roughness, metallic and opacity
EmissiveEmissive Map, Emissive Color, Emissive Intensity
OpacityOpacity Map, packed channel or base color alpha, Opacity Strength
HeightHeight Map, Use Height Map (Parallax), Height Ratio
UVUV Tiling, UV Offset
Automate

Part of your pipeline, not just a button.

The editor subsystem exposes the whole workflow to Python and Blueprint: find texture sets in folders, preview what will happen, create or update instances and pack channels.

Python API
smith_props.py
import unreal
smith = unreal.get_editor_subsystem(unreal.TAMaterialSmithSubsystem)

sets = smith.find_texture_sets_in_folders(["/Game/Props"])
for s in sets:
    notes, warnings = smith.preview_texture_set(s, smith.get_default_options())
    print(s.name, "->", s.instance_path, s.instance_name, warnings)

options = smith.get_default_options()
options.pack_channels = True
result = smith.create_material_instances(sets, options)
print(len(result.created_instances), "created,",
      len(result.updated_instances), "updated", list(result.errors))
Get Material Smith

Free. Open source. Ready for UE 5.6 – 5.8.

Material Smith is finishing its release on Fab and GitHub. Join Discord or drop us a line to hear the moment it ships.

FabComing soonSoon
GitHubSource + releasesSoon
FAQ

Questions, answered.

Still curious? Read the full FAQ or contact us.

Is Material Smith really free?

Yes. It is free and open source under the MIT license, including for commercial projects, and it ships with its full C++ source. Channel packing is part of the free version.

Do my materials depend on the plugin?

No. The first run creates the master material M_Smith_Standard and its small default textures in /Game/MaterialSmith as regular assets of your project. Your instances depend on those assets, not on the plugin, so you can remove the plugin at any time.

What happens if I run it again on the same textures?

Existing instances are updated, not duplicated. Textures and switches are refreshed, and parameters you tweaked by hand stay as they are.

Which texture naming conventions are recognized?

Unreal, Substance Painter, Fab / Megascans, Poly Haven and ambientCG names work out of the box, including packed maps like ORM, ARM, MRA, RMA and Megascans ORD. Resolution and file type tokens such as _4K or -JPG are ignored, and the name table is editable in Project Settings.

Can I use my own master material?

Yes. Pick any material as the parent. Material Smith reads its texture parameters and static switches, guesses which map goes where and saves the mapping as a Master Profile in Project Settings, where you can correct it.

Will it overwrite my textures?

Imported textures are never overwritten by packing; packed textures are new assets. With Fix texture settings on, Material Smith changes texture settings such as sRGB, compression and Flip Green so each texture fits its parameter.

What about OpenGL normal maps?

Names like _nor_gl are recognized as OpenGL normal maps and get Flip Green Channel, and you can set the flag by hand for any normal map.

Does it handle foliage and masked materials?

Sets with an opacity map become Masked and two-sided by default.

Which engine versions are supported?

Unreal Engine 5.6, 5.7 and 5.8, in the editor on Win64, Mac and Linux.