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しないのも一つの選択かと思います。メリットとデメリットを見極めて使いたいですね。