BlendShapeはCPUでメッシュ頂点変形してそれをGPUに送るような気がするので一見するとパフォーマンスは悪いように思えます。
というわけでUnity2019.3.0b、Nexus5Xでprofileしてみましょう。vroidでface部分2339頂点、3150△。1、10ボタンは毎フレーム更新するblendshape idx数。Button押すとBlendShapeありモデルと無しモデルを切り替えます。
結果
違いが…分からない。誤差レベルで何も起きません…さすがにこの程度ではBlendShapeの有無はなんの影響もないか…
再挑戦
10倍にしてみました。総頂点数は20万におよびます。
『禍つヴァールハイト』モバイルにおけるプレイヤー最大100体同時表示可能なグラフィックス最適化について
ちょうど 禍つヴァールハイト の最低頂点数がこのくらいです。これならどうでしょうか?
結果2
違いが…わかりません。少なくとunity profiler上ではボトルネックは見当たりませんでした。
古い記事ですが、こちらでもパフォーマンスに違いがみられないとありました。(ただこのスライド測定環境が怪しいんだよな…Standalone Editorじゃないかな?
まとめ
とりあえずBlendShapeガンガン使っていってよさそう?開発していってパフォーマンス上のペナルティ見つけたらまた更新します
Standaloneで高負荷にしてみたら普通にペナルティ有
最大数を100体にしてみたところ、スパイクが発生しました。
ざっくり、0以外のウェイトの数に相関がありそうです。100体×30blendShapeが0以外なら、i7 6700 gtx1070でComputeSkinningDispatch 5msくらい。全て0なら何も起きません。
もしかしたらAndroidももっと負荷をかければわかりやすいペナルティが出てくるかも??
https://forum.unity.com/threads/blendshapes-and-shaders.581956/