テクスチャ圧縮
このドキュメントは、playcanvas/developer.playcanvas.com を元に翻訳されたものです。
ドキュメントはMITライセンスの下で提供されています。詳細については、https://github.com/playcanvas/developer.playcanvas.com/blob/main/LICENSE を参照してください。
テクスチャデータはデバイスのビデオメモリ(VRAM)に保存されます。アプリケーションがVRAMを使い果たさないようにすることは重要です。VRAMを使い果たすと、ブラウザのタブがクラッシュするなどの望ましくない事態を引き起こす可能性があります。
エディターには、Basisを使用してテクスチャに非可逆圧縮スキームを適用し、使用されるVRAMの量を大幅に削減する機能があります。
Basis は「超圧縮」テクスチャフォーマットです。これは、プラットフォームに依存しない非可逆ブロック圧縮フォーマットであり、実行時にネイティブにサポートされているハードウェア圧縮フォーマットにトランスコードできます。サポー トされているトランスコードフォーマットは、ASTC、DXT、ETC2、ETC、PVR、ATCです(利用可能な場合はこの順に選択されます)。
次のテクスチャアセットを考えてみましょう。
これは、サイズが202KBの512x512のJPGです。ただし、JPGは圧縮形式であり、グラフィックエンジンに渡されると、1.05MBのVRAMを占有する非圧縮のRGB8形式に展開されます(ミップマップレベルを含む)。
テクスチャ圧縮を有効にすると、次の結果が得られます。
この圧縮により、VRAMの使用量が6分の1に削減されました。さらに、このケースでは、圧縮により、デフォルトの品質設定とETCモードを使用した場合、ダウンロードサイズも202KBからわずか46KBに削減されました。
以下は、Chromeを搭載したMacでのレンガのテクスチャの左右比較です。
これは、Chromeを搭載したMacでのPlayCanvasキューブのBasis(ETCモード) と なし の別の例です。
Basisテクスチャ圧縮の使用
テクスチャがエディターにインポートされたら、それを選択し、インスペクターを下にスクロールして、[圧縮]セクションを見つけます。
- [BASIS]にチェックを入れます。
- [Basisをインポート]をクリックして、Basisランタイム用のWASMモジュールをプロジェクトに追加します(これは一度だけ行う必要があります)。
- このテクスチャの圧縮アーティファクトを減らす必要がある場合は、モードを[ETC(小さいサイズ、低品質)]から[ASTC(大きいサイズ、高品質)]に変更します。
- 法線マップを圧縮する場合は、[法線]にチェックを入れます。
- 画質設定を変更して、ファイルサイズと画質のバランスを取ります。品質が低いほど、ファイルサイズは小さくなります。
- [Basisを圧縮]をクリックします。
Basis WASMモジュールは、プリロードのダウンロードサイズに253KBの追加のgzip圧縮データを追加しますが、これは、従来のテクスチャ圧縮形式ファイルを使用した場合と比較して、テクスチャサイズの節約によって相殺されるはずです(下記参照)。
テクスチャからBasis圧縮を削除するには:
- [BASIS]のチェックを外します。
- [Basisを圧縮]をクリックします。
Basisを使用しなくなった場合は、すべてのテクスチャからBasis圧縮を削除し、プロジェクトからBasisフォルダーを削除します。
Basisの制限事項
PlayCanvasでのBasisテクスチャ圧縮にはいくつかの制限事項があります。
- PVRフォーマットは、正方形(幅と高さが同じ)で、2の累乗(例:256、512、1024など)の寸法を持つテクスチャのみをサポートします。古いiOSデバイス(iPhone 5や5CなどのA6 SoC以下を搭載)および古いiOSバージョン(13.7以下)はPVRのみをサポートします。正方形または2の累乗ではないBasisテクスチャはPVRフォーマットにトランスコードできませんが、代わりに16ビットの565ピクセルフォーマットを使用します。VRAMを多く占有する可能性がありますが、正しく表示されます。
- Basis圧縮でサポートされている最大テクスチャ寸法は4096x4096です。これより大きいテクスチャは圧縮に非常に時間がかかるため、無効になっています。
レガシーテクスチャ圧縮
可能な限りBasis圧縮を使用することを強くお勧めします。Basis圧縮は、すべてのプラットフォームをカバーするために単一のテクスチャファイルのみが必要であり、レガシーフォーマットと比較してファイルサイズも大幅に小さいためです。私たちのテストでは、Basisは品質の差が最小限で約50%小さくなっています。
レガシーテクスチャスキームは次のとおりです。
- DXT:通常、デスクトップデバイスでサポートされています。
- PVR:通常、iOSデバイスでサポートされています。
- ETC:通常、Androidデバイスでサポートされています。
レガシーテクスチャ圧縮オプションを使用するには、テクスチャを選択し、インスペクターを下にスクロールして、[圧縮]セクションを見つけます。
- [LEGACY]にチェックを入れます。
- 使用するすべてのフォーマットにチェックを入れます。
- [レガシーを圧縮]をクリックします。
1つまたは複数のフォーマットを削除するには:
- 削除するすべてのフォーマットのチェックを外します。
- [レガシーを圧縮]をクリックします。
レガシーテクスチャ圧縮からBasisテクスチャ圧縮への移行
すでにレガシーテクスチャ圧縮フォーマットを使用しているプロジェクトでBasisを使用したい場合は、次の手順に従います。
- すべてのレガシーテクスチャフォーマットを削除します。
- Basisを有効にして使用します。