Cubism SDK for Unityのパフォーマンス・チューニングについて
最終更新: 2020年1月31日
概要
基本的にはパフォーマンスチューニングはUnityのプロファイラーを用いて処理の重い箇所を確認しながら行ってください。
Cubism SDKにおいては、モデルの構造によってプログラム上でのパフォーマンスに影響が出る場合があります。
また、Live2D SDK for Unityは構造のわかりやすさを優先しているため、一部意図的にパフォーマンスを犠牲にしている部分があります。
以下では、SDKのパフォーマンスに影響がある点を説明します。
モデルの構造
詳細については こちら をご覧ください。
プロジェクトの構造
Unityのイベント関数
前述の通りLive2D SDK for Unityは構造のわかりやすさを優先しております。
そのため、各コンポーネントの更新処理は、LateUpdate()などのUnityのイベント関数から行っています。
このUnityのイベント関数は、呼び出すコストが少なくありません。
SDKをそのまま使用してモデルを複数表示した場合、実行環境によっては非常にパフォーマンスが悪くなってしまうことがございます。
パフォーマンスを重視するなら、各コンポーネントの更新処理をひとつのControllerから呼び出すようにすることが推奨されています。
Cubism SDK for Unityに同梱されているCubismUpdateControllerは、Cubism SDKのコンポーネントの実行順を制御するために同様の処理を行っているため、上記の対応を行うのであればCubismUpdateControllerの実装が参考になります。
CubismUpdateControllerの詳細は こちら をご覧ください。
マスク用テクスチャの扱い
Cubismのモデルで使用されるマスク用のテクスチャはグローバルなもの一つを共有して使用しています。
Unity上で、Prefabが生成されたタイミングでCubismMaskControllerにその参照が設定されます。
しかし、モデルのPrefabをそのままAssetBundleにした場合、Prefabをインスタンス化する際に、CubismMaskControllerに設定されたマスク用テクスチャは参照からコピーが設定された状態に変化します。
そのため、この仕様を無視すると、AssetBundleからモデルの生成と破棄を繰り返すたびにテクスチャが残り続け、メモリを圧迫することになります。
この現象の詳細と対策については こちら をご覧ください。