Version: Unity 6.0 (6000.0)
言語 : 日本語
最適化のためのメッシュデータの圧縮
頂点圧縮の設定

メッシュデータ圧縮のタイプ

Unity にはメッシュを圧縮する方法が 2 つあります。これらの動作は異なり、パフォーマンスの違う側面に影響を与えます。

  • Vertex Compression は、プロジェクト内のすべてのメッシュに影響する設定です。この設定では、メッシュに低精度のデータ形式を使用することができます。これにより、メモリ内のメッシュデータのサイズが小さくなり、ファイルサイズがわずかに減少し、GPU パフォーマンスが向上する可能性があります。ただし、精度が落ちるというデメリットがあります。
  • Mesh Compression は、個々のメッシュに影響する設定です。ディスク上のメッシュデータを圧縮し、ファイルサイズを小さくします。デメリットとしては、ロード時間の増加、ロード時の一時メモリ使用量の増加、圧縮によるアーティファクトが発生する可能性があることです。

メッシュ圧縮設定にアクセスするには、モデルの Import Settings ウィンドウ を開き、Model タブの Meshes セクションを操作し、Mesh Compression ドロップダウンを使用します。

同じプロジェクトで両方の圧縮方法を使用できますが、同じメッシュに使用することはできません。メッシュに Mesh Compression を適用した場合、Unity はそのメッシュに Vertex Compression を適用しません。

注意Unity の Vertex Compression と Mesh Compression のデフォルト設定は、ほとんどのプロ ジェクトに適しています。問題がある場合のみこれらの設定を変更し、結果を評価して、変更が役に立ったことを確認してください。

Vertex Compression

Vertex Compression 設定では、プロジェクト内のすべてのメッシュに低精度のデータ形式を使用することができます。これを行うには特定のデータチャンネルのデータ型を設定します。

特定のチャンネルのデータ型を FP32 (Floating Point32、32 ビット浮動小数点数) から FP16 (Floating Point16、半精度浮動小数点数) に変更できます。FP16 形式は、格納する小数点以下の桁数が FP32 形式よりも少ないため、占有スペースが少なくて済みますが、精度は若干劣ります。

FP32 から FP16 に変換されたデータは、メモリ上の容量が少なくなり、ディスク上の容量もわずかに少なくなります。GPU ではデータが使用するメモリ帯域幅が少なくなり、GPU のパフォーマンスがわずかに向上する可能性があります。

頂点圧縮技術は、圧縮する頂点の属性の数によって異なる比率でメッシュを圧縮します。法線、接線、色、3 セットの UV 座標を圧縮する場合、圧縮率は通常約 1.45 倍です。

Mesh Compression

Mesh Compression 設定では、ディスク上の指定されたモデルアセットのメッシュデータを圧縮することができます。Mesh Compression のアルゴリズムは Vertex Compression 技術よりも強力で、圧縮率が高くファイルサイズが小さくなります。しかし、デメリットも多くあります。

この設定を適用すると、Unity はアルゴリズムを使用して各圧縮チャンネルの明示的な値を最大と最小の範囲に置き換え、固定ビット数によって各値がその範囲内のどこにあるかを表します。これにより、ディスク上のメッシュデータのサイズが小さくなります。データは、メッシュをメモリにロードするときに解凍されます。つまり、この範囲を元の値に変換します。変換後はパフォーマンスに影響しません。

この手法は、最終的なビルドサイズやメッシュが含まれる AssetBundle のサイズをできるだけ減らす必要があり、ランタイムの解凍によるパフォーマンスの低下が許容できる場合に、有効です。

Mesh Compression の限界

ランタイムのメッシュの解凍に追加の CPU リソースを使用します。つまり、メッシュデータのロードに時間がかかります。また、メッシュを解凍する際に、より多くの一時メモリを使用します。

さらに、圧縮率が比較的高いため、メッシュを解凍するときに不要なアーティファクトが発生することがあります。アーティファクトの発生を防ぐには、圧縮するメッシュに対して各オプションをテストし、正しく表示されることを確認してください。

最適化のためのメッシュデータの圧縮
頂点圧縮の設定