Look into DeriveNormalZ to use XY and calc Z on the fly. Can save you a channel, and across 60 textures…
If you pack XYXY into the RGBA of a texture, you could cut the texture-count in half, but memory would be the same as using the alpha channel doubles-up on memory so 1/2 and the double cancel.
Otherwise if you stick with RGB, you can still cut down to 40 textures overall, but you will have to juggle/coordinate as you go.