Edited at

Optimize Game Objects設定の効果計測

More than 3 years have passed since last update.


Optimize Game Objects設定とは

FBXのインポート設定に「Optimize Game Objects」というものがあります。

これは、階層構造になっているFBXの内部構造を最適化し、アニメーションの処理を高速化するためのものです。

詳しくはテラシュールブログさんの内容をご覧下さい。(少し前の記事なので、今のUnityではインターフェースが変わっていますが、効能は同じです)

http://tsubakit1.hateblo.jp/entry/2015/04/30/012956


計測してみる

これが実際にどの程度高速化するのかを計測してみました。

計測環境は以下の通りです。


  • Unity5.3.4p5を使用

  • 「SDユニティちゃん 3Dモデルデータ」を使い、Optimize設定をONにしたものとOFFにしたものをそれぞれ15体づつ並べ、Profilerで計測する


計測結果


Optimize無し

0.71~0.87ms程度


Optimize有り

0.27~0.41ms程度

結構違いが出ました。

特に理由がない限りはOptimize設定はONの方が良さそうです。


Optimize設定をすることによるデメリット

Optimize設定をすることでデメリットが存在します。

2つほど例を挙げてみます。


特定のボーンに対する計算を行う時に追加の設定が必要

例えば髪などの揺れものをスクリプトで制御するケースとか、手に武器を持たせるケースなどは、取り扱うボーン名をあらかじめインポート前に指定しておく必要があります。こちらはテラシュールブログさんにも記載がありますね。

ゲームでは多種多様なモデルが出てくるはずで、これらに対して追加出力するボーンを逐一設定しているとなかなかに面倒です。だからと言って全てのモデルで共通の設定をすると、特定のモデルでしか使わないボーンが全てのモデルに混入して、ちょっと処理負荷が増えてしまいます。

アセットインポーターで自動設定することも出来ますが、いずれにせよ色々考える必要があります。


あとでボーンが必要になった時にインポートしなおしになる

リリースされたゲームで仕様変更があり、特定のボーンが必要になったとします。例えば髪を揺らすことになったので、人間系のモデルで髪のボーンが新たに必要になる、といったケースですね。

この時、既にOptimize設定済みの人間系のモデル全てに対し、髪のボーンを追加出力する設定をしなおさなくてはいけません。端的に言うとプレハブの出し直しです。

更にアセットバンドルにしていた場合、アセットバンドルの更新が入ります。遊んでくれているユーザーさんにダウンロードを強いてしまう訳です。

これらは、予めOptimizeしないでおけば避けられる問題です。

もしも処理負荷をそこまで気にしなくても良いなら、Optimizeしないのも一つの選択かと思います。メリットとデメリットを見極めて使いたいですね。