AndroidでBlendShapeの負荷を計測してみた

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ももっと負荷をかければわかりやすいペナルティが出てくるかも??

Blendshapes and shaders
The latest release notes have this: Shaders: Added support for BLENDWEIGHTS and BLENDINDICES semantics in vertex shaders If understand right, does...