Texture Channel PackerAll ToolsStart a project ↗

XO3D Labs / Material channels

Texture channel packer

Give every channel a clear job. Pack occlusion, roughness and metalness into one ORM texture, choose a custom RGBA mapping, or split a packed PNG into separate grayscale maps.

Raw 8-bit PNG values. No colour-space conversion, no alpha premultiplication and no upload. Up to 2,048 pixels per edge.

R occlusion / G roughness / B metalness / A 255

R channel

Occlusion in ORM. White means no occlusion.

Constant value (no source image)

G channel

Roughness in ORM. Invert a gloss map only when that convention is correct.

Constant value (no source image)

B channel

Metalness in ORM. Black is non-metal.

Constant value (no source image)

A channel

Alpha is unused by ORM. Keep 255 unless your own material needs it.

Constant value (no source image)

Your output

No current output.

Pack for the material you actually use

For glTF, roughness is read from G and metalness from B in the metallic-roughness texture. Occlusion is read from R through the occlusion texture binding. Both bindings can reference the same image, producing the common ORM layout. Packing pixels does not create those material bindings.

Select the source channel deliberately. A grayscale source repeats the same value in R, G and B; an already packed source may hold a different map in each channel. Invert is a simple 255-minus-value operation, useful for a known gloss-to-roughness conversion. It does not identify what the source represents.

Defaults are 255 occlusion, 255 roughness, 0 metalness and 255 alpha. These are this tool's starting choices, not a claim that all glTF material defaults are non-metallic.

Keep the numbers trustworthy

This tool reads non-interlaced 8-bit grayscale, grayscale-alpha, RGB and RGBA PNG samples directly. It ignores display colour metadata deliberately; it does not linearise or apply gamma. Palette, interlaced, 16-bit, animated PNG, JPEG and WebP inputs are not supported. Each file is limited to 20 MB and each edge to 2,048 pixels.

Mismatched dimensions are refused by default. Explicit nearest-neighbour resampling selects existing source pixels; it does not add detail or smooth masks. All sources must share the UV layout and orientation you intend to use.

Downloads are written from raw pixel values, so transparent RGB is retained. The browser preview may composite alpha and is not a shader preview. Use data/non-colour sampling in the destination material and check the actual surface.

Try the reproducible example

The original synthetic 64 x 64 example uses a horizontal red ramp (x times 4), a vertical green ramp (y times 4), an 8-pixel black-and-white checker in blue, and opaque alpha. At pixel (8, 16), the packed value is [32, 64, 255, 255]. Split the result to inspect each pattern separately.

The mapping receipt records output dimensions, source dimensions, channel choices, constants, inversion and the resampling rule. It contains no filenames. Your files, images and receipt stay in this browser.

Continue the material workflow

Technical reference: Khronos glTF 2.0 material specification. The sample is original synthetic data, not client work. PNG export is local and free, with no account required.