コンテンツにスキップ

Blenderの変なオブジェクト親子関係

不思議なペアレント座標系

Blenderのオブジェクト親子関係はかなり変わっている。他の3DソフトやUnityと比べると、ペアレント座標系の挙動が異なりバグのように感じてしまう。

例えば以下のスザンヌ(サルのモデル)を立方体に対して親子付けしたとする。

スザンヌ→立方体の順で選択してCtrl+Pオブジェクトを選択。

ここで立方体とスザンヌの座標をプロパティビューで確認する。

するとX座標が約6m、それ以外の軸が0になっている。立方体の座標は以下のように原点からずれているため、立方体からのペアレント座標であればスザンヌのY、Zが0にならないはずなので一見、スザンヌのワールド座標系での座標に見える。しかしこれはワールド座標系ではない

次に、立方体を回転させて、もう一度スザンヌの座標を見てみる。表示されているのがワールド座標系であるならば、座標が変化するはずだ。

ところがスザンヌの座標表示は変化しない。つまりこの表示は立方体の座標を基準としたペアレント座標系なのである。

つまり、ペアレント座標系であるが、オブジェクトのペアレント座標系の原点位置が親の原点ではなく親子付けした時点のワールド原点というよくわからない仕様になっている。

公式ドキュメントでの仕様

この仕様については公式ドキュメントのParenting Objectに記載されている。

Blender can assign a parent without moving the child object. This is achieved via a hidden matrix called the Parent Inverse matrix, which sits between the transform of the parent and the child.

以下日本語約

Blenderは子オブジェクトを移動させずに親を割り当てることができます。これは、親のトランスフォームと子のトランスフォームの間にある、親逆行列と呼ばれる隠れた行列を使って実現します。

つまり、座標を変化させず、ペアレント座標系に移行するための隠れ変換行列によってこの挙動になっている。何のために使うんだこの機能!!!

正しいペアレント座標系にする

使う側としては、子オブジェクトの原点は親の原点位置であったほうがわかりやすい。その場合は、親子付けを行うときにオブジェクト(逆行列なし)を選択することでできるが、子オブジェクトの位置がリセットされてしまう。

オブジェクトの位置がリセットされて立方体と重なる図

しかも、位置はリセットされるくせに何故か回転とスケールは保持されるなんで? 調べた範囲では、子オブジェクトの位置姿勢を保持しつつ、逆行列なしで親オブジェクトに親子付けする簡単な方法は公式では存在しない。糞が

代わりに以下のアドオンを使用することでこの操作を簡単に行うことができる。

まとめ

  • Blenderのペアレント座標系はかなり独特
  • プロパティで表示される子オブジェクトの座標系はペアレント座標系であるが、オブジェクトのペアレント座標系の原点位置が親の原点ではなく親子付けした時点のワールド原点になっている。
  • 子オブジェクトの位置姿勢を保持しつつ、逆行列なしで親オブジェクトに親子付けするにはアドオンを使う必要がある。