Skip to Content
DocumentationToolsTexture Channel Packer

Texture Channel Packer

The Texture Channel Packer combines up to four greyscale maps — typically Metallic / AO / Smoothness / Height — into a single RGBA texture. Packing reduces texture samplers per pixel, improves cache coherence, and matches the layout Genesis expects on its _MaskMap slot. The packer handles color-space conversions so you do not double-gamma your data.

When to use it

  • Optimization pass — pack mask data to reduce sampler count from four to one.
  • Adopting Genesis_MaskMap expects R=Metallic, G=AO, B=Smoothness, A=Height. Convert from any other layout.
  • Mobile builds — packed textures compress better and lower bandwidth.

Opening the tool

Window → Genesis → Texture Channel Packer.

Screenshot

The Texture Channel Packer window with the four R/G/B/A source slots filled by Metallic, AO, Smoothness, and Height maps, the per-slot source-channel dropdowns, color space and compression options, and a preview of the packed RGBA result.

tools/texture-channel-packer/texture-channel-packer-window.png

Workflow

  1. Assign source textures to the R, G, B, and A slots. Each slot accepts a Texture2D, an asset path, or a constant value (0.0–1.0).
  2. Choose the source channel per slot. If a source map is 3-channel RGB, pick which channel to extract (defaults to R).
  3. Pick the output color space. Linear for mask data; sRGB only if a slot represents a color (uncommon for packs).
  4. Choose resolution and compression. Match the highest source resolution; pick BC7 for desktop or ASTC 6×6 for mobile.
  5. Pack. Output is written to your chosen path. If a Genesis material is selected, the packer offers to auto-assign the result to _MaskMap.

Settings

Inspector labelShader propertyTypeDefaultDescription
Output PathOutput PathString<source folder>/packed.pngWhere the packed texture is written.
Color SpaceColor SpaceEnumLinearLinear for masks; sRGB for color-channel packs.
ResolutionResolutionInt<max source>Output size. Defaults to the largest source; sources are bilinearly resized when sizes differ.
CompressionCompressionEnumBC7BC7 (desktop), ASTC 6×6 (mobile), or Uncompressed.
Source Channel R/G/B/ASource Channel R/G/B/AEnumRWhich channel of each source is read into the corresponding output channel.
Invert R/G/B/AInvert R/G/B/ABoolfalsePer-channel invert. Useful when source roughness should be packed as smoothness.

Tips & gotchas

  • Genesis convention is R=Metallic, G=AO, B=Smoothness, A=Height. The packer’s default preset matches this.
  • If your source uses roughness and Genesis expects smoothness, enable Invert B to flip it during pack.
  • Source mip maps are read at mip 0 to avoid pre-filtering artifacts.

Do not pack a height map into a channel another shader interprets as AO — height ranges 0–1 across the mesh, AO usually clusters near 1. Mixing them produces incorrect shading.

Last updated on