2014年1月14日火曜日

BlenderでUnity用にモデリングする際のTransform Scale

Unityで使うモデルをBlenderで作成する際に少々気を付けることがある。

Blender上でのTransform欄のScaleをX,Y,Z全て1.0に保つと幸せになれる(謎
1.0にしないととんでもなく面倒になる。

どういうことかというと以下に例を。


Blender上で TransformのScaleを

  X=1, Y=1, Z=0.5

で作成したとする。

UnityのAssetsにモデルをドラッグ&ドロップするとこれはZが2倍の大きさになってインポートされる。
つまりUnityインポート後のScaleは

  X=1, Y=1, Z=1

になる。
この際ご丁寧にきちんと1.0に正規化してくれるので、Blender上でのScaleが1ではない場合は拡大/縮小されてしまう。

その為にUnity上で手動でScaleを0.5に修正すればBlender上のサイズと同じにはできる。


できるがこれが罠!


これはUnity公式サイトのリファレンスでも、ScaleはXYZ全て1.0とすることを推奨している。




【Scaleを1にしないと何が起きるか?】

Unity上でオブジェクトに親子リンク関係を作ったときにいろいろ面倒になる。
Unityでは簡単にオブジェクトのヒエラルキーの階層で親子設定ができる。
この時、子のScale,Position等全てが親のScaleを基にした比率で掛けられる。

ということは例えば、非リンク時の親がScale Z=0.2、子がScale Z=0.5 だとリンク後の子のScale Zは、

  0.5 / 0/2 = 2.5

となる(あってるかな?

そして、Scaleだけならまだしも、距離=Positionも各軸毎にScaleの比率で変換されてわけがわからなくなる。

※RayCastなどは照射距離をグローバル距離で指定するが、その際にリンクしていると全く距離単位が異なる為面倒なことになる。 一旦リンクを外せばよいが。


と、いうことでBlenderでUnity用にモデリングする際は、

  TransformのScale X,Y,Zは全て1.0を維持すると幸せになれる


である。

つまりBlenderでObjectモードでの大きさの変更(Scale)をしないように注意する。
形状の変更はEditモードでメッシュを操作して行うようにすれば良い。
追記:Object ModeでScaleを「変更できないように」nキーを押したパネル内でScaleをロック(鍵マーク)してしまえば良い。これでScale由来の操作は全て利かなくなる。


もし、ヤッチャッタ場合は、Scale値をメモした後にX軸なら、

  エディットモードにてAで頂点全選択。
  S X メモしたX軸の数値

として、X軸をScale分拡大する。
その後、

  Scale Xを1.0にする。

と同じサイズにできる。
ただし非常に細かいことを言うとBlenderの数値設定上、若干小数点誤差はでると思われる。



Unityで親子リンクは使えないと困るし、スクリプトで制御するにしても位置単位がおかしくなるので、Scaleを1.0で統一するのは結構重要かもしれない。



どうもUnity+Blender使いは国内ではかなり少数なのか、情報が少ないのが難点。



0 件のコメント:

コメントを投稿