Code FIRSTPACK: 100 credits for $5 or 200 for $10, for the first 1000 orders. Credits never expire. See packs

Texture channel packer: ORM for Unreal, mask maps for Unity

Pack ambient occlusion, roughness and metallic into one Unreal ORM texture, or build a Unity HDRP mask map with smoothness, then download the PNG. A separate step flips a normal map between DirectX and OpenGL. Free, no account needed.

Your textures stay on your device: this browser tab reads and packs them, and nothing is uploaded.

Pack for

R ambient occlusion · G roughness · B metallic

Red channel: Ambient occlusion

Until you add one, this channel is the constant 1.00.

Writes 1 minus the value.

Green channel: Roughness

Until you add one, this channel is the constant 0.50.

Tick if your map is gloss or smoothness.

Blue channel: Metallic

Until you add one, this channel is the constant 0.00.

Writes 1 minus the value.

Packed Unreal ORM

Add at least one image: it sets the size of the packed texture.

The packed texture appears here.
R: ambient occlusion
G: roughness
B: metallic
Saves as T_Texture_ORM.png

Need the whole material, not only the packed map?

MaterialForge turns a short description of a surface into a UE5 material: Base Color, Normal, Roughness and Ambient Occlusion maps with an Unreal material recipe. Its downloads come as Unreal + ORM, OpenGL or Unity HDRP sets with these same packed layouts, and Apply in UE5 sends a material into your project through the free desktop app. A material costs 4 credits, and a new account starts with 50 free credits.

Flip a normal map's green channel

Unreal reads DirectX normal maps; Blender, Unity and Godot read OpenGL. The two differ only in the green channel, so flipping it converts the map either way.

Direction
Saves as T_Texture_N_OpenGL.png

The layouts

  • Unreal ORM: R ambient occlusion, G roughness, B metallic. In the material, sample it once and wire R to Ambient Occlusion, G to Roughness and B to Metallic. Set the texture's compression to Masks (no sRGB).
  • Unity HDRP mask map: R metallic, G ambient occlusion, B detail mask, A smoothness. Smoothness is 1 minus roughness, so the packer inverts your roughness map for you. Turn sRGB (Color Texture) off on import. URP and the Built-in pipeline pack their maps differently.
  • Normal map green flip: Unreal reads DirectX normal maps (green pointing down). Blender, Unity and Godot read OpenGL (green pointing up). Flipping the green channel converts either way.

These are the same layouts MaterialForge writes into its Unreal + ORM and Unity HDRP downloads, so a map packed here and one from a MaterialForge ZIP line up channel for channel.

Questions

What is an ORM texture?

One texture that holds three grayscale maps: ambient occlusion in red, roughness in green and metallic in blue. One texture sample instead of three saves memory and texture samplers, which is why many Unreal projects pack their maps this way.

My map is gloss or smoothness, not roughness. What do I do?

Tick Invert on that slot. Gloss and smoothness are 1 minus roughness, so inverting turns one into the other. For the Unity mask map, the packer already writes smoothness from roughness; tick Invert there only when your map is already smoothness.

How do I know if a normal map is DirectX or OpenGL?

Light it from above. If the bumps look like dents, or the lighting seems to come from below, the green channel is the wrong way round for your engine. Flip it here, or in Unreal tick Flip Green Channel on the texture.

What happens when my images are different sizes?

The packer lists the sizes and packs nothing until they match. You can export the maps at one size, or choose to scale the smaller ones up to the largest with bilinear filtering. It never resizes an image without asking.

Which files can it read?

PNG, JPG and WebP, up to 100 MB and 8192 px on each side, so 4K maps are fine. A map is read from its red channel, as grayscale maps store the same value in every channel. The download is an 8-bit PNG. Browsers cannot open TGA, EXR or TIFF; convert those to PNG first.

What does the page count?

If you accepted analytics, it counts which pack you made, its pixel size and whether you downloaded it. Never a file name and never an image.