テクスチャ圧縮
テクスチャデータは、デバイスのビデオメモリ(またはVRAM)に格納されます。ブラウザタブのクラッシュなど、望ましくないことが発生しないように、アプリケーションが VRAM を使い果たさないようにすることが重要です。
エディタには、テクスチャに対して Basis を使用して、損失がある圧縮スキームを適用して VRAM 使用量を劇的に減らす機能があります。
Basis は「超圧縮」されたテクスチャフォーマットです。これは、ランタイムでネイティブにサポートされているハードウェア圧縮フォーマットに変換できる、プラットフォーム非依存の損失のあるブロック圧縮フォーマットです。対応するトランスコードフォーマットは、可能な場合は ASTC、DXT、ETC2、ETC、PVR、ATC の順で選択されます。
次のようなTextureアセットがあるとします。
これは512x512のJPGでサイズは202KBです。しかし、JPGは圧縮された形式であり、グラフィックエンジンに渡されると解凍されたRGB8形式に拡張され、ミップマップレベルを含めると1.05MBのVRAMを占有します。
テクスチャ圧縮を有効にすると、以下のような結果が得られます。
圧縮により、VRAMの使用量が6分の1に減少しました。さらに、この場合、圧縮によりダウンロードサイズが202KBからDefault品質設定とETCモードを使用して最小46KBまで減少しました。
以下に、MacのChromeでのレンガテクスチャの並べて比較を示します。
以下は、MacとChromeで PlayCanvas のキューブを Basis (ETCモード)2 で比較したものと、圧縮していないものです。
Basis テクスチャ圧縮の使用
テクスチャをエディタにインポートしたら、そのテクスチャを選択し、インスペクタを下にスクロールして、Compression セクションを見つけます。
- BASIS をチェックしま す。
- Import Basis をクリックして、プロジェクトに Basis ランタイムのWASMモジュールを追加します(これは1回だけ行う必要があります)。
- このテクスチャで圧縮アーティファクトを減らす必要がある場合は、モードを 'ETC (smaller size, lower quality)' から 'ASTC (larger size, higher quality)' に変更します。
- Normal Map を圧縮する場合は、Normals をチェックします。
- ファイルサイズと品質のバランスを取るために、品質設定を変更します。品質を下げると、より小さなファイルサイズになります。
- Compress Basis をクリックします。
BasisのWASMモジュールは、プリロードダウンロードサイズに追加で253KBのgzip圧縮データを追加しますが、それはレガシーのテクスチャ圧縮フォーマットのファイルを使用する場合と比較してテクスチャサイズの節約によって相殺されるはずです(下記参照)。
テクスチャから Basis 圧縮を削除する方法は次のとおりです。
- BASIS のチェックを外します。
- Compress 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は品質の違いがほとんどないまま、約 ~50%小さくなることを示しています。
旧来のテクスチャ圧縮フォーマットは次の通りです。
- DXT:通常、デスクトップデバイスで サポートされています。
- PVR:通常、iOS デバイスでサポートされています。
- ETC:通常、Android デバイスでサポートされています。
Legacy Texture Compression オプションを使用するには、テクスチャを選択して、インスペクタで圧縮セクションまでスクロールします。
- LEGACY をチェックします。
- 使いたいすべてのフォーマットをチェックします。
- Compress Legacy をクリックします。
フォーマットを1つまたは複数削除するには:
- 削除したいすべてのフォーマットのチェックを外します。
- Compress Legacy をクリックします。
Legacy テクスチャ圧縮から Basis テクスチャ圧縮への移行
既に Legacy Texture Compression フォーマットを使用しているプロジェクトを Basis を使うようにしたい場合は、次の手順を実行します。
- すべての Legacy テクスチャフォーマットを削除します。
- Basis を有効にして使用します。