Version: 2021.1
言語: 日本語
3D テクスチャ
キューブマップ

テクスチャ配列

テクスチャ配列は、サイズ、形式、フラグが同じ 2D テクスチャの集まりで、GPU からは単体のオブジェクトのように見えます。さらに、シェーダーからはテクスチャ要素インデックスでサンプリングすることができます。それらは、独自の環境 (terrain) レンダリングシステムを実装する場合や、サイズと形式が同じ多数のテクスチャにアクセスする必要がある特殊な効果を使う場合に有用です。2Dテクスチャ配列の要素は、スライスやレイヤーとしても知られています。

プラットフォームサポート

テクスチャ配列には基礎となるグラフィックス API と GPUによるサポートが必要です。以下のプラットフォームで可能です。

  • Direct3D 11/12 (Windows, Xbox One)
  • OpenGL Core (Mac OS X, Linux)
  • Metal (iOS, Mac OS X)
  • OpenGL ES 3.0 (Android, WebGL 2.0)
  • PlayStation 4

他のプラットフォームはテクスチャ配列をサポートしません (OpenGL ES 2.0 or WebGL 1.0)。ランタイムにテクスチャ配列のサポートを定義するには、SystemInfo.supports2DArrayTextures を使用します。

テクスチャ配列のインポート

セルに分割されたソーステクスチャファイルから、テクスチャ配列をインポートすることができます。これをフリップブックテクスチャーと呼びます。これは、以下のように行います。

  1. ソーステクスチャを Unity プロジェクトにインポートします。
  2. Project ビューで、出来上がったテクスチャアセットを選択します。Unity は Inspector にテクスチャのインポート設定を表示します。
  3. Inspector で、Texture Shape2D Array に設定します。Unity は Columns と Rows のプロパティを表示します。
  4. Columns (列) と Rows (行) を、フリップブックのテクスチャに適した値に設定します。
  5. Apply をクリックします。

詳しくは、テクスチャのインポート設定 を参照してください。

スクリプトによるテクスチャ配列の作成と操作

C#スクリプトからテクスチャ配列を作成するには、Texture2DArray クラスを使用して、テクスチャの初期化とピクセルデータの設定を行い、AssetDatabase.CreateAsset を使用して、オブジェクトをアセットファイルとして保存します。

通常、テクスチャ配列は完全に GPU メモリ内で使用されます。ただし、Graphics.CopyTexture, Texture2DArray.GetPixels, Texture2DArray.SetPixels はピクセルをシステムメモリに変換したり、その逆を行うのに使用できます。

レンダリングターゲットとしてのテクスチャ配列の使用

テクスチャ配列の要素はレンダリングターゲットとして使用されることもあります。レンダリングターゲットを 2D テクスチャ配列にするかどうかを事前に取得するには、RenderTexture.dimension を使用します。Graphics.SetRenderTargetdepthSlice 引数は、レンダリングするミップマップレベルやキューブマップ面を指定します。「レイヤーレンダリング」 (例えば、ジオメトリシェーダーなど) をサポートするプラットフォーム上で、depthSlice 引数を –1 にするとテクスチャ配列全体をレンダリングターゲットに設定することができます。また、ジオメトリシェーダーを使うと個々の要素にレンダリングすることができます。

3D テクスチャ
キューブマップ