This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold は、テクスチャ(texture)の自動処理と画像データの圧縮をサポートしています( アトラス(Atlas) 、 タイルソース(Tile sources) 、 キューブマップ(Cubemaps) 、およびモデルや GUI などで使う単独のテクスチャが対象です)。
圧縮には、ソフトウェアによる画像圧縮とハードウェアによるテクスチャ圧縮の2種類があります。
ソフトウェア圧縮(PNG や JPEG など)は、画像リソースのストレージ上のサイズを削減します。これにより、最終的なバンドルのサイズが小さくなります。ただし、画像ファイルはメモリに読み込む際に展開する必要があるため、ディスク上では小さい画像でも、メモリ使用量が大きくなることがあります。
ハードウェアテクスチャ圧縮も、画像リソースのストレージ上のサイズを削減します。ただし、ソフトウェア圧縮とは異なり、テクスチャのメモリ使用量も削減します。これは、グラフィックスハードウェアが、圧縮されたテクスチャをあらかじめ展開せずに直接扱えるためです。
テクスチャの処理は、専用のテクスチャプロファイル(texture profiles)で設定します。このファイルに、特定のプラットフォーム向けにバンドルを作成する際に使用する圧縮形式と種類を指定する プロファイル を作成します。 プロファイル は、ファイルに一致する パスパターン に関連付けられるため、プロジェクト内のどのファイルを、具体的にどのように圧縮するかを細かく制御できます。
利用できるハードウェアテクスチャ圧縮はすべて非可逆圧縮なので、テクスチャデータにアーティファクトが生じます。これらのアーティファクトは、元の素材の見た目と使用する圧縮方式によって大きく変わります。最良の結果を得るために、元の素材でテストし、さまざまな設定を試すことをお勧めします。Google で調べることも役立ちます。
バンドルアーカイブ内の最終的なテクスチャデータ(圧縮済みまたは未加工)に適用するソフトウェア画像圧縮を選択できます。Defold は、Basis Universal と ASTC の圧縮形式をサポートしています。
圧縮は多くのリソースと時間を必要とする処理です。圧縮するテクスチャ画像の数、選択したテクスチャ形式、およびソフトウェア圧縮の種類によっては、ビルド時間が 非常に 長くなることがあります。
Basis Universal(略して BasisU)は、画像を中間形式に圧縮します。この形式は、実行時に使用中のデバイスの GPU に適したハードウェア形式へトランスコードされます。Basis Universal 形式は、高品質ですが非可逆圧縮の形式です。 すべての画像は、ゲームアーカイブに保存する際のファイルサイズをさらに削減するため、LZ4 でも圧縮されます。
ASTC は、ARM が開発し、Khronos Group が標準化した、柔軟で効率的なテクスチャ圧縮形式です。幅広いブロックサイズとビットレートを提供し、開発者が画質とメモリ使用量のバランスを効果的に調整できます。ASTC は 4×4 から 12×12 テクセルまでのさまざまなブロックサイズをサポートし、それに対応するビットレートは、テクセルあたり8ビットから0.89ビットまでの範囲になります。この柔軟性により、テクスチャの品質と必要なストレージ容量のトレードオフを細かく制御できます。
ASTC は 4×4 から 12×12 テクセルまでのさまざまなブロックサイズをサポートし、それに対応するビットレートは、テクセルあたり8ビットから0.89ビットまでの範囲になります。この柔軟性により、テクスチャの品質と必要なストレージ容量のトレードオフを細かく制御できます。次の表は、サポートされるブロックサイズと、それぞれに対応するビットレートを示します。
| ブロックサイズ(幅 x 高さ) | ピクセルあたりのビット数 |
|---|---|
| 4x4 | 8.00 |
| 5x4 | 6.40 |
| 5x5 | 5.12 |
| 6x5 | 4.27 |
| 6x6 | 3.56 |
| 8x5 | 3.20 |
| 8x6 | 2.67 |
| 10x5 | 2.56 |
| 10x6 | 2.13 |
| 8x8 | 2.00 |
| 10x8 | 1.60 |
| 10x10 | 1.28 |
| 12x10 | 1.07 |
| 12x12 | 0.89 |
ASTC は優れた結果を得られますが、すべてのグラフィックスカードでサポートされているわけではありません。以下に、ベンダー別に対応デバイスの一部を示します。
| GPU ベンダー | サポート |
|---|---|
| ARM (Mali) | OpenGL ES 3.2 または Vulkan をサポートするすべての ARM Mali GPU は ASTC をサポートしています。 |
| Qualcomm (Adreno) | OpenGL ES 3.2 または Vulkan をサポートする Adreno GPU は ASTC をサポートしています。 |
| Apple | A8 チップ以降の Apple GPU は ASTC をサポートしています。 |
| NVIDIA | ASTC のサポートは主にモバイル GPU(Tegra ベースのチップなど)向けです。 |
| AMD (Radeon) | Vulkan をサポートする AMD GPU は、一般にソフトウェアを介して ASTC をサポートしています。 |
| Intel(内蔵) | 新しい Intel GPU では、ソフトウェアを介して ASTC がサポートされています。 |
各プロジェクトには、テクスチャの圧縮に使用する設定を含む、専用の .texture_profiles ファイルがあります。デフォルトでは、このファイルは builtins/graphics/default.texture_profiles です。すべてのテクスチャリソースを、ハードウェアテクスチャ圧縮を行わずに RGBA を使用し、デフォルトの ZLib ファイル圧縮を行うプロファイルに一致させる設定が含まれています。
テクスチャ圧縮を追加するには、次の手順に従います。


エディターの環境設定で、テクスチャプロファイルの使用を有効または無効にできます。File ▸ Preferences... を選択します。General タブに Enable texture profiles というチェックボックス項目があります。

テクスチャプロファイルファイルの Path Settings セクションには、パスパターンと、そのパスに一致するリソースを処理する際に使用する profile のリストがあります。パスは「Ant Glob」パターンで表します(詳細はドキュメントを参照してください)。パターンには、次のワイルドカードを使用できます。
*sprite*.png は sprite.png、sprite1.png、sprite_with_a_long_name.png というファイルに一致します。?sprite?.png は sprite1.png、spriteA.png というファイルに一致しますが、sprite.png や sprite_with_a_long_name.png には一致しません。**/gui/** は /gui ディレクトリと、そのすべてのサブディレクトリ内のすべてのファイルに一致します。
この例には、2つのパスパターンと、それぞれに対応するプロファイルがあります。
/gui/**/*.atlas/gui ディレクトリまたはそのサブディレクトリ内のすべての .atlas ファイルを、プロファイル「gui_atlas」に従って処理します。/**/*.atlasより汎用的なパスを最後に配置している点に注意してください。一致を判定するアルゴリズムは、上から下へ処理します。リソースパスに最初に一致した項目が使用されます。リストのさらに下にあるパス式が一致しても、最初の一致が上書きされることはありません。パスを逆の順序で配置した場合は、/gui ディレクトリ内のものも含め、すべてのアトラスがプロファイル「atlas」で処理されます。
プロファイルファイル内のどのパスにも 一致しない テクスチャリソースは、コンパイルされ、最も近い2の累乗のサイズにスケーリングされますが、それ以外は変更されません。
テクスチャプロファイルファイルの profiles セクションには、名前付きプロファイルのリストがあります。各プロファイルには1つ以上の platforms が含まれ、それぞれのプラットフォームはプロパティのリストで定義されます。

OS_ID_GENERIC はすべてのプラットフォーム、OS_ID_WINDOWS は Windows 向けのバンドル、OS_ID_IOS は iOS 向けのバンドルに一致し、他も同様です。OS_ID_GENERIC を指定すると、すべてのプラットフォームに含まれる点に注意してください。2つのパス設定が同じファイルに一致し、それぞれのパスが、異なるプラットフォームを持つ異なるプロファイルを使用している場合、両方 のプロファイルが使用され、2つ のテクスチャが生成されます。
プロファイルに追加する各 Formats には、次のプロパティがあります。
| プリセット | 備考 |
|---|---|
LOW |
最速の圧縮。低画質です。 |
MEDIUM |
デフォルトの圧縮。最高画質です。 |
HIGH |
最も遅い圧縮。ファイルサイズが小さくなります。 |
HIGHEST |
遅い圧縮。ファイルサイズが最小になります。 |
uncompressed コンプレッサーには uncompressed というプリセットが1つだけあり、テクスチャに圧縮を適用しないことを意味します。
利用できるコンプレッサーの一覧は、コンプレッサーを参照してください。
グラフィックスハードウェア用のテクスチャは、さまざまなチャンネル数とビット深度を持つ、非圧縮データまたは 非可逆 圧縮データに処理できます。サイズが固定となるハードウェア圧縮では、画像の内容に関係なく、生成される画像のサイズが固定になります。つまり、圧縮による品質の低下は、元のテクスチャの内容によって変わります。
Basis Universal 圧縮のトランスコードは、デバイスの GPU の機能に依存するため、Basis Universal 圧縮での使用には、次のような汎用形式が推奨されます。
TEXTURE_FORMAT_RGB、TEXTURE_FORMAT_RGBA、TEXTURE_FORMAT_RGB_16BPP、TEXTURE_FORMAT_RGBA_16BPP、TEXTURE_FORMAT_LUMINANCE、TEXTURE_FORMAT_LUMINANCE_ALPHA。
Basis Universal のトランスコーダーは、ASTC4x4、BCx、ETC2、ETC1、PVRTC1 など、多くの出力形式をサポートしています。
現在、次の非可逆圧縮形式がサポートされています。
| 形式 | 圧縮 | 詳細 |
|---|---|---|
TEXTURE_FORMAT_RGB |
なし | 3チャンネルのカラー。アルファ値は破棄されます。 |
TEXTURE_FORMAT_RGBA |
なし | 3チャンネルのカラーと完全なアルファ値。 |
TEXTURE_FORMAT_RGB_16BPP |
なし | 3チャンネルのカラー。5+6+5ビット。 |
TEXTURE_FORMAT_RGBA_16BPP |
なし | 3チャンネルのカラーと完全なアルファ値。4+4+4+4ビット。 |
TEXTURE_FORMAT_LUMINANCE |
なし | アルファ値を持たない1チャンネルのグレースケール。RGB チャンネルを乗算して1つにまとめます。アルファ値は破棄されます。 |
TEXTURE_FORMAT_LUMINANCE_ALPHA |
なし | 1チャンネルのグレースケールと完全なアルファ値。RGB チャンネルを乗算して1つにまとめます。 |
ASTC では、チャンネル数は常に4(RGB + アルファ値)で、形式自体がブロック圧縮のサイズを定義します。 これらの形式は ASTC コンプレッサーとのみ互換性があり、それ以外の組み合わせではビルドエラーが発生する点に注意してください。
TEXTURE_FORMAT_RGBA_ASTC_4X4
TEXTURE_FORMAT_RGBA_ASTC_5X4
TEXTURE_FORMAT_RGBA_ASTC_5X5
TEXTURE_FORMAT_RGBA_ASTC_6X5
TEXTURE_FORMAT_RGBA_ASTC_6X6
TEXTURE_FORMAT_RGBA_ASTC_8X5
TEXTURE_FORMAT_RGBA_ASTC_8X6
TEXTURE_FORMAT_RGBA_ASTC_8X8
TEXTURE_FORMAT_RGBA_ASTC_10X5
TEXTURE_FORMAT_RGBA_ASTC_10X6
TEXTURE_FORMAT_RGBA_ASTC_10X8
TEXTURE_FORMAT_RGBA_ASTC_10X10
TEXTURE_FORMAT_RGBA_ASTC_12X10
TEXTURE_FORMAT_RGBA_ASTC_12X12
デフォルトでは、次のテクスチャコンプレッサーがサポートされています。テクスチャファイルがメモリに読み込まれるときに、データは展開されます。
| 名前 | 形式 | 備考 |
|---|---|---|
Uncompressed |
すべての形式 | 圧縮を適用しません。デフォルトです。 |
BasisU |
すべての RGB/RGBA 形式 | Basis Universal の高品質な非可逆圧縮です。品質レベルを下げるとサイズが小さくなります。 |
ASTC |
すべての ASTC 形式 | ASTC の非可逆圧縮です。品質レベルを下げるとサイズが小さくなります。 |
Defold は、テクスチャコンプレッサーのパイプラインにインストールできるコンプレッサーをサポートしています。これにより、WEBP や完全に独自のものなど、テクスチャ圧縮アルゴリズムを拡張機能に実装できます。
出力を理解しやすくするため、ここでは例を示します。 画質、圧縮時間、圧縮後のサイズは常に入力画像に依存し、異なる場合がある点に注意してください。
元の画像(1024x512):

| プリセット | 圧縮時間 | 相対時間 |
|---|---|---|
LOW |
0m0.143s | 0.5x |
MEDIUM |
0m0.294s | 1.0x |
HIGH |
0m1.764s | 6.0x |
HIGHEST |
0m1.109s | 3.8x |
比較には basisu ツールを使用しています(PSNR を測定します)。
100 dB は信号の損失がないことを意味します(つまり、元の画像と同じです)。
| プリセット | 信号 |
|---|---|
LOW |
最大値: 34 平均: 0.470 RMS: 1.088 PSNR: 47.399 dB |
MEDIUM |
最大値: 35 平均: 0.439 RMS: 1.061 PSNR: 47.620 dB |
HIGH |
最大値: 37 平均: 0.898 RMS: 1.606 PSNR: 44.018 dB |
HIGHEST |
最大値: 51 平均: 1.298 RMS: 2.478 PSNR: 40.249 dB |
元のファイルサイズは 1572882 バイトです。
| プリセット | ファイルサイズ | 比率 |
|---|---|---|
LOW |
357225 | 22.71 % |
MEDIUM |
365548 | 23.24 % |
HIGH |
277186 | 17.62 % |
HIGHEST |
254380 | 16.17 % |
生成された画像を以下に示します(basisu ツールを使い、ASTC エンコードから取得しました)。
LOW

MEDIUM

HIGH

HIGHEST
