Manuals
Manuals




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種類があります。

  1. ソフトウェア圧縮(PNG や JPEG など)は、画像リソースのストレージ上のサイズを削減します。これにより、最終的なバンドルのサイズが小さくなります。ただし、画像ファイルはメモリに読み込む際に展開する必要があるため、ディスク上では小さい画像でも、メモリ使用量が大きくなることがあります。

  2. ハードウェアテクスチャ圧縮も、画像リソースのストレージ上のサイズを削減します。ただし、ソフトウェア圧縮とは異なり、テクスチャのメモリ使用量も削減します。これは、グラフィックスハードウェアが、圧縮されたテクスチャをあらかじめ展開せずに直接扱えるためです。

テクスチャの処理は、専用のテクスチャプロファイル(texture profiles)で設定します。このファイルに、特定のプラットフォーム向けにバンドルを作成する際に使用する圧縮形式と種類を指定する プロファイル を作成します。 プロファイル は、ファイルに一致する パスパターン に関連付けられるため、プロジェクト内のどのファイルを、具体的にどのように圧縮するかを細かく制御できます。

利用できるハードウェアテクスチャ圧縮はすべて非可逆圧縮なので、テクスチャデータにアーティファクトが生じます。これらのアーティファクトは、元の素材の見た目と使用する圧縮方式によって大きく変わります。最良の結果を得るために、元の素材でテストし、さまざまな設定を試すことをお勧めします。Google で調べることも役立ちます。

バンドルアーカイブ内の最終的なテクスチャデータ(圧縮済みまたは未加工)に適用するソフトウェア画像圧縮を選択できます。Defold は、Basis UniversalASTC の圧縮形式をサポートしています。

圧縮は多くのリソースと時間を必要とする処理です。圧縮するテクスチャ画像の数、選択したテクスチャ形式、およびソフトウェア圧縮の種類によっては、ビルド時間が 非常に 長くなることがあります。

Basis Universal

Basis Universal(略して BasisU)は、画像を中間形式に圧縮します。この形式は、実行時に使用中のデバイスの GPU に適したハードウェア形式へトランスコードされます。Basis Universal 形式は、高品質ですが非可逆圧縮の形式です。 すべての画像は、ゲームアーカイブに保存する際のファイルサイズをさらに削減するため、LZ4 でも圧縮されます。

ASTC

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 ▸ New... を選択し、Texture Profiles を選んで、新しいテクスチャプロファイルファイルを作成します。(または、default.texture_profilesbuiltins の外にコピーします)
  • 新しいファイルの名前と保存場所を決めます。
  • game.projecttexture_profiles 項目を変更し、新しいファイルを指定します。
  • .texture_profiles ファイルを開き、要件に合わせて設定します。

新しいプロファイルファイル

テクスチャプロファイルの設定

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

テクスチャプロファイルの環境設定

Path Settings

テクスチャプロファイルファイルの Path Settings セクションには、パスパターンと、そのパスに一致するリソースを処理する際に使用する profile のリストがあります。パスは「Ant Glob」パターンで表します(詳細はドキュメントを参照してください)。パターンには、次のワイルドカードを使用できます。

*
0文字以上の文字列に一致します。たとえば、sprite*.pngsprite.pngsprite1.pngsprite_with_a_long_name.png というファイルに一致します。
?
ちょうど1文字に一致します。たとえば、sprite?.pngsprite1.pngspriteA.png というファイルに一致しますが、sprite.pngsprite_with_a_long_name.png には一致しません。
**
ディレクトリツリー全体に一致します。ディレクトリ名として使用した場合は、0個以上のディレクトリに一致します。たとえば、/gui/**/gui ディレクトリと、そのすべてのサブディレクトリ内のすべてのファイルに一致します。

パス

この例には、2つのパスパターンと、それぞれに対応するプロファイルがあります。

/gui/**/*.atlas
/gui ディレクトリまたはそのサブディレクトリ内のすべての .atlas ファイルを、プロファイル「gui_atlas」に従って処理します。
/**/*.atlas
プロジェクト内のすべての .atlas ファイルを、プロファイル「atlas」に従って処理します。

より汎用的なパスを最後に配置している点に注意してください。一致を判定するアルゴリズムは、上から下へ処理します。リソースパスに最初に一致した項目が使用されます。リストのさらに下にあるパス式が一致しても、最初の一致が上書きされることはありません。パスを逆の順序で配置した場合は、/gui ディレクトリ内のものも含め、すべてのアトラスがプロファイル「atlas」で処理されます。

プロファイルファイル内のどのパスにも 一致しない テクスチャリソースは、コンパイルされ、最も近い2の累乗のサイズにスケーリングされますが、それ以外は変更されません。

Profiles

テクスチャプロファイルファイルの profiles セクションには、名前付きプロファイルのリストがあります。各プロファイルには1つ以上の platforms が含まれ、それぞれのプラットフォームはプロパティのリストで定義されます。

プロファイル

Platforms
対象のプラットフォームを指定します。OS_ID_GENERIC はすべてのプラットフォーム、OS_ID_WINDOWS は Windows 向けのバンドル、OS_ID_IOS は iOS 向けのバンドルに一致し、他も同様です。OS_ID_GENERIC を指定すると、すべてのプラットフォームに含まれる点に注意してください。

2つのパス設定が同じファイルに一致し、それぞれのパスが、異なるプラットフォームを持つ異なるプロファイルを使用している場合、両方 のプロファイルが使用され、2つ のテクスチャが生成されます。

Formats
生成する1つ以上のテクスチャ形式です。複数の形式を指定すると、各形式のテクスチャが生成され、バンドルに含まれます。エンジンは、実行環境のプラットフォームでサポートされている形式のテクスチャを選択します。
Mipmaps
チェックすると、そのプラットフォーム用にミップマップ(mipmap)が生成されます。デフォルトではチェックされていません。
Premultiply alpha
チェックすると、テクスチャデータにアルファ値をあらかじめ乗算します。デフォルトではチェックされています。
Max Texture Size
0以外の値に設定すると、テクスチャのピクセルサイズが指定した値に制限されます。幅または高さが指定値より大きいテクスチャは縮小されます。

プロファイルに追加する各 Formats には、次のプロパティがあります。

Format
テクスチャのエンコードに使用する形式です。利用できるすべてのテクスチャ形式については、後述の説明を参照してください。
Compressor
テクスチャのエンコードに使用するコンプレッサーです。
Compressor Preset
出力する圧縮画像のエンコードに使用する圧縮プリセットを選択します。各圧縮プリセットはコンプレッサーごとに固有であり、その設定はコンプレッサー自体によって異なります。これらの設定を簡単に扱えるように、現在の圧縮プリセットは4つのレベルに分かれています。
プリセット 備考
LOW 最速の圧縮。低画質です。
MEDIUM デフォルトの圧縮。最高画質です。
HIGH 最も遅い圧縮。ファイルサイズが小さくなります。
HIGHEST 遅い圧縮。ファイルサイズが最小になります。

uncompressed コンプレッサーには uncompressed というプリセットが1つだけあり、テクスチャに圧縮を適用しないことを意味します。 利用できるコンプレッサーの一覧は、コンプレッサーを参照してください。

テクスチャ形式

グラフィックスハードウェア用のテクスチャは、さまざまなチャンネル数とビット深度を持つ、非圧縮データまたは 非可逆 圧縮データに処理できます。サイズが固定となるハードウェア圧縮では、画像の内容に関係なく、生成される画像のサイズが固定になります。つまり、圧縮による品質の低下は、元のテクスチャの内容によって変わります。

Basis Universal 圧縮のトランスコードは、デバイスの GPU の機能に依存するため、Basis Universal 圧縮での使用には、次のような汎用形式が推奨されます。 TEXTURE_FORMAT_RGBTEXTURE_FORMAT_RGBATEXTURE_FORMAT_RGB_16BPPTEXTURE_FORMAT_RGBA_16BPPTEXTURE_FORMAT_LUMINANCETEXTURE_FORMAT_LUMINANCE_ALPHA

Basis Universal のトランスコーダーは、ASTC4x4BCxETC2ETC1PVRTC1 など、多くの出力形式をサポートしています。

現在、次の非可逆圧縮形式がサポートされています。

形式 圧縮 詳細
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 最高の圧縮プリセット