2025/11/12

Blenderリギング02~Bone, PoseBone, EditBone~

こんにちは、BACKBONEの中川です。

前回に引き続き、BlenderのArmatureの仕組みについて、主にMayaユーザーにとってなじみのない内部構造を整理したいと思います。

Armatureの骨データには、大きく分けて3種類のデータ構造が存在します。
これらの性質の違いを意識していなければ、

  • 骨の追加や階層構造の変更ができない
  • リグをスクリプト処理するときなどに「思いどおりにプロパティが見つからない/値が書き込めない」

といったような混乱が起きがちです。

このような混乱を避けるため、今回は前回触れていない骨データ”Bone“を中心に、各骨データの仕組みや役割をまとめます。

 

◆3種類のBone(概要)

前回の記事では、Boneの種類として、

【Object Data-BlockのPoseにPose Boneが、Armature Data-BlockにEdit Boneがある】

と説明しました。



この2種類が存在することは事実ですが、あくまでGUIでArmatureを操作するうえでの直感性を重視し、わかりやすく単純化した説明に留めたものではあります。
というのも、ユーザーがリギングやアニメーションの作業をする際に意識するのは、基本的にこの2種類のみだからです。

・リギング作業時:Edit Boneを編集し、初期ポーズや階層構造を設定する
・アニメーション作業時:Pose Boneを編集し、アニメーションを作成する

ただし実際には、この2種類に加え、Boneというデータ構造が存在します。
Boneは、Pose BoneやEdit Boneとは違い、ユーザーは直接編集できないため、意識する機会が少ないデータだと思います。

Boneは、Edit Boneと同様Armature Data-Blockに含まれます。

これらの役割をより深く理解するために、それぞれの違いを見ていきましょう。

 

◆Pose Boneは、骨のデータ……ではない!?

リギング作業において、Armatureの骨を追加しようとして、Pose Modeで骨を追加しようとしたり、骨を複製しようとした経験はないでしょうか?
そのとき、骨の追加はPose Modeではできず、Edit Modeに移ってEdit Boneを追加するしかないと気づくと思います。

Blenderの学習をはじめた人が、
「Pose BoneもEdit Boneも、ポーズが違うだけでどちらも構造は同じではないのか?」
「Pose ModeでもEdit Modeのように骨を追加できるようになっていないとは、なんてBlenderは融通が利かないんだ!」

と不満に感じるのは、”あるある”ではないかと思います。

 


↑ Edit Modeでは骨の追加ができるが…


↑ Pose Modeでは骨の追加ができない!

 

これは、Pose BoneとEdit Boneの性質の違いにより、操作可能なデータが異なることを示しています。
なぜEdit Boneでできることが、Pose Boneでできないのでしょうか。

実はPose Boneは、その名前から一見「ポーズをつけるための骨データ」と認識してしまいそうですが、
実態は骨ではなく「ポーズ(位置・姿勢・スケール)の状態 ととらえるほうが本質的な理解に近いです。

“pose bones are not bones, they are just the state of the armature”

公式リファレンス『Bones & Armatures』より)

“状態(state)”という言葉をもっと平たく言えば、そのフレームにおける、各ボーンの位置や姿勢などを表す“数値のかたまり”です。
Pose Boneは階層構造や骨の初期ポーズなどの骨自体の情報を保持していません。
Pose Modeで骨の追加ができない理由を、「Pose Bone自体は骨のデータではなく、各骨のポーズを表す数値でしかないから」と考えると、理解しやすいと思います。

ではPose Boneが骨の情報を保持していないのなら、なぜPose Boneをアニメーションさせるだけで、Armature Modiferのデフォームが可能なのでしょうか?
デフォームの評価には【骨の状態(その時の位置や姿勢)】だけでなく【骨の情報(階層構造や初期ポーズ)】も必要なのではないでしょうか?
その答えは、「Pose Boneが保持していない骨の情報は、他の骨データから参照しているから」ということになります。
その参照先の骨データが、今回の紹介する
Boneというわけです。

 

BoneとEdit Boneの違い

Pose Boneの本質は「骨のポーズの状態」であるのに対して、
BoneとEdit Boneはまさに「骨のデータ」です。

BoneとEdit Boneの役割は、以下のような違いがあります。

◆ Bone
・Armatureがデフォームを計算する際に参照する初期ポーズを規定する骨。
・ユーザーは直接編集できない。
・どのModeでも存在する。

◆ Edit Bone
・Boneの座標や姿勢を編集するために一時的に生成される骨。
・Edit Modeで、ユーザーが直接編集できる。
・Edit Mode以外では存在しない。

Armatureの初期ポーズを編集したいとき、Boneを直接編集することはできません。
初期ポーズ(Boneのポーズ)を編集するには、【
Edit Boneを編集→Boneに反映】と、Edit Boneを媒介する必要があります。

より詳細なフローとしては、以下になります。

  1. ユーザー)Edit Modeを始める。
  2. Blender)自動でBoneをコピーし、Edit Boneを生成する。
  3. ユーザー)Edit Boneを修正する。
  4. ユーザー)Edit Modeを終了し、他のModeに移る。
  5. Blender)自動でEdit Boneの編集結果をBoneに反映する。
  6. Blender)自動でEdit Boneを削除する。

このフロー図の通り、Edit Boneは常に存在するわけではありません。
Edit Modeに入ったときにBoneをコピーする形で新たに生成され、Edit Modeから抜けると削除されるという、一時的な存在です。

※初期ポーズを編集する手段として、Edit ModeでEdit Boneを直接編集する以外にも、Pose Modeで「Apply Pose」を実行する方法もあります。
 こちらの場合も、内部的には「Edit Boneの作成→Edit Boneを媒介してBoneを編集→Edit Boneの削除」という処理が走っています。


上記のフローを留意しておかないと、スクリプトでEdit Boneの状態を参照しようとするとき、
「さっきまで存在していたEdit Boneがなくなった?!」という状況が発生します。

この状況をスクリプトで再現します。

5行目でEdit Modeに移ると、6,7行目でEdit Boneの数や、具体的な骨の情報が確認できます。
ところが9行目でPose Modeに移ったことで、10,11行目(6,7行目と同じスクリプト文)で、結果が変わっていることがわかります。
これは、Pose Modeに移った瞬間に、Blenderが自動でEdit Boneを削除したからです。


このような状況を避けるために、「初期ポーズを取得するためには、Edit BoneではなくBoneを参照すればよい」と考えたくなるかもしれません。
ところがEdit Modeの編集中は、Edit Boneのみ編集されていて、Boneには最新の姿勢が反映されていません。

6行目でEdit Modeに移行した後、7行目でEdit Boneの位置を変更しましたが、9行目ではBoneの位置に反映されていません。
11行目でPose Modeに移行したことでEdit Boneの結果がBoneに反映されていて、そのことを12行目で確認できます。


以上から、初期ポーズを取得するときは、

◆ Edit Mode:
・編集前の初期ポーズ → object.data.bones(Bone)を参照する
・編集中の初期ポーズ → object.data.edit_bones(Edit Bone)を参照する

◆ Edit Mode以外(Object ModeやPose Mode):
・常にBoneを参照する

と使い分ける必要があります。

※余談ですが……
このようにBoneの編集する際に、Edit Boneを介するフローが採用されている理由については、公式ドキュメントに明記されている文言を見つけることはできませんでした。
推測するなら、Armatureによるデフォーム評価に、Boneで規定する初期ポーズや階層構造を参照していることが関係していると思われます。

もしEdit ModeでBoneをリアルタイムに編集するようにすると、Boneが変更されるたびにMatrixやコンストレイントを都度再評価する必要があり、動作の安定性に影響しそうです。
そこで、Bone自体を触らずに再評価が発生しない形で初期ポーズを安全に編集できるよう、一時的にEdit Boneという骨構造を用意する仕組みが採用されたのかもしれません。

※この経緯は公式情報からは確認できないので、あくまで1ユーザーの推測として認識ください。

 

◆まとめ

今回、Bone, Pose Bone, Edit Boneの違いをまとめてみました。

これらの違いを意識することで、スクリプトを使用して骨の情報にアクセスしようとしたとき、

「参照したいのに、なぜかアクセスできない!」
「編集したいのに、なぜかエラーが出る!」

などの混乱の発生を回避できるのではないでしょうか。

各モードでのアクセス可否をおおまかにまとめましたので、整理のお役に立てていただければと思います。


※1 Edit中の結果は随時更新されない
※2 データ自体が存在しない
※3 GUIからは不可、スクリプトからは可

以上です。

今後も、Blenderに関するさまざまな情報をお届けしていきたいと思っています。
当社では、Blenderを活用したリグ開発や制作にも力を入れております。
Blenderに関してお力になれることがございましたら、どうぞお気軽にご相談くださいませ。

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。自己責任でご使用ください。



ブログTOPへ戻る