Texture Channel Packer

Drop your grayscale maps, pick glTF / Unreal ORM, Unity HDRP Mask Map or Unity URP, and download one packed PNG. Or unpack a texture back into its channels.

Free · no signup · your files stay in your browser

What is channel packing?

Channel packing stores several grayscale texture maps in the red, green, blue and alpha channels of one image. A grayscale map needs only one channel, so one RGBA texture can carry up to four maps. The best known example is an ORM texture: ambient occlusion in red, roughness in green and metallic in blue.

Loading the channel packer...

How to pack texture channels

  1. 1

    Drop your maps

    Add AO, roughness, metallic, smoothness, height or any grayscale mask as PNG, JPG or WebP. Names like _ao, _rough and _metal set each map's type; change it if a guess is wrong.

  2. 2

    Pick a layout

    glTF / Unreal ORM, Unity HDRP Mask Map, Unity URP / Built-in, or Custom. Missing maps get a constant value you can set, and any channel can be inverted.

  3. 3

    Download the PNG

    Check the preview and the four channel thumbnails, then save the PNG. In your engine, mark it as non-colour data (sRGB off).

Why ORM and mask maps save memory and samplers

One texture instead of three

Saved as separate RGB images, each grayscale map repeats the same value in all three channels. Packed, those channels carry three different maps, so you load, store and stream one texture where you had three.

Fewer texture samples

The shader reads one texture once and gets AO, roughness and metallic together. Epic's Unreal Engine docs call channel packing a good way to improve material performance by reducing the number of texture samples.

Fewer sampler slots

GPUs and engines give a material a limited number of texture slots. One packed map leaves room for detail maps, masks and decals.

Built into the formats

glTF 2.0 reads occlusion from red and roughness and metallic from green and blue, so its occlusion and metallic-roughness slots can point to the same ORM image. Unity's HDRP and URP Lit shaders read their own packed layouts.

Channel layouts in this tool

LayoutRGBAUsed by
glTF / Unreal ORMAmbient occlusionRoughnessMetallicnot used (RGB PNG)glTF 2.0 (Blender, three.js, Godot, Babylon.js), Unreal Engine
Unity HDRP Mask MapMetallicAmbient occlusionDetail maskSmoothnessUnity HDRP Lit shader, Mask Map slot
Unity URP / Built-in MetallicMetallicOcclusion (URP)not usedSmoothnessUnity URP Lit (Metallic and Occlusion slots), Built-in Standard (Metallic slot reads R and A)
Customany mapany mapany mapany map or noneYour own shader or engine

Sources: glTF 2.0 specification (Khronos) · Unity HDRP: Mask and detail maps · Unity URP: channel-packed texture · Unity Built-in: Metallic mode · Unreal Engine glTF packing flags

Smoothness vs roughness

Roughness and smoothness describe the same thing from opposite ends. In a roughness map, black (0) is a mirror-smooth surface and white (1) is fully rough; glTF, Unreal Engine and Blender use roughness. Unity's Lit shaders use smoothness, where white is smooth and black is rough.

So smoothness = 1 - roughness, or 255 - roughness for 8-bit values. When you pick a Unity layout and drop a roughness map, this tool inverts it into the alpha channel for you. When you drop a smoothness or gloss map, it goes in as it is. Going the other way, unpack a Unity mask map and tick Invert on the alpha channel to save a roughness map.

Related tools

Frequently Asked Questions

ORM stands for occlusion, roughness, metallic. It is one RGB texture with ambient occlusion in the red channel, roughness in green and metallic in blue. glTF 2.0 reads exactly this layout, and Unreal Engine materials commonly use it.
Red is metallic, green is ambient occlusion, blue is the detail mask and alpha is smoothness, as listed in Unity's HDRP documentation. Unity URP Lit uses red for metallic, green for occlusion and alpha for smoothness, and leaves blue unused.
Invert it: smoothness = 1 - roughness. Pick a Unity layout here and drop your roughness map; the tool inverts it into the smoothness channel. You can also tick Invert on any channel in Custom.
The packer uses the size of the largest map and resamples the smaller ones to it (bilinear), and it tells you which maps were resized. For the sharpest result, export all maps at the same size.
Yes. A browser canvas multiplies colours by alpha, which wipes the colour of fully transparent pixels. This tool reads and writes the PNG bytes itself, so a pixel with alpha 0 keeps its red, green and blue values.
Yes. Switch to Unpack, drop the texture, pick its layout, and download each channel as a grayscale PNG or all four in one ZIP.
PNG, JPG and WebP up to 8192 x 8192 pixels go in, and 8-bit PNGs come out (16-bit PNGs are read as 8-bit). Everything runs in your browser: nothing is uploaded, and there is no signup.