Version: 2019.4
言語: 日本語
テクスチャタイプ
レンダーテクスチャ

プラットフォーム固有のオーバーライドのためのテクスチャ圧縮形式

Unity は、テクスチャ (JPG、PNG、PSD、TGA など) をインポートするためのソースファイルとして多くの一般的な画像形式をサポートしています。ただし、グラフィックスカードやモバイルデバイスなどの 3D グラフィックスハードウェアでは、リアルタイムのレンダリングでこれらの形式を使用しません。3D グラフィックスハードウェアでは、高速テクスチャサンプリングに最適化された専用の形式でテクスチャを圧縮する必要があります。様々なプラットフォームとデバイスにはそれぞれ独自のフォーマットがあります。

デフォルトでは、Unity エディターは自動的にテクスチャを最適な形式に変換して選択したビルドターゲットに一致させ、変換したテクスチャのみをビルドに加えます。ソースアセットファイルは、プロジェクトの Assets フォルダーに元の形式のまま残ります。ただし、ほとんどのプラットフォームは、選択可能ないくつかのテクスチャ 圧縮形式をサポートしています。

Unity にはプラットフォームごとにデフォルトのフォーマットがありますが、それらをオーバーライドして一部のテクスチャに異なる圧縮形式を選択することができます (例えば、テクスチャをマスクとして使用する場合、チャンネル 1 つを使って、BC4 形式を使用してファイルサイズを削減し、品質を維持することもできます)。

このページには以下の情報が含まれています。


テクスチャのインポートに関する一般的な情報とオーバーライドの設定方法については、テクスチャのインポート設定 を参照してください。

テクスチャ圧縮の概念

このページでは、以下の概念を使用します。

  • RGB は赤、緑、青をさまざまな割合で加え、幅広い色の配列を作成するカラーモデルです。
  • RGBA はアルファチャンネルを持つ RGB の一種で、ブレンドと透明度の変更が可能です。
  • ピクセルあたりのビット (BPP) は 1 ピクセルに必要なストレージの量です。この値が低いほど、より多くのピクセルを GPU のキャッシュに格納でき、テクスチャへのアクセスが速くなります。
  • 可変ビットレート (VBR) は、ピクセルあたりのビット数が固定値ではなく、実際のコンテンツに依存することを意味します。VBR は クランチ圧縮 にのみ、そしてディスク上のテクスチャサイズにのみ適用されます。メモリ内のサイズは、基礎となるテクスチャ形式を使用する場合と同じです (例えば、RGB Crunched DXT1 のための RGB Compressed DXT1)。
  • クランチ圧縮 は、DXT または ETC などのテクスチャ圧縮の上に使用できる損失のある (圧縮中にデータの一部が失われることを意味します) 圧縮形式です。テクスチャは CPU で DXT か ETC に解凍され、ランタイムに GPU に読み込まれます。クランチ圧縮は、テクスチャが使用するディスクスペースをできるだけ少なくしつつ、ランタイムのメモリ使用量に影響を与えたくない場合に役立ちます。クランチテクスチャは、圧縮するのにかなり時間がかかりますが、ランタイムでの解凍は高速です。

サポートされているプラットフォームのデフォルト形式

以下は各プラットフォームで使用されるデフォルト形式を表しています。

プラットフォーム カラーモデル 圧縮なし 標準品質 (デフォルト) 高品質 低品質 (高パフォーマンス)
Windows、Linux、macOS、PS4、XBox One RGB RGB 24 bit RGB Compressed DXT1 RGB(A) Compressed BC7 RGB Compressed DXT1
RGBA RGBA 32 bit RGBA Compressed DXT5 RGB(A) Compressed BC7 RGBA Compressed DXT5
HDR RGBA Half RGB Compressed BC6H RGB Compressed BC6H RGB Compressed BC6H
WebGL RGB RGB 24 bit RGB Compressed DXT1 RGB Compressed DXT1 RGB Compressed DXT1
RGBA RGBA 32 bit RGBA Compressed DXT5 RGBA Compressed DXT5 RGBA Compressed DXT5
Android (ビルド設定で Don’t override (オーバーライドしない) が有効になっている場合のみ) RGB RGB 24 bit RGB Compressed ETC RGB Compressed ETC RGB Compressed ETC
RGBA RGBA 32 bit RGBA Compressed ETC2 RGBA Compressed ETC2 RGBA Compressed ETC2
iOS RGB RGB 24 bit RGB Compressed PVRTC 4 bits RGB Compressed PVRTC 4 bits RGB Compressed PVRTC 2 bits
RGBA RGBA 32 bit RGBA Compressed PVRTC 4 bits RGBA Compressed PVRTC 4 bits RGBA Compressed PVRTC 2 bits
tvOS RGB RGB 24 bit RGB Compressed ASTC 6x6 block RGB Compressed ASTC 4x4 block RGB Compressed ASTC 8x8 block
RGBA RGBA 32 bit RGBA Compressed ASTC 6x6 block RGBA Compressed ASTC 4x4 block RGBA Compressed ASTC 8x8 block
デフォルト RGBA RGBA 32 bit RGBA 16 bit RGBA 16 bit RGBA 16 bit

サポートするすべてのテクスチャ圧縮形式

下の表は、各プラットフォームで使用可能なテクスチャ圧縮形式のオプションと、結果として得られるディスクの圧縮ファイルサイズ (256 x 256 ピクセルの画像に基づく) を示しています。

テクスチャ圧縮形式の選択は、ファイルサイズ、品質、圧縮時間のバランスによります。品質が高いほどファイルサイズは大きくなります。最高のパフォーマンスを得るには、特にモバイルデバイスでは、アプリケーションがターゲットとするハードウェアがサポートするピクセルあたりのビット数が (その形式が十分な視覚的品質を提供する範囲で) 最も少ない形式を使用します。

プラットフォームごとにハードウェアが異なり、特定の圧縮形式で最も効率的に動作するように最適化されています。ターゲットプラットフォームがサポートするテクスチャ圧縮形式を使用する場合、GPU はそれを直接使用でき、プラットフォームはテクスチャをサポートされている形式に解凍するためにリソースをまったく消費しません。これにより、アプリケーションのパフォーマンスを向上させることができます。

ターゲットプラットフォームでサポートされていないテクスチャ 圧縮形式を使用する場合、テクスチャは (特に記載がない限り) RGBA 32 ビットに解凍され、圧縮されたテクスチャと一緒にメモリに格納されます。これにより、テクスチャの読み込み時間が長くなり、追加のメモリを使用します。つまり、互換性のない形式を選択すると、アプリケーションのパフォーマンスに影響を与える可能性があります。

以下の表は、各圧縮形式でサポートされているプラットフォームを示しています。

ノート: メモリ内サイズは 256 x 256 ピクセルのテクスチャに基づいています。

テクスチャ圧縮形式 説明  メモリサイズ Windows Linux Mac PS4 Xbox One Android iOS tvOS WebGL
RGB Compressed DXT1 圧縮され正規化された符号なし整数 RGB テクスチャ。 32KB / 4 bpp 一部可 (1) 不可 不可 一部可 (2)
RGB Crunched DXT1 RGB Compressed DXT1、追加クランチ圧縮を伴う。 VBR 一部可 (1) 不可 不可 一部可 (2)
RGBA Compressed DXT5 圧縮され正規化された符号なし整数 RGBA テクスチャ。 64KB / 8 bpp 一部可 (1) 不可 不可 一部可 (2)
RGBA Crunched DXT5 RGBA Compressed DXT5、追加クランチ圧縮を伴う。 VBR 一部可 (1) 不可 不可 一部可 (2)
RGB Compressed BC6H 圧縮された符号なし Float/ハイダイナミックレンジ (HDR) RGB テクスチャ。 64KB / 8 bpp 一部可 (3) 一部可 (3) 不可 不可 不可 不可
RGB(A) Compressed BC7 圧縮され正規化された unsigned int の RGB または RGBA テクスチャ。 64KB / 8 bpp 一部可 (3) 一部可 (3) 不可 不可 不可 不可
RGB 16 bit 非圧縮形式のアルファを伴わない 65536 色。圧縮された形式よりもメモリを消費しますが、UI やグラデーションのないくっきりとしたテクスチャにより適しています。 128KB / 16 bpp
RGB 24 bit アルファなしのトゥルーカラー 192KB / 24 bpp
RGB9e5 32 ビット共有指数浮動 Float アルファチャンネルのない浮動小数点/ハイダイナミックレンジ (HDR) テクスチャ 256 KB / 32 bpp 一部可 (4) 一部可 (4) 一部可 (4) 一部可 (4)
Alpha 8 高品質の非圧縮アルファチャンネル 64KB / 8 bpp
R 8 高品質の非圧縮シングルチャンネルテクスチャ 64KB / 8 bpp 一部可 (5) 一部可 (5) 一部可 (5) 一部可 (5)
R 16 ビット 超高品質の非圧縮シングルチャンネルテクスチャ 128KB / 16 bpp 一部可 (6) 一部可 (6) 一部可 (6) 不可
RGBA 16 bit 低品質のトゥルーカラー 128KB / 16 bpp
RGBA 32 bit アルファ付きトゥルーカラー 256KB / 32 bpp
RGBA Half 半精度浮動小数点/ハイダイナミックレンジ (HDR) RGBA 形式 512KB / 64bpp 一部可 (7) 一部可 (7) 一部可 (7) 一部可 (7)

ノート:

  1. Nvidia Tegra GPU のみ。
  2. sRGB DXT をサポートしないウェブブラウザーの リニアレンダリング では、テクスチャはランタイムに RGBA32 に解凍されます。
  3. Windows Direct3D 11、Windows OpenGL 4、macOS Metal。Direct3D 10 Shader Model 4 と OpenGL 3 GPU (Windows) を持つプラットフォームと macOS OpenGL では、BC6H テクスチャは RGBA Half に解凍され、BC7 テクスチャは RGBA32 に解凍されます。
  4. Metal (iOS と tvOS); Vulkan、OpenGL ES 3.0、Nvidia Tegra (Android); WebGL 2 が必要です。
  5. Metal (iOS と tvOS); Vulkan、OpenGL ES 3.0、GL_EXT_texture_rg 拡張 (Android); WebGL 2 が必要です。
  6. Metal (iOS と tvOS); Vulkan、OpenGL ES 3.0、GL_EXT_texture_norm16 拡張 (Android) が必要です。
  7. Metal (iOS と tvOS); Vulkan、OpenGL ES 3.0、GL_OES_texture_half_float 拡張 (Android); WebGL 2、OES_texture_half_float 拡張 (WebGL) が必要です。

DDS ファイルからテクスチャをインポートできますが、DXT か BC 圧縮形式、または、解凍したピクセル形式のみがサポートされます。

モバイルと WebGL 特有の形式

下の表に示された形式は、Android、iOS、tvOS、WebGL でのみサポートされています。

ノート: サイズは 256 x 256 ピクセルのテクスチャに基づいています。

テクスチャ圧縮形式 説明  サイズ Android iOS tvOS WebGL
RGB Compressed ETC 圧縮 RGB テクスチャ。この形式は、すべての OpenGL ES 2.0 GPU でサポートされています。 32KB / 4 bpp 一部可 (1)
RGB Crunched ETC RGB Compressed ETC、追加クランチ圧縮を伴う。 VBR 一部可 (1)
RGB Compressed ETC2 圧縮された RGB テクスチャ 32KB / 4 bpp 一部可 (2) 一部可 (3) 一部可 (3) 一部可 (1)
RGBA Compressed ETC2 圧縮 RGBA テクスチャ。この形式は、すべての OpenGL ES 3.0 GPU でサポートされています。 64KB / 8 bpp 一部可 (2) 一部可 (3) 一部可 (3) 一部可 (1)
RGBA Crunched ETC2 RGBA Compressed ETC2、追加クランチ圧縮を伴う。 VBR 一部可 (2) 一部可 (3) 一部可 (3) 一部可 (1)
RGB + 1 ビット Alpha Compressed ETC2 4 ビット アルファチャンネルが完全に不透明または完全に透明に制限された圧縮 RGBA テクスチャ。 32KB / 4 bpp 一部可 (2) 一部可 (3) 一部可 (3) 一部可 (1)
RG Compressed EAC 8 ビット 高品質の圧縮 RG (2 チャンネル) テクスチャ 64KB / 8 bpp 一部可 (2) 一部可 (3) 一部可 (3) 一部可 (1)
RG Compressed EAC 4 ビット 高品質の圧縮 R (シングルチャンネル) テクスチャ 32KB / 4 bpp 一部可 (2) 一部可 (3) 一部可 (3) 一部可 (1)
RGB(A) Compressed ASTC 可変ブロックサイズの圧縮された RGB または RGBA テクスチャ。この形式は、すべての OpenGL ES 3.1 と Vulkan GPU でサポートされています。 12x12: 7744 バイト / 0.89 bpp

10x10: 10816 バイト / 1.28 bpp

8x8: 16KB / 2 bpp

6x6: 29584 バイト / 3.56 bpp

5x5: 43264 バイト / 5.12 bpp

4x4: 64KB / 8 bpp
一部可 (4) 一部可 (5) 一部可 (6)
RGB(A) Compressed ASTC HDR 可変ブロックサイズの圧縮された符号なし Float/ハイダイナミックレンジ (HDR) RGB または RGBA テクスチャ 12x12: 7744 バイト / 0.89 bpp

10x10: 10816 バイト / 1.28 bpp

8x8: 16KB / 2 bpp

6x6: 29584 バイト / 3.56 bpp

5x5: 43264 バイト / 5.12 bpp

4x4: 64KB / 8 bpp
一部可 (7) 不可 不可 不可
RGB Compressed PVRTC 2 ビット (8) 高圧縮 RGB テクスチャ 16KB / 2 bpp 一部可 (9) 不可
RGBA Compressed PVRTC 2 bits 高圧縮 RGBA テクスチャ 16KB / 2 bpp 一部可 (9) 不可
RGB Compressed PVRTC 4 bits 圧縮された RGB テクスチャ 32KB / 4 bpp 一部可 (9) 不可
RGBA Compressed PVRTC 4 bits 圧縮された RGBA テクスチャ 32KB / 4 bpp 一部可 (9) 不可

ノート:

  1. ETC1 と ETC2/EAC は、一部のブラウザー上で WebGL でのみサポートされます。
  2. OpenGL ES 2 を実行している場合、ETC2 は、Android 上でサポートされません。この場合、テクスチャは、ランタイムに Android Build Settings、または プラットフォーム固有のオーバーライド のための Android タブにある ETC2 fallback (ETC フォールバック) で指定された形式に解凍されます。
  3. OpenGL ES 2 を実行する場合、iOS と tvOS では ETC2 はサポートされません。
  4. Requires GL_KHR_texture_compression_astc_ldr 拡張、または Vulkan のサポートが必要です。
  5. A8 GPU 以降が必要です。
  6. WEBGL_compressed_texture_astc 拡張が必要です。
  7. GL_KHR_texture_compression_astc_hdr 拡張が必要です。この拡張がサポートされていない場合。テクスチャは、ランタイムに RGB9E5 形式に解凍され、アルファチャンネルを失います。
  8. すべての PVRTC 形式は、2 の累乗 寸法の 正方形 のテクスチャが必要です。
  9. PowerVR GPU のみ。

iOS に関する注意

幅広い互換性のために、デフォルトのテクスチャ圧縮設定 (PVRTC) が選択されます。 アプリケーションに OpenGL ES 2 サポートが含まれていない場合は、ASTC 形式のうち 1 つを選択します。ASTC 形式は品質と柔軟性が高く、圧縮は PVRTC よりも高速です。

tvOS に関する注意

Unity は Metal をサポートする tvOS デバイスのみをサポートします。ASTC はこのプラットフォームのデフォルトのテクスチャ圧縮です。手動で OpenGL ES 2 を追加する場合は、テクスチャ圧縮を PVRTC か ETC のいずれかに変更して、ランタイムのテクスチャ解凍を避けてください。

Android に関する注意

通常のテクスチャ

アプリケーションが特定のハードウェア (Nvidia Tegra や Imagination PowerVR など) をターゲットにしている場合を除いて、いくつかの圧縮形式と非圧縮形式のいずれかを選択する必要があります。これらには異なる利点や欠点があります。

フォーマット 説明  サポート
ASTC 最も柔軟な形式です。さまざまなブロックサイズを使用してファイルサイズと結果の品質を微調整できます。 Vulkan または OpenGL ES 3.1 を実行するすべてのデバイス、および OpenGL ES 3.0 を実行する一部のデバイスでサポートされます。
ETC2/EAC OpenGL ES 3.0 の標準テクスチャ圧縮形式。結果の画像品質はかなり高く、1 から 4 コンポーネントのテクスチャデータをサポートします。OpenGL ES 2 デバイスではサポートされていないため、テクスチャはランタイムに ETC2 fallback で指定された形式に解凍されます。 OpenGL ES 3.0 でサポートされています。
OpenGL ES 2 ではサポートされません。
ETC ブロックベースのテクスチャ圧縮形式。画像は 4×4 のブロックに分割され、各ブロックは固定ビット数でエンコードされます。欠点は、アルファチャンネルが直接サポートされていないことです。そのため、透明度情報を持つテクスチャには適していません。Unity は、テクスチャアトラスに配置された アルファチャンネル でテクスチャを自動的に処理する方法を提供します (これは、スプライトのパッキングタグを使用して指定できます)。

これを有効にするには、スプライトアトラス をインポートするときに、テクスチャの Split Alpha Channel オプションを有効にします。Unity は、結果のアトラスを 2 つのテクスチャに分割します。1 つは RGB データを持ち、もう 1 つは 3 つすべての (RGB) チャンネルに複製されたアルファチャンネルデータを持ちます。その後、それらをレンダリングパイプラインの最後の部分で結合します。
すべての Android デバイスでサポートされます。
RGBA 16 bit アルファチャンネルを持つ非圧縮形式。ETC2 の 2 倍のメモリが必要です。これは、強いグラデーションのないピクセルパーフェクトな UI のための一般的な形式です。 すべてのデバイスでサポートされます。
RGBA 32 bit 最高品質を提供し、アルファチャンネルをサポートする非圧縮形式。 ETC2 の 4 倍のメモリが必要です。これは、最高の見栄えのピクセルパーフェクトな UI のための形式です。 すべてのデバイスでサポートされます。

HDR テクスチャ

ハイダイナミックレンジ (HDR) テクスチャの場合は、以下の形式のいずれかを選択します。

  • ASTC HDR は、Android デバイスで HDR テクスチャに使用できる唯一の圧縮形式です。Vulkan または GL_KHR_texture_compression_astc_hdr サポートが必要です。ローダイナミックレンジ (LDR) テクスチャと同様に、これは最も柔軟な形式です。
  • RGB9e5 はアルファチャンネルのないパック形式です。Vulkan または OpenGL ES 3.0 を実行するすべてのデバイスと Nvidia Tegra GPU を備えたデバイスは、この形式をサポートします。
  • RGBA Half は、非圧縮の半精度浮動小数点形式です。メモリは RGB9e5 の 2 倍のメモリを消費しますが、アルファチャンネルを持ちほとんどのデバイスでサポートされます。

別々の APK で複数のデバイスをターゲットにする

異なるハードウェアをターゲットとする複数の Android パッケージ (APK) を公開できます。例えば、2 つの別々のAPK (1 つは OpenGL ES 3.0 以降をサポートするデバイス、もう 1 つは OpenGL ES 2.0 のみをサポートするデバイスをターゲットとする) を公開するには、以下の手順に従います。

1. OpenGL ES 3 をターゲットとする APK をビルドします。

  1. Android Player Settings にアクセスします (Edit> Project Settings> Player Settings を選択し、次に Android カテゴリを選択)。
  2. 下にスクロールして Graphics APIs セクションに移動します。
  3. OpenGL ES 2 がリストにないことを確認します。
  4. APK をビルドします (File> Build Settings に移動し、Build をクリック)。

2. OpenGL ES 2 をターゲットとする別の APK をビルドします。

  1. Android Player Settings にアクセスします。
  2. 下にスクロールして Graphics APIs セクションに移動します。
  3. OpenGL ES 2 を加え、リストから OpenGL ES 3 と Vulkan を削除します。
  4. APK をビルドします。

3. これらの APK を Google Play ストアに公開します。

ユーザーがアプリケーションをダウンロードすると、Google Play ストアはそのデバイスに最も関連性の高い APK を自動的にインストールします。

複数の APK ファイルの公開に関する詳細は、以下の Android Developer ドキュメントを参照してください。



  • WebGL 上のリニアレンダリングは 2017.2 で追加NewIn20172

  • Crunch 圧縮形式は 2017.3 で更新NewIn20173

  • Tizen と Samsung TV のサポートは 2017.3 で終了NewIn20173

  • Android の ASTC HDR テクスチャ圧縮は 2019.1 で追加NewIn20191

  • Unity 2019.3 でコンテンツを更新NewIn20193

テクスチャタイプ
レンダーテクスチャ