SDKでモデルを扱うときのパフォーマンスについて

最終更新: 2019年9月4日

パフォーマンス

更新速度

SDK上でモデルを表示する場合、アートメッシュの描画順によってはパフォーマンスが低下することがあります。
Cubismモデルは、背面(キャンバス側)からひとつずつアートメッシュが描画されます。
画面上にアートメッシュを描画していく中で、それが直前に描画したアートメッシュと描画設定が異なる場合、SDK上でのパフォーマンスが低下します。
切り替わることでパフォーマンスが低下する設定は以下のとおりです。

  • 描画するアートメッシュが使用するテクスチャ
  • 描画するアートメッシュの描画モード(通常、加算、乗算)
  • 描画するアートメッシュのクリッピングの有無

これらの要素が互いに影響していきます。
クリッピングはテクスチャや描画モード、マスクとなるアートメッシュが同一であっても設定の切り替わりが発生します。

例えば、テクスチャを2枚使用したモデルで、一部のアートメッシュが背面から以下の順番で配置されているとします。

[名前][ID][描画の設定][切り替わりの発生]
右睫毛ArtMesh6テクスチャ:2枚目
右眉ArtMesh7 
右頬ArtMesh8描画モード:乗算
右ハイライトArtMesh9クリッピング:右白目、描画モード:加算
右瞳ArtMesh10クリッピング:右白目
右白目ArtMesh11  
左睫毛ArtMesh16 
左眉ArtMesh17テクスチャ:2枚目
左頬ArtMesh18描画モード:乗算
左ハイライトArtMesh19クリッピング:左白目、描画モード:加算
左瞳ArtMesh20クリッピング:左白目
左白目ArtMesh21  

これらのアートメッシュは、表の下から順に描画されます。
このように並んでいる場合、描画の設定は表の下から数えると切り替わりが10回発生します。

この描画順を以下のように並び変えると、描画の設定が切り替わる回数は7回に減少します。

[名前][ID][描画の設定][切り替わりの発生]
右眉ArtMesh6テクスチャ:2枚目 
左眉ArtMesh16テクスチャ:2枚目
右頬ArtMesh7描画モード:乗算 
左頬ArtMesh17描画モード:乗算
右睫毛ArtMesh8  
左睫毛ArtMesh18 ○ 
右ハイライトArtMesh9クリッピング:右白目、描画モード:加算
左ハイライトArtMesh19クリッピング:左白目、描画モード:加算
右瞳ArtMesh10クリッピング:右白目
左瞳ArtMesh29クリッピング:左白目
右白目ArtMesh11  
左白目ArtMesh21  

アートメッシュの並び順、及び切り替わり状況は、Cubism Viewer for OWで確認することができます。
パラメータによって描画順が変化するような変形を設定した場合、切り替わり回数の予想が困難になります。

また、以下のオブジェクトや各ステータスの設定数が多いとSDK上でのパフォーマンスに影響しますので、多用しすぎないよう注意してください。

  1. アートメッシュの数
  2. ポリゴンの数
  3. デフォーマの数
  4. デフォーマの変換の分割数
  5. デフォーマの親子階層数
  6. 1つのオブジェクト(アートメッシュ、デフォーマ)に設定されたパラメータの数

この中では特に6が影響が大きく、基本的には2つまでの設定にすることを推奨します。
これは、パラメータのキーフォーム間のブレンド計算量が乗算で増加するためです。

例えば、1つのアートメッシュに2つのパラメータが設定されていた場合、各パラメータでブレンド計算を行ったあと、それぞれの計算結果同士をさらにブレンド計算します。
そのため、設定されたパラメータが増えるほどブレンド計算の量も増加してしまいます。

その他にも、アートメッシュやデフォーマが親のワープデフォーマの範囲の外に出てしまう場合、処理の負荷が増加するためパフォーマンスが低下します。
親子関係構築時の注意点についての詳細は以下の親子関係の組み合わせのページをご覧ください。

初期化速度

拡張補間は、パラメータの直線的な補間を曲線的に補間する機能で、実体としては指定された数だけキーフォームとキーフォームの間に拡張補間用のキーフォームを自動生成します。
そのため、複数のパラメータが設定されたオブジェクトに拡張補間が設定されると、拡張補間で追加されたキーフォーム同士が乗算されるため、これに比例してモデルファイルのサイズが増加します。

SDKで拡張補間を扱う場合、実行中のパフォーマンスにはあまり影響はありませんが、モデルを読み込む際の速度が低下しますのでご注意ください。

解像度

マスクのメッシュが、表示される画面に対して大きな範囲を占める場合、マスクの画面上における解像度が低下し、細かな表現が失われる可能性があります。
これはマスクを生成するテクスチャの解像度が変化しないことが理由で、実際のサイズに比べて小さなサイズで作成されたマスクを大きく拡大する場合に発生します。

これを回避するには、大きなマスクの使用は避けてください。

この記事に関するご意見・
ご要望をお聞かせください。