はじめに
前回は、Addressable Assets Systemについて内容を把握する記事を書きました。
→ Addressable Assets Systemを完全に理解する
内容は把握したものの、Addressable Assets System、実際運用に載せられるか?という点で、やはり気になるのはパフォーマンスだと思います。
そこで、かなりざっくりとですが検証を行ってみました。
パフォーマンス検証
今回は以下の点について調査を行いました。
- アセットが増えた時のエディタの動作(アドレス付与)
- アセットが増えた時のコンテンツカタログのサイズ、ロード時間
- アセットが増えた時のアドレス解決の時間
アセットの数は1万個で、PackingModeはSeparately、つまりAssetBundleも1万個の状態にしました。大規模なアプリなら普通に現実的に有り得る数だと思います。
また、検証に使ったマシンはMacBook Pro(i7 2.9GHz)です。
(実機検証したほうが良いのですが、今回は横着してそこまでやりませんでした)
アセットの用意
テスト用に適当にアセットを用意します。
数を用意しないといけないので、適当にワンライナーを書いてざっと1万アセット複製しました。
test/ok_00001.pngをtest/ok_10000.pngまで複製します。
for i in $(seq 2 10000);do i=`printf %05d $i` ;cp test/ok_00001.png test/ok_$i.png;done
例によっていらすとやさんからお借りしています。
そして、1万アセットをAddressablesウィンドウにD&Dしてアドレスを付けてやろうとすると…重い…!
1万アセットをAddressablesに入れるだけで、数時間かかりました…。
一度に大量のアセットのアドレス付与をしようとすると激重になるようです。
→ 0.0.26-previewで試した所、数秒で終わるようになっていました!GUIの描画が原因だったっぽい?
コンテンツカタログのサイズ、デシリアライズ速度
1万アセット・1万AssetBundleを格納したコンテンツカタログの容量は約6.8MBとなりました。
Apacheでgzip圧縮かければ約360KB程度に収まりました。gzip圧縮は必須と言えそうです。
AssetBundleの更新の度にロードすることになるので、これを大きいとみるか小さいとみるかはプロジェクトによると思いますが、何れにせよ構造上の問題で必要経費になるので、考えられる回避策と言えばコンテンツカタログが分割できるようになるくらいですかね。
デシリアライズ速度についてはとりあえずエディタ上で測ると150ms程度でした。
まあデシリアライズ=JsonUtilityのパフォーマンスの問題なので、JsonUtilityなら実機でも常識的なアセット数においてはめちゃくちゃ遅いみたいな事は無さそうな気がします。
コンテンツカタログの内容を見ている感じだと、結構冗長なデータが含まれているようには思えるので、キッチリとサイズもパフォーマンスも詰めたい場合は自前で実装するのが良さそうです。
アドレス解決の速度
アドレス解決(stringからResourceLocationへの変換)は、内部的にはDictionaryで引いてきているだけなので、特に問題は無さそうでした。強いて言うならメモリ使用量が気になるくらいですが、ここはもう構造上必要なコストになるので仕方ないと思います。
エディタ上での実行速度
ここが結構気になる所で、PlayModeがVirtualもしくはPackedの場合、実行時にResourceManagerRuntimeDataなどの生成処理が走るので、10〜30秒くらい待たされます。
エディタで内部的にキャッシュするため、2回目以降はキャッシュが効いてすぐ実行できるのですが、AddressableAssetsに何か変更がある度に再生成されるので、高速なイテレーションには向きませんね。
PlayMode: Fastの場合はほとんど待ち時間は無しで実行できるため、回避は可能です。
現状の問題点として、Packedの時に勝手にAssetBundleのビルドとResourceManagerRuntimeDataの再生成の処理が挟まってしまう所が不便なので、それをスキップできるようになれば特に問題は無さそうです。
結論
個人的に気になった点としては、エディタ上で大量のアセットのアドレス付与に時間がかかる点以外にはありませんでした。
まず現状アドレス管理が完全手動でしかできない所が不便すぎるので、アドレス管理周りはこれからどんどん改修されていくと予想しているのですが、大量のアセットのアドレス管理もスムーズに行えるようになるのかという所は気になる点ですね。