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

(2019/09/04 更新)

 

パフォーマンス

更新速度

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

 

解像度

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

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

© 2010 - 2020 Live2D Inc.