Search code examples
unity-game-engineshaderhlslshaderlab

Unity Pass multiple textures(array) into shader?


Right now in my shader, I have 5 textures,

 Properties
     {
         _MainTex ("Texture", 2D) = "white" {}
         _MainTex2("Texture2", 2D) = "white" {}
         _MainTex3 ("Texture3", 2D) = "white" {}
             _MainTex4 ("Texture4", 2D) = "white" {}
             _MainTex5 ("Texture5", 2D) = "white" {}
     }

Is that possible I can make it an array so that I dont need to declare so many textures?


Solution

  • You can use the 2DArray type which will allow you to do so.

    Properties
    {
        _TheTextureArray ("Tex", 2DArray) = "" {}
    }
    

    You can find more information about it here : https://docs.unity3d.com/Manual/SL-TextureArrays.html

    Please do take note of the tech limitations (example, DX11/12) so it will not work on all environments by default, certainly not the web (currently).