日々適当

hibitekitou

アセットをどんなサイズで作るのか

cg |2019-07-11

UnityとBlenderの話です。

SoftimageはSI単位系とかは内部で持っておらず、内部単位を現実世界のメートルにするのかセンチメートルにするのかミリメートルにするのか尺にするのか、そんな風に自分の中で決めて制作をしておりました。シミュレーションの結果を適切に出すために最適なサイズの決め方とかはありましたがね。
Unityもそれは同様みたいです。1Unityユニットってマニュアルには書かれています。
現実世界の単位系の中で制作を進められるソフトも多いですね。UnityのマニュアルによるとMaxはインチが基準でMayaはセンチメートルだそうです。
そして1Unityユニットは1mとして作ることをUnityは推奨しているそうです。

Blenderの場合、デフォルトではメートル単位で運用されるようになっているようです(Unit SystemがMetric、LengthがMetersになってる)。

それで Unit Scaleの値を変えると下図のように同じオブジェクトなのにUnit Scaleに応じて大きさが変化するみたいですね。

とはいえ、内部的にはBlenderユニット単位で値は保持されているようで、BlenderでデフォルトのCubeを出した時、それは2 Blenderユニット四方のサイズということになります。で、LengthをMetersにすると一辺は2mで、Millimetersにしてもそれは変わりません。そのCubeを2ミリメートル四方として扱いたないならUnit Scaleを0.001にする必要があります。ってことで大事なのはUnit Scaleってことっすな。

そうやって、1Blenderユニットを1mとして作った1m四方のキューブを用意しました。これをFBX出しします。

Apply Scalingsのところを変えると、Unityに読み込んだ時にScaleに入る値が変わってきます。

All Local(左)とAll FBX(右)の二種類を試しています。ネットを見ると対UnityにはAll FBXを使用しろとありますね。All Localだと一見サイズは同じに見えますがスケール値に100が入っちゃってます。ちなみに同じfbxファイルをMODOに読み込んでもスケール値は100(10000%)となります。

ってことはAll Localの場合、Blenderが「このオブジェクトは1ユニット四方(サイズは1m四方)だよ」って言った時に、けれどもFBXデフォルトの1ユニットは1cmだから100倍のスケール値を持たせて保持しましょうとなるのかね。

一方でAll FBXは、Blender側で1ユニット1mにしてるからFBX側もそうしてねってことでしょうか?

で、Z-upのBlenderとY-upのUnityとでポーズの整合性を取るためには、Unity側でどうしてもX軸に90度の回転を入れないといけないです。しかも -89.98 度って値が入ってる。なぜ?
ということで、2.8ベータ版には実験的にそれを補正するオプションがついていて、それをオンにすること前提で、結果的にFBX書き出しでは以下のようにすれば良さそうです。

これで意図したポーズでSRTの値が全部デフォルト値になってくれました(ポジション・回転は全部ゼロ、スケールは1)。階層が複雑になった時、例えばキャラクター系をやった時にこの実験的に搭載された機能がちゃんと動作するかは分かりませんが、単純なものならこれで良さそうです。

コメント ( 0 )|Trackback ( )
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。