TC_NormalMap alpha channel always discarded?

I wanted to import a normal map with AO in it’s alpha. But it turns out that even with “Compress without alpha” disabled, the alpha channel still gets scrapped when the compression setting is TC_Normalmap.
I know it’s an unusual place for an AO map :), but I just wanted to create a Multi-Layer material with quite a lot of layers as an experiment and for this I need to minimize the number of texture samplers, even at the cost of memory. Why is it like that and can it be changed? Can the Alpha somehow adversely affect the compression or something?

Also, why even in a completely empty material with no textures and only scalar values are there still 3/16 texture samplers used?

With TC_Normalmap the texure compression is set to BC5. This format stores 2 texture channels (RG) at high precision (the blue channel gets reconstructed in the material automatically) and threfore no additional texture channels are available.

What you can do as a workaround is changing the compression to TC_Default. Then in the material use a color tetxure sampler and convert your normals from 0…1 to -1…1 range with a simple multiply/add, x*2-1 or (x-0.5)*2. You will notice a drop in quality when using this type of compression, similar to TC_Normalmap in UE3/UDK.

I knew how BC5 compression worked but never knew that that meant no additional channels are available. Interesting.

Thanks, yeah, I guess I could do it this way, but, you’re right about the quality. I dropped using the default DX9 DXT compression in UE3 and switched to BC5 a long time ago for those quality reasons.

Still would love to get an answer to this question:

I know it’s something that most likely can not be changed anyway, but it would help my understanding of what is going on a lot. Thanks in advance to anyone who could explain :slight_smile:

In UE3 some texture samples were required by the engine for the lighting (for lightmaps purpose I presume). I guess it’s the same behavior here. You could get those samples back by disabling the “static mesh” setting in the material I think.

Some channels are reserved for engine uses, like light mapping.

Makes sense, thanks.

I’d guess one texture sampler is also required for the default cubemap reflection.