Unity5.3になり、AssetBundleの性能が改善されました。
実際どれぐらいの差があるのか簡単ですけどパフォーマンス計測してみました。
参考にした公式のAssetBundleのサイト
Asset Bundle Compression
Asset Bundle Internal Structure
LZ4形式
Unity5.3になり、一番大きな所としては、「チャンクベース」のLZ4形式をサポートした所。
どういう事かというと、今まではLZMA形式で、ひとまとまりのAssetBundleが合った時に、全体を解凍する必要があったのですが、特定のAssetのみを圧縮した状態でも解凍できることにより、圧縮したまま保存ができ、読み込み時の負荷が減りメモリ使用量が良くなるというものです。ただし、ディスク上のファイルサイズはLZMAより1.5~2倍ぐらいに膨れ上がります。
ただ、LZMA形式に関してですが、公式の説明を見ると、ダウンロード後にLZ4形式に再圧縮しているみたいな記述があるので、ダウンロード後に関してはさほど差はないかも知れません。
LZ4形式への変換方法
AssetBundleを作成する際に指定する、BuildoptionにBuildAssetBundleOptions.ChunkBasedCompressionのフラグを追加します。
計測条件
しっかりと計測したわけではなく、手元の環境でにあるものを使用したので、
計測として足りない部分はあるのですが、以下の様な条件で実行しました。
・LoadFromCacheOrDownloadを使用
・compressionEnabledはtrue
・AssetBundleにするデータはFBXとテクスチャを1000ファイル程使用し、一つのAssetBundleを作成
・AssetBundleにする前の全ファイル数のサイズは300MB程
・iPhone5とXCodeを使用し計測
・ダウンロード後は、GetAllAssetNamesとLoadAssetを使用し全ファイルの読み込み
計測結果
圧縮形式 | Unity4-LZMA | Unity5-LZMA | Unity5-LZ4 |
---|---|---|---|
ディスク上のファイルサイズ | 23MB | 24MB | 36MB |
キャッシュ後のサイズ | 66MB | 43MB | 38MB |
ダウンロード時間 | 8.3秒 | 9.7秒 | 5.2秒 |
ダウンロード時のメモリ使用量 | 60.5MB | 51.7MB | 60.84MB |
Load時間 | Load関数が違うため未計測 | 23.6秒 | 25.3秒 |
Load時のメモリ使用量 | Load関数が違うため未計測 | 45MB | 47MB |
結果としては上記のようになりました。
LZ4形式のAssetBundleがキャッシュ後のサイズ、ダウンロード速度ともに優秀でした。
メモリ使用量に関しては、LZMAの方が優れていました。Load後の数値に関しては、誤差な部分ではあると思います。
※ここに記載している数値は、AssetBundleの内容、通信環境、実行環境により変動するものであり、絶対的なものではないので、各環境上で計測していただき、参考程度に捉えて頂ければと思います。
まとめ
LZ4形式はファイルサイズが膨れ上がりますが、パフォーマンスの向上が見込まれます。
利用するにも、AssetBundle作成時にBuildoptionを設定するだけで、既存のプログラムを変更する事なく動作しますので、移行コストはかかりません。
ですので、Unity5.3以降では、LZ4形式のAssetBundleを利用していこうと考えています。