Unity は、テクスチャ (JPG、PNG、PSD、TGA など) をインポートするためのソースファイルとして多くの一般的な画像形式をサポートしています。しかし、これらの形式は、グラフィックスカードやモバイルデバイスなどの 3D グラフィックスハードウェアによるリアルタイムのレンダリングでは使用されません。3D グラフィックスハードウェアでは、高速テクスチャサンプリングに最適化された専用の形式でテクスチャを圧縮する必要があります。異なるプラットフォームとデバイスにはそれぞれ独自のフォーマットがあります。
デフォルトでは、テクスチャは選択したビルドターゲットに合わせて自動的に最適な形式に変換されます。変換されたテクスチャのみがビルドに含まれます。ソースのアセットファイルは、プロジェクトの Assets フォルダーに元の形式で残ります。ただし、ほとんどのプラットフォームでは、サポートするテクスチャ圧縮形式が複数あります。Unity には、プラットフォームごとに設定された特定のデフォルトフォーマットがありますが、ある状況ではデフォルトをオーバーライドして、いくつかのテクスチャに対して異なる圧縮フォーマットを選択することが必要な場合もあります (例えば、テクスチャを 1 つしかチャンネルを持たないマスクとして使用する場合、BC4 形式を使用して品質を維持しながらスペースを節約する方法を選択する場合もあります)。
各プラットフォームにカスタム設定を適用する場合は、テクスチャインポーター を使用してデフォルトオプションを設定し、それから Platform-specific overrides を使用してデフォルトを特定のプラットフォームに合わせてオーバーライドします。
以下は各プラットフォームで任意のカラーモデルを選んだ場合の、圧縮の品質に対する形式 (Format) のデフォルト値です。
プラットフォーム | カラーモデル | None | Normal Quality (デフォルト) | High Quality (高品質) | Low quality (低品質、パフォーマンスは高い) |
---|---|---|---|---|---|
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 (デフォルトサブターゲット) | 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 ピクセルの正方形の画像に基づく) を示しています。テクスチャ圧縮形式の選択は、ファイルサイズと画質のバランスによります。品質が高いほど、ファイルサイズは大きくなります。以下の説明で 256×256 ピクセルのゲーム内テクスチャの最終的なファイルサイズを参照してください。
ターゲットプラットフォームでサポートされていないテクスチャ圧縮形式を使用すると、テクスチャは RGBA 32 に解凍され、圧縮テクスチャと一緒にメモリに保存されます。このような状況が発生すると、テクスチャを解凍する時間が費やされ、テクスチャを 2 回保存するためにメモリがより消費されます。 さらに、すべてのプラットフォームはハードウェアが異なり、特定の圧縮形式で最も効率的に動作するように最適化されています。そのため、互換性のない形式を選択すると、ゲームのパフォーマンスに影響を与える可能性があります。下の表は、各圧縮形式をサポートするプラットフォームを示しています。
下の表に関するノート
RGB は赤、緑、青をさまざまな割合で加え、幅広い 色 を表すカラーモデルです。
RGBA はアルファチャンネルを持つ RGB の一種で、ブレンドと透明度の変更が可能です。
Crunch 圧縮 は、DXT または ETC などのテクスチャ圧縮の上に使用できる損失のある (圧縮中に データ の一部が失われることを意味します) 圧縮形式です。テクスチャは CPU で DXT か ETC に解凍され、ランタイムに GPU に読み込まれます。 Crunch 圧縮は、ディスク上やダウンロード時に使用するスペース量をできるだけ少なくしたいときに役立ちます。Crunch テクスチャは、圧縮するのにかなり時間がかかりますが、ランタイムでの解凍は高速です。
テクスチャ圧縮形式 | 説明 |
サイズ (256x256 ピクセルのテクスチャに対する) |
サポートするプラットフォーム |
---|---|---|---|
RGB Compressed DXT1 | 圧縮され正規化された unsigned int RGB テクスチャ。 | 32KB (4 ビット/ピクセル) | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra と Intel Bay Trail), WebGL ノート: sRGB DXT をサポートしないウェブブラウザーの リニアレンダリング では、テクスチャはランタイムに RGBA32 に解凍されます。 |
RGB Crunched DXT1 | RGB Compressed DXT1 と似ていますが、Crunch 圧縮を使用して圧縮します。Crunch 圧縮について詳しくは上のノートを参照してください。 | テクスチャ内のコンテンツの複雑さによって異なります。 | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra と Intel Bay Trail), WebGL ノート: sRGB DXT をサポートしないウェブブラウザーの リニアレンダリング では、テクスチャはランタイムに RGBA32 に解凍されます。 |
RGBA Compressed DXT5 | 圧縮され正規化された unsigned int の RGBA テクスチャ。8 ビット/ピクセル。 | 64KB (8 ビット/ピクセル) | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra と Intel Bay Trail), WebGL ノート: sRGB DXT をサポートしないウェブブラウザーの リニアレンダリング では、テクスチャはランタイムに RGBA32 に解凍されます。 |
RGBA Crunched DXT5 | RGBA Compressed DXT5 と似ていますが、Crunch 圧縮を使用して圧縮します。Crunch 圧縮について詳しくは上のノートを参照してください。 | テクスチャ内のコンテンツの複雑さによって異なります。 | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra と Intel Bay Trail), WebGL ノート: sRGB DXT をサポートしないウェブブラウザーの リニアレンダリング では、テクスチャはランタイムに RGBA32 に解凍されます。 |
RGB Compressed BC6H | 圧縮され正規化された unsigned float/ハイダイナミックレンジ (HDR) RGB テクスチャ。 | 64KB (8 ビット/ピクセル) | Windows Direct3D 11: OpenGL 4, Linux ノート: BC6H テクスチャは、実行時に以下のプラットフォーム設定で RGBA Half に解凍されます。 - OpenGL を搭載する MacOS - Direct3D 10 Shader Model 4 または OpenGL 3 GPU を搭載するプラットフォーム |
RGB(A) Compressed BC7 | 圧縮され正規化された unsigned int の RGB または RGBA テクスチャ。 | 64KB (8 ビット/ピクセル) | Windows Direct3D 11: OpenGL 4, Linux ノート: BC7 テクスチャは、実行時に以下のプラットフォーム設定で RGBA 32bit に解凍されます。 - OpenGL を搭載する MacOS - Direct3D 10 Shader Model 4 または OpenGL 3 GPU を搭載するプラットフォーム |
RGB Compressed ETC | 圧縮された RGB テクスチャ。これは、Android プロジェクトで、アルファチャンネルのないテクスチャのデフォルトのテクスチャ圧縮形式です。 | 32KB (4 ビット/ピクセル) | Android, iOS, tvOS。 ノート: ETC1 はすべての ES 2.0 GPU によってサポートされています。ETC1 はアルファをサポートしません。 |
RGB Crunched ETC | RGB Compressed ETC と似ていますが、Crunch 圧縮を使用して圧縮します。Crunch 圧縮について詳しくは前出のノートを参照してください。 | テクスチャ内のコンテンツの複雑さによって異なります。 | Android、iOS、tvOS |
RGB Compressed ETC2 | 圧縮された RGB テクスチャ | 32KB (4 ビット/ピクセル) | Android (OpenGL ES 3.0) ノート: ETC2 をサポートしない Android プラットフォーム上では、テクスチャはランタイム時に Build Settings の ETC2 fallback で指定された形式に解凍されます。 |
RGBA Compressed ETC2 | 圧縮された RGBA テクスチャ。これは、Android プロジェクトで、アルファチャンネルのあるテクスチャのデフォルトのテクスチャ圧縮形式です。 | 64KB (8 ビット/ピクセル) | Android (OpenGL ES 3.0)、iOS (OpenGL ES 3.0)、tvOS (OpenGL ES 3.0) ノート: ETC2 をサポートしない iOS と tvOS デバイス上では、テクスチャはランタイム時に RGBA32 に解凍されます。ETC2 をサポートしない Android プラットフォームでは、テクスチャはランタイム時に Build Settings の ETC2 fallback で指定された形式に解凍されます。 |
RGBA Crunched ETC2 | RGBA Compressed ETC2 と似ていますが、Crunch 圧縮を使用して圧縮します。Crunch 圧縮について詳しくは前出のノートを参照してください。 | テクスチャ内のコンテンツの複雑さによって異なります。 | Android (OpenGL ES 3.0)、iOS (OpenGL ES 3.0)、tvOS (OpenGL ES 3.0) ノート: ETC2 をサポートしない iOS と tvOS デバイス上では、テクスチャはランタイム時に RGBA32 に解凍されます。ETC2 をサポートしない Android プラットフォームでは、テクスチャはランタイム時に Build Settings の ETC2 fallback で指定された形式に解凍されます。 |
RGB Compressed ASTC | 圧縮された RGB テクスチャのさまざまなブロックサイズ | 12x12: 0.89 ビット/ピクセル (256x256 テクスチャでは 7.56KB) 10x10: 1.28 ビット/ピクセル (256x256 テクスチャでは 10.56KB) 8x8: 2 ビット/ピクセル (256x256 テクスチャでは 16KB); 6x6: 3.56 ビット/ピクセル (256x256 テクスチャでは 28.89KB) 5x5: 5.12 ビット/ピクセル (256x256 テクスチャでは 42.25KB) 4x4: 8 ビット/ピクセル (256x256 テクスチャでは 64KB) |
tvOS(all)、iOS (A8)、Android (PowerVR 6XT、Mali T600 シリーズ、Adreno 400 シリーズ、Tegra K1) |
RGBA Compressed ASTC | 圧縮された RGBA テクスチャのさまざまなブロックサイズ | 12x12: 0.89 ビット/ピクセル (256x256 テクスチャでは 7744 バイト) 10x10: 1.28 ビット/ピクセル (256x256 テクスチャでは 10816 バイト) 8x8: 2 ビット/ピクセル (256x256 テクスチャでは 16KB); 6x6: 3.56 ビット/ピクセル (256x256 テクスチャでは 29584 バイト) 5x5: 5.12 ビット/ピクセル (256x256 テクスチャでは 43264 バイト) 4x4: 8 ビット/ピクセル (256x256 テクスチャでは 64KB) |
tvOS(all)、iOS (A8)、Android (PowerVR 6XT、Mali T600 シリーズ、Adreno 400 シリーズ、Tegra K1) |
RGB Compressed PVRTC 2 bits | 高圧縮 RGB テクスチャ。低品質だがサイズが小さい。その結果、パフォーマンスが高い。 | 16KB (2 ビット/ピクセル) | Android (PowerVR)、iOS、tvOS |
RGBA Compressed PVRTC 2 bits | 高圧縮 RGBA テクスチャ。低品質だがサイズが小さい。その結果、パフォーマンスが高い。 | 16KB (2 ビット/ピクセル) | Android (PowerVR)、iOS、tvOS |
RGB Compressed PVRTC 4 bits | 圧縮された RGB テクスチャ。高品質テクスチャ (特にカラーデータで)。ただし、圧縮に長く時間がかかる。 | 32KB (4 ビット/ピクセル) | Android (PowerVR)、iOS、tvOS |
RGBA Compressed PVRTC 4 bits | 圧縮された RGB テクスチャ。高品質テクスチャ (特にカラーデータで)。ただし、圧縮に長く時間がかかる。 | 32KB (4 ビット/ピクセル) | Android (PowerVR)、iOS、tvOS |
RGB Compressed ATC | 圧縮された RGB テクスチャ | 32KB (4 ビット/ピクセル) | Android (Qualcomm - Adreno)、iOS、tvOS |
RGBA Compressed ATC | 圧縮された RGBA テクスチャ | 64KB (8 ビット/ピクセル) | Android (Qualcomm - Adreno)、iOS、tvOS |
RGB 16 bit | アルファなしの 65000 色。圧縮された形式よりもメモリを消費しますが、UI やグラデーションのないくっきりとしたテクスチャにより適しています。 | 128KB (16 ビット/ピクセル) | すべてのプラットフォーム |
RGB 24 bit | アルファなしのトゥルーカラー | 192KB (24 ビット/ピクセル) | すべてのプラットフォーム |
Alpha 8 | カラーなしの高品質アルファチャンネル | 64KB (8 ビット/ピクセル) | すべてのプラットフォーム |
RGBA 16 bit | 低品質のトゥルーカラー。これは、アルファチャンネルのあるテクスチャでデフォルトの圧縮です。 | 128KB (16 ビット/ピクセル) | すべてのプラットフォーム |
RGBA 32 bit | アルファありのトゥルーカラー。これは、アルファチャンネルのあるテクスチャで最も高品質の圧縮です。 | 256KB (32 ビット/ピクセル) | すべてのプラットフォーム |
DDS ファイルからテクスチャをインポートできますが、DXT か BC 圧縮形式、または、解凍したピクセル形式のみがサポートされます。
特定のハードウェア (Tegra など) をターゲットにしない限り、ETC2 圧縮は Android にとって最も効率的なオプションで、品質とファイルサイズの最適なバランスを提供します (メモリサイズ要件を満たしている場合)。アルファチャンネルが必要な場合は外部に保存したり、テクスチャファイルのサイズを小さくするのも良い方法です。
アルファチャネル を持つテクスチャには ETC1 を使うことができますが、ビルドが Android 用で、テクスチャが (Packing Tag を指定することによって) アトラスに置かれている場合にのみ使用できます。これを行うには、テクスチャの Compress using ETC1 チェックボックスにチェックします。Unity は結果として得られたアトラスをアルファチャンネルなしの 2 つのテクスチャに分割し、レンダリングパイプラインの最後の部分でそれらを結合します。
テクスチャにアルファチャンネルを保存するには、すべてのハードウェアベンダーがサポートする RGBA16 ビット圧縮を使用します。