こんにちは、Unityエンジニアのオオバです。

SkinnedMeshRendererはボーンアニメーションを使用する時に必要となるRendererです。
その中にQualityという設定項目があり、各頂点が最大いくつのボーンから影響を受けるのかを設定できます。
実際に数値を変更するとわかりますが、低くするとモノによってはアニメーション中のにテクスチャが伸びてしまって、不格好な見た目になることもあります。
成果物のクオリティに関わる部分なので、適切な数値を選びたいところです。

このようにAutoを除くと1, 2, 4のどれかを設定できます。
Unity はスキニング、バッチング、物理計算、ユーザースクリプト、パーティクルについて CPU に依存します
公式マニュアルにあるようにスキニングはCPUに依存するためQualityの数値が高いほどCPUの負荷は高くなります。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
検証
約2700頂点のキャラを100体登場させてQuality値におけるCPU負荷の変化をUnityエディタで検証してみます。

SkinMeshRendererの負荷を見たいのでUnity ProfilerのCPU Usageを Rendering
だけにし、MeshSkinning.Update
の値をウォッチします。
Quality 1Bonesの場合


Quality 4Bonesの場合


結論
3000頂点ほどのローポリモデルではあまり負荷は変わらないので、あまり気にせずに4Bonesにしても問題ないと思われます。
腑に落ちない検証結果でしたので、次は数万頂点のモデルを使用してチェックしようと思います。おそらく頂点の多さがボトルネックになるのではないかと推測しています。
余談
Unity5.4からSkinnedMeshRendererの設定項目に Skinned Motion Vectors
が追加されています。
If enabled, the Mesh skinning data will be double buffered so that skinned motion can be interpolated and placed into the motion vector Texture. This has a GPU memory overhead, but leads to more correct motion vectors.
GPUのオーバーヘッドにはなるが、有効にするとスキニングデータがダブルバッファされ、モーションベクトルテクスチャを配置でき、より正確なモーションベクトル
を得られることが出来るとのこと。
モーションベクトルとは?
画面空間内のあるフレーム間で移動するメッシュやその他の物の量を追跡することが出来るものであるとのこと。
It's mainly used for updated image effects such as temporal antialiasing and motion blur.
Mesh Renderer Motion Vectors | Unity Forumより
要は使用するとスキンメッシュの動きを新しいバッファにレンダリングされ、使用用途としては、一時的なアンチエイリアシングやモーションブラーなどのイメージエフェクトに使われるということらしい。
負荷をテストしていないので何とも言えないが、イメージエフェクトを使用しないのであれば外したほうがGPUの負荷は軽くなるのだろうと思います。

この記事が気に入ったらフォローしよう
- Unity5.4.2f1