2014年11月27日木曜日

BlenderからUnityへのモデルとアニメーションの出力

スケール


UnityはBlenderの100倍のスケールで動作している
Blenderからの吐き出しを100倍にしないとUnity上で1の大きさで表示されない
しかし
単純に100倍して出力するとトップノードに100倍のスケールが入る
このため子ノードのローカル移動が(ワールド移動は問題ないが)1/100単位になってしまう
そのため小数点以下2ケタが無視されてしまい誤差が生じる
かといって
Blender上で100倍のスケールで作業するとビューのクリッピングやデフォルトのオブジェクトの大きさが小さすぎるなどの問題が生じる
現在はBlenderで10倍のサイズで作業して
出力する際に10倍して対応している


フレーム番号の違い

Blenderのスタートフレーム=1
の場合
Unityのスタートフレーム=0


1フレームの扱い


Blenderで1fだけのモーションを作った場合
Unityの最少アニメーション長は0.1f
つまりBlenderの1.1f分のアニメーションも再生されてしまう
停止したアニメーションを作成したい場合
Blenderでは(例えば)1~2fで作成し
Unity上で1~2fとしなければならない


アニメーションの出力


Takeを出力できるという記述もあるが今のところ再現しない
よって
A:モデルとアニメーションを同時に出力してUnity上でアニメーションを分割する
B:モデルとアニメーションを別々に出力してUnityで分割して使用
C:モデルとアニメーションを別々でアニメーションも分割して出力
しかしCの場合再生されないアニメーションがあったのでAかBが望ましい
(ファイル数が多くなるのでデータロード時間の問題?)
また出力ファイルの大きさの問題からBを推奨する
その場合「フレーム番号の違い」に注意して分割すること


アニメーションが正常に再生されない場合


Anim.Compressionがデフォルトでは「Keyframe Reduction」になっているので
「Off」に設定する


アニメーションするオブジェクトの移動


(Genericモードの場合=Mecanim使用)
トップノード無し トップノード有り
オブジェクト自体を移動する ワールド位置に戻る ワールド位置に戻る
Unity上で親を付ける ワールド位置に戻る ワールド位置に戻る
ApplyRootMotion = off 移動先でアニメするが
トップノードが動かない
移動先でアニメ

Blenderでモデルを作成する時にBlender上では動かさないが
Unity上で全体位置を操作するためのトップノードを作成し
ApplyRootMotionをoffして作業することを推奨します

★RigセクションのRoot Nodeの項目変更による動作については未調査


出力ファイルの大きさ(参考)

モデルの構造やアニメーションの長さに依存しますが
アニメーションするノードだけをアニメーションファイルとして別に出力した方がサイズが小さくなります
また複数のアニメーションを含む場合は別々に出力するよりも1ファイルで出したほうが小さくなります

モデルとアニメーションを同時に出力>510kb
モデルのみの出力>197kbアニメーションのみを1フィアルで出力>170kb

アニメーションのみを分割して出力(複数のアニメーションファイルの合計)>346kb


プログラムによるアニメーションよりもアニメーションクリップが優先される

つまりそういうこと。
キャラクターの首の角度をプログラムで回転させようとしてもアニメーションクリップが適用されている限り動かすことができない。
頭と体を別オブジェクトにして間にアニメーションクリップと関係のないノードを挿入する?
現在キャラクターアニメーションを使っていないのでよくわからない。

0 コメント:

コメントを投稿