SDKでモデルを扱うときのパフォーマンスについて
最終更新: 2024年6月28日
パフォーマンス
更新速度
SDK上でモデルを表示する場合、アートメッシュの描画順によってはパフォーマンスが低下することがあります。
Cubismモデルは、背面(キャンバス側)からひとつずつアートメッシュが描画されます。
画面上にアートメッシュを描画していく中で、それが直前に描画したアートメッシュとブレンド方式が異なる場合、SDK上でのパフォーマンスが低下します。
切り替わることでパフォーマンスが低下する設定は以下のとおりです。
- 描画するアートメッシュが使用するテクスチャ
- 描画するアートメッシュのブレンド方式(通常、加算、乗算)
- 描画するアートメッシュのクリッピングの有無
これらの要素が互いに影響していきます。
クリッピングはテクスチャやブレンド方式、マスクとなるアートメッシュが同一であっても設定の切り替わりが発生します。
例えば、テクスチャを2枚使用したモデルで、一部のアートメッシュが背面から以下の順番で配置されているとします。
[名前] | [ID] | [描画の設定] | [切り替わりの発生] |
右睫毛 | ArtMesh6 | テクスチャ:2枚目 | ○ |
右眉 | ArtMesh7 | ○ | |
右頬 | ArtMesh8 | ブレンド方式:乗算 | ○ |
右ハイライト | ArtMesh9 | クリッピング:右白目、ブレンド方式:加算 | ○ |
右瞳 | ArtMesh10 | クリッピング:右白目 | ○ |
右白目 | ArtMesh11 | ○ | |
左睫毛 | ArtMesh16 | テクスチャ:2枚目 | ○ |
左眉 | ArtMesh17 | ブレンド方式:乗算 | ○ |
左頬 | ArtMesh18 | ○ | |
左ハイライト | ArtMesh19 | クリッピング:左白目、ブレンド方式:加算 | ○ |
左瞳 | ArtMesh20 | クリッピング:左白目 | ○ |
左白目 | ArtMesh21 |
これらのアートメッシュは、表の下から順に描画されます。
このように並んでいる場合、描画の設定は表の下から数えると切り替わりが11回発生します。
この描画順を以下のように並び変えると、描画の設定が切り替わる回数は7回に減少します。
[名前] | [ID] | [描画の設定] | [切り替わりの発生] |
右眉 | ArtMesh6 | テクスチャ:2枚目 | |
左眉 | ArtMesh16 | テクスチャ:2枚目 | ○ |
右頬 | ArtMesh7 | ブレンド方式:乗算 | |
左頬 | ArtMesh17 | ブレンド方式:乗算 | ○ |
右睫毛 | ArtMesh8 | ||
左睫毛 | ArtMesh18 | ○ | |
右ハイライト | ArtMesh9 | クリッピング:右白目、ブレンド方式:加算 | ○ |
左ハイライト | ArtMesh19 | クリッピング:左白目、ブレンド方式:加算 | ○ |
右瞳 | ArtMesh10 | クリッピング:右白目 | ○ |
左瞳 | ArtMesh29 | クリッピング:左白目 | ○ |
右白目 | ArtMesh11 | ||
左白目 | ArtMesh21 |
アートメッシュの並び順、及び切り替わり状況は、Cubism Viewer for OWで確認することができます。
パラメータによって描画順が変化するような変形を設定した場合、切り替わり回数の予想が困難になります。
また、以下のオブジェクトや各ステータスの設定数が多いとSDK上でのパフォーマンスに影響しますので、多用しすぎないよう注意してください。
- アートメッシュの数
- ポリゴンの数
- デフォーマの数
- デフォーマの変換の分割数
- デフォーマの親子階層数
- 1つのオブジェクト(アートメッシュ、デフォーマ)に設定されたパラメータの数
この中では特に6が影響が大きく、基本的には2つまでの設定にすることを推奨します。
これは、パラメータのキーフォーム間のブレンド計算量が乗算で増加するためです。
例えば、1つのアートメッシュに2つのパラメータが設定されていた場合、各パラメータでブレンド計算を行ったあと、それぞれの計算結果同士をさらにブレンド計算します。
そのため、設定されたパラメータが増えるほどブレンド計算の量も増加してしまいます。
パラメータの掛け合わせの数が多くなる場合、モデルの形状に差分を加算する機能であるブレンドシェイプに置き換えることで計算コストを大きく抑えることが出来ます。
その他にも、アートメッシュやデフォーマが親のワープデフォーマの範囲の外に出てしまう場合、処理の負荷が増加するためパフォーマンスが低下します。
親子関係構築時の注意点についての詳細は以下の親子関係の組み合わせのページをご覧ください。
初期化速度
拡張補間は、パラメータの直線的な補間を曲線的に補間する機能で、実体としては指定された数だけキーフォームとキーフォームの間に拡張補間用のキーフォームを自動生成します。
そのため、複数のパラメータが設定されたオブジェクトに拡張補間が設定されると、拡張補間で追加されたキーフォーム同士が乗算されるため、これに比例してモデルファイルのサイズが増加します。
SDKで拡張補間を扱う場合、実行中のパフォーマンスにはあまり影響はありませんが、モデルを読み込む際の速度が低下しますのでご注意ください。
解像度
マスクのメッシュが、表示される画面に対して大きな範囲を占める場合、マスクの画面上における解像度が低下し、細かな表現が失われる可能性があります。
これはマスクを生成するテクスチャの解像度が変化しないことが理由で、実際のサイズに比べて小さなサイズで作成されたマスクを大きく拡大する場合に発生します。
これを回避するには、大きなマスクの使用は避けてください。