纹理数组是具有相同大小/格式/标记的 2D 纹理的集合,这些纹理对于 GPU 而言像是单个对象,并可在着色器中使用纹理元素索引进行采样。它们可以用于实现自定义地形渲染系统或其他特殊效果,让您高效访问大量相同大小和格式的纹理。2D 纹理数组的元素也称为切片或图层。
纹理数组需要受到底层图形 API 和 GPU 的支持。纹理数组在以下平台上可用:
其他平台(OpenGL ES 2.0 或 WebGL 1.0)不支持纹理数组。可使用 SystemInfo.supports2DArrayTextures 在运行时确定纹理数组支持情况。
可以从划分成单元格的源纹理文件导入纹理数组。这些被称为翻页纹理。为此需要执行以下操作:
1.将源纹理导入您的 Unity 项目。 2.在您的项目视图中,选择生成的纹理资源。Unity 将在 Inspector 中显示纹理导入设置。 3.在 Inspector 中,将 Texture Shape 设置为 2D Array。Unity 显示 Columns 和 Rows 属性。 4.将 Columns 和 Rows 设置为适用于翻页纹理的值。 5.单击 Apply。
有关更多信息,请参阅纹理导入设置。
从 C# 脚本创建纹理数组,使用 Texture2DArray 类来初始化纹理和设置像素数据,并使用 AssetDatabase.CreateAsset 将对象保存为资源文件。
通常,纹理数组完全是在 GPU 内存中使用,但您可以使用 Graphics.CopyTexture、Texture2DArray.GetPixels 和 Texture2DArray.SetPixels 与系统内存之间双向传输像素。
纹理数组元素也可用作渲染目标。使用 RenderTexture.dimension 提前指定渲染目标是否是 2D 纹理数组。Graphics.SetRenderTarget 的 depthSlice 参数可指定要渲染到的 Mipmap 级别或立方体贴图面。在支持“分层渲染”(例如,几何着色器)的平台上,可将 depthSlice 参数设置为 –1 以便将整个纹理数组设置为渲染目标。此外还可使用几何着色器来渲染到个别元素中。