Inu Games - Texture Channel Packer

Texture channel packing tool allows to pack channels directly in Unreal Editor, without using other software.

Texture channel packing is a technique used to store multiple images in a single texture. This is done by assigning each image to a different channel of the texture. For example you can save the base color in R,G,B channels and roughness in Alpha, or store the normal map in R,G, roughness in B and specular in Alpha channel. Texture channel packing is commonly used in Unreal.

Video | Documentation

Example Use Cases:

  • Pack: combine textures in 1 texture asset (example: AO, Roughness, Metallic textures->ORM)
  • Repack: change the order of channels. (example: ORM -> RMO)
  • Unpack: extract channels into separate assets (ORM -> AO, Roughness, Metallic texture assets)
  • and other operations that rely on copying of texture channels

Features:

  • Extract channels from any texture2d asset and pack them into a new texture
  • Define output texture settings: compression, mip maps, srgb, filtering, etc.
  • Can create multiple textures in one go
  • Save presets for your packing scenarios
  • Input patterns allow to drag and drop multiple input textures at once

Texture Channel Packer tool allows to pack channels directly in Unreal, without using other software.

https://www.unrealengine.com/marketplace/en-US/product/texture-channel-packer-01

Texture channel packing is a technique used to store multiple images in a single texture. This is done by assigning each image to a different channel of the texture. For example you can save the base color in R,G,B channels and roughness in Alpha, or store the normal map in R,G, roughness in B and specular in Alpha channel. Texture channel packing is commonly used in Unreal.

Video | Documentation

Example Use Cases:

  • Pack: combine textures in 1 texture asset (example: AO, Roughness, Metallic textures->ORM)
  • Repack: change the order of channels. (example: ORM → RMO)
  • Unpack: extract channels into separate assets (ORM → AO, Roughness, Metallic texture assets)
  • and other operations that rely on copying of texture channels

Features:

  • Extract channels from any texture2d asset and pack them into a new texture
  • Define output texture settings: compression, mip maps, srgb, filtering, etc.
  • Can create multiple textures in one go
  • Create presets for your packing scenarios
  • Input patterns allow to drag and drop multiple input textures at once
  • BP API to read and write texture channels

https://www.unrealengine.com/marketplace/en-US/product/texture-channel-packer-01

2 Likes

This looks awesome! Something I’ve wanted to make myself for some time. One question: Can you use this functionality via Utility BPs/Python for automated processing? Thanks in advance and great work!

1 Like

Thank you

The core functions, reading and writing textures, are in C++ and exposed to BPs and also should be visible from Python I suppose. The tool itself, UI and main logic is implemented as an editor utility BP. So I think it’s possible already to modify that to do some automatic processing. But because it’s all very new it’s also possible we will change the API.

We are actually already started looking how to implement a batch processing.

Do you have some example use cases of automated processing you would like to see?

Hi, I wanted to strip the alpha channel from existing texture to make it smaller. Dropped same texture on 3 rgb channels, left alpha empty, compression left on default. result still seems to have the alpha channel?

Hi, there are 2 alphas: alpha in the source texture and alpha in the compressed texture. To reduce the size of the texture in game you have to check “compress without alpha” checkbox, it will be smaller. The “source alpha detected” basically tests that your alpha channel is white. If it’s white then source alpha detected = false, otherwise it’s true. But it doesn’t really changes the size of the asset afaik.

Hi. How do I use the tool for unpacking textures?

Hi! You can output 3 times (in r,g and b) the same input channel.

ps : I just realized your question is from Jan 16, but the forum only notified me now about your question! sorry

Hi,
Could you explain the unpacking process in more detail? I see your response above but I’m not following the instructions you wrote. I need to unpack an RGB packed texture in 3 separate texture files.
Thanks!

Hi. You need to create 3 output textures by clicking on “New output texture” button, configure them with the name and texture parameters you want. Then first output will have Red,Red,Red in all 3 channels, second will have Blue, Blue, Blue and third Green, Green, Green

1 Like

Would it be possible to have combined RGB and RGBA as an input for channel as additional options to the current single channels?. So I can pack color RGB PolyGroup ID texture into single channel to be used as multiplier for color variation for my shader?. Converting that input ID texture into greyscale does nothing because Unreals formats are always based on either R or A, they don’t take RGB as greyscale.

Hi, can you explain how do you want to combine the channels? Something like R x G x B → R ? Right now it’s not possible but we can see if we can add it

Yeah, just grab RGB and dot with vec3(0.2126, 0.7152, 0.0722) will give greyscale. Actually now AI suggested R+G+B / 3 might be more useful for generated masks because even when color that is what one might plug in usually (like that mentioned poly ID). Dot is for visually pleasing, but this is mostly for masks anyway so linear generated stuff.

This will internally allow you to grab one of combined channels and you can list that method on the input list as RGB. That way I can grab color texture like poly ID and plug it into for example G.

I cannot do that with just file compression setting because all Unreal textures only grab one channel, either R or A without combining.

TLDR: Yes I want combined R+G+B turned into greyscale so I can plug it into one of the channels because sometimes textures I want to use are originally generated in color.

Thanks.