U
02 / 22 · 9 分
FAQ

3D モデルの取り込み:スケール、回転、消えた texture

短い答え

取り込んだモデルが小さい・回転している・真っ白なのはなぜ?

壊れたファイルではなく、三つのプログラムの食い違いです。スケールは Transform ではなく Model タブの Convert Units で直し、−90 度の回転は Bake Axis Conversion か、書き出す前に Blender で回転を apply して直します。色は texture を入れてから Extract Materials を押せば戻ります。ピンクは texture ではなく shader が無い状態です。

取り込んだモデルが百分の一の大きさで、うつ伏せに倒れていて、真っ白だとしても、それは壊れたファイルではありません。三つの別々のプログラムが、一メートルとは何か、どちらが上か、texture はどこにあるかで食い違っているだけです。そしてその食い違いはどれも、シーンでオブジェクトを拡大縮小するのではなく、importer で一度直せば済みます。

小さすぎる、または大きすぎる

Unity はメートルで測ります。Blender もメートルですが、FBX を既定で 0.01 のスケールで書き出すため、二メートルのキャラクターが二センチで届きます。3ds Max はセンチメートルで動くので、同じキャラクターを百倍の大きさで送ってきます。

  1. 1

    Project ウィンドウでモデルを選びます。このとき Inspector に出ているのはオブジェクトではなく importer で、タブは Model、Rig、Animation、Materials と並んでいます。

  2. 2

    Model タブで Convert Units にチェックを入れます。Unity はファイルが宣言している単位を読んで変換するので、自分で数値を打ち込むよりずっと高い確率で正しくなります。

  3. 3

    それでも合わなければ、小さく入った Blender のファイルなら Scale Factor を 100 に、大きく入った Max のファイルなら 0.01 にして Apply を押します。

うつ伏せに倒れている

Blender は Z を上とし、Unity は Y を上とします。書き出し側がその回転を行うはずなのですが、行われないと X 軸に −90 度回転したキャラクターが手に入ります。

  • いちばん良い直し方は Blender 側です。書き出す前にオブジェクトへ回転とスケールを apply し(Ctrl+A)、FBX の書き出しパネルで Forward を −Z、Up を Y にします。

  • 書き出し直せない場合は Unity 側で。Model タブの Bake Axis Conversion にチェックを入れると、回転は Transform に残らず mesh に焼き込まれます。

  • 避けたい回避策:90 度回した空の親オブジェクトにモデルを入れる方法です。何かが transform.forward を読むまでは動きますが、読んだ瞬間にキャラクターは横向きに歩き出します。

白、灰色、あるいはピンク

FBX は texture を運びません。運ぶのは material の名前と、書き出したマシンに存在していた画像ファイルへのパスだけです。Unity は名前を取り込み、画像を見つけられず、既定の白い material を渡してきます。

  1. 1

    texture のファイルは自分でプロジェクトに、モデルの隣のフォルダへコピーしてください。

  2. 2

    モデルを選び、Materials タブを開き、Material Creation Mode を Standard にして Extract Materials を押します。これで編集できる本物の material asset が手に入ります。

  3. 3

    texture をそれぞれ正しい枠へドラッグします。色は Base Map、法線は Normal Map へ。normal map として設定されていないものは Unity が直すか尋ねてくるので、はいを選んでください。

.blend ファイルについて

Unity は .blend を直接取り込めますが、変換のために裏で Blender を起動するだけなので、プロジェクトの全員が互換性のあるバージョンの Blender を入れておく必要があります。代わりに FBX を書き出してそれをコミットしてください。取り込み結果は同じで、Blender を一度も見たことのないマシンでもプロジェクトが開きます。