この記事でわかること
Blenderで出力した3Dモデルの原点をワールド原点ではなく個別に設定した原点で出力できるようになる。
問題内容
例えば次のようなモデルをUnityで利用することを考えます。
ここでドアを開けた状態にするべくY軸を中心に30度回転すると次のようになります。
/(^o^)\ナンテコッタイ
これは原点位置が人間の意図する場所にないことが原因です。
邪魔なものを消した状態で見ると次のようになります。
操作側の意図としてはオブジェクト隅に原点があり、そこを中心に回転してほしかった。
しかし実際の原点はワールド原点(他のオブジェクトと共通の位置)となっていたため
意図せぬ回転となっていました。
ということでオブジェクトの原点を変更するための作業が必要です。
(または作成ソフトで原点を共通にせず、個別に出力する必要がある。今回は調べた限り個別出力はできなかった)
環境
- blender 3.1.2
- Unity 2019.4.22f
blender
3Dモデルを操作する際にはやはりblender。無料で素晴らしい。
blenderでやることは次の3点
- オブジェクトの分割
- オブジェクトの原点の変更
- オブジェクト固有の原点でエクスポート
オブジェクトの分割
今回利用しているオブジェクトは画像のように1つのオブジェクトとしてまとまっています。
扱いづらいため分割します。
まずモードを「Modeling」に変更します。
その後対象のファイルをすべて選択した状態で「P」キー押下後「構造的に分割したパーツで」を選択します。
そうすることでオブジェクトが個別に分割されます。
オブジェクトの原点の変更
分割できたため、(見た目のために)ドア以外を非表示にしました。
この時点では原点はオブジェクトとは離れた位置にいます。そのため原点の位置を変更します。
選択肢は5つあります。詳細は公式ドキュメントを参照してください。
一応2パターンのスクリーンショットを紹介します。
省いた「原点を3Dカーソルへ移動」, 「原点を重心に移動(サーフェス)」, 「原点を重心に移動(ボリューム)」は移動方法の差のため
詳細は検索をしてください。
-
ジオメトリを原点へ移動
「原点を設定」という分類でこれがあるのは少し疑問が残りますが、原点位置にオブジェクトを移動させるコマンドです。 -
原点をジオメトリへ移動
上記逆版です。
今回ドアを回転させたいため、原点が中心にあることは望ましくありません。
https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object
https://docs.blender.org/api/current/bpy.ops.object.html
オブジェクト固有の原点でエクスポート
今回はfbxでエクスポートします。これ以外で原点を変えつつエクスポートする方法が分かりませんでした。
ここで「トランスフォームを適用」のチェックボックスを有効にします。
Unityで確認
無事原点位置がオブジェクト固有のものとなっていることが確認できました。
(重心に置いているので結局回転は出来ない)
モチベーション
原理はすぐに分かったのだが、原点を変更してUnityで利用する方法が分からなかった。
検索ワード「blender オブジェクト原点で出力」
Blender Tips編 #3 -BlenderとUnityのやりとり覚書その1(モデル)-
で見つけ出すのにすごく時間がかかってしまった。
休日を半日潰してしまったという悲しみを糧にして、検索ワードに少しでも引っ掛かりやすくなるように
記事作成するぞ、ということが本記事作成のモチベーション。