public static Material[] GetMatsFrom(GraphicRequest req, Texture2D[] inputTextureArray, Texture2D[] inputMaskArray)
        {
            Material[] matArray = new Material[inputTextureArray.Length];

            for (int i = 0; i < inputTextureArray.Length; i++)
            {
                if (inputTextureArray[i] != null)
                {
                    Texture2D mask;
                    if (inputMaskArray[i] != null)
                    {
                        mask = inputMaskArray[i];
                    }
                    else
                    {
                        mask = HairMasker.GetDefaultMask(inputTextureArray[i].width, inputTextureArray[i].height);
                    }

                    MaterialRequest tempMatReq = default(MaterialRequest);
                    tempMatReq.mainTex          = inputTextureArray[i];
                    tempMatReq.shader           = req.shader;
                    tempMatReq.color            = req.color;
                    tempMatReq.colorTwo         = req.colorTwo;
                    tempMatReq.maskTex          = mask;
                    tempMatReq.shaderParameters = req.shaderParameters;

                    matArray[i] = MaterialPool.MatFrom(tempMatReq);
                }
            }

            return(matArray);
        }
        public static Material[] ProcessGradientMats(GraphicRequest req, Texture2D[] inputTextures, Texture2D[] inputTextureMasks, Texture2D gradientMask, Color gradientColor)
        {
            //bake textures with only HairColor2 applied via original texture masks
            Color temp = req.color;

            req.color = Color.white;
            Material[] firstPassMats = GetMatsFrom(req, inputTextures, inputTextureMasks);
            for (int i = 0; i < inputTextures.Length; i++)
            {
                inputTextures[i] = BakeTexture(inputTextures[i], firstPassMats[i]);
            }

            //prepare combined gradient masks
            for (int i = 0; i < inputTextures.Length; i++)
            {
                inputTextureMasks[i] = HairMasker.CombineWithGradientMask(inputTextureMasks[i], gradientMask);
            }

            //use combined masks on baked textures with original colors
            req.color    = temp;
            req.colorTwo = gradientColor;
            return(GetMatsFrom(req, inputTextures, inputTextureMasks));
        }