3DCGで何をどう作るか考え中

ZbrushとBlenderの使い方、ヒント、コツなど。たまにZbrushプラグイン開発も。

Blenderのアーマチュア、ボーン、リグを理解する

(約 12,000文字の記事です。)

f:id:yamato-tsukasa:20210810224954j:plain

リグとボーンの違いを一言で説明できますか?私は勘違いしていました(笑)スキニングの意味で「リグ入れ」と言っていました。恥ずかしい……。

今まで何となく使っていた用語を正しく理解して表現するための基礎知識をまとめてみました。長文ですが「それだけ丁寧に解説」しました!

対象読者はBlenderユーザー、ボーンによるポージング初心者です。

更新履歴

2021/08/12 テールジョイントの罠を追記。

前書き

前回の記事のように、私はZbrushではスカルプトによるメッシュの変形、それ以外の作業をBlenderで行うことにした。

ZbrushとBlenderの連携強化(Blenderアドオン開発中) - 3DCGで何をどう作るか考え中

その中でもBlenderでボーンによるポーズ変形と、ポージング中であってもZbrushとBlenderとをGoBアドオンと自作アドオンでいつでも自由に往復できるようになったことが大きい。ポージング中であってもトポロジ変更が自由になるMyアドオンの完成がこれを決定付けた。

初心者のためのBlenderアドオン開発マニュアル執筆と、Zbrushとの連携 - 3DCGで何をどう作るか考え中

アニメーション用途ではない「静止画用途」

ただ、ポージングと聞くと多くの人はアニメーション用途やゲーム用途を思い浮かべるだろう。だが私の場合は3DCGの静止画用途として「楽に効率よくキャラクターにポーズを与える」目的でボーン変形を使いたい。だからIKによる効率や、アニメーションのための効率化手法についてはあまり触れない。ぶっちゃけ、全てFKでいいと思っている。シンプルでいいのだ。静止画用途やフィギュア造型用途では、1ポーズが思い通りに仕上がればそれでいい。なのでIKやリグコントロールなどの「アニメーション用途、ゲーム用途のための話」はあまりしない。

とはいえ、基礎の基礎を理解する上では重要な情報が多い。本当の基礎をこの記事にまとめた。

Blenderユーザーのための解説

Blenderから3DCGに入るとBlenderの常識が3DCGの常識のように思われるかも知れないが、Mayaなどのオートデスク製品が標準として解説され理解している人も多いだろう。この記事では、Blenderの常識なのか3DCG全般の常識なのかについてもコメントしておく。そうすることでDCCツールの一般常識と、各ソフトウェア独自の呼称などの違いが理解できれば、以後の理解がスムーズだから。

ボーンを正しく理解する

f:id:yamato-tsukasa:20210810195914p:plain

上のボーンは、普通にアーマチュアから単一ボーンを追加した場合の上下反転状態。説明のためにヘッドが上、テールが下となるようにしている。

Blenderではヘッド、テールと言うが、一般的にはこれらはジョイントというものだ。なのでこの記事ではヘッドジョイント、テールジョイントとも書く。

ボーンとは実はこの「ヘッドジョイント、テールジョイント」という2つのジョイントを意味する。ジョイント間の8面体は、ヘッドとテールとの関係を目で見て分かるようにするためにあるということと、クリックして選択しやすくするためにあるだけだ。だからカスタム設定で簡単に見た目を変えられる。

f:id:yamato-tsukasa:20210810200629p:plain

なのでBlenderでは編集モードでも「ジョイントを除いた8面体のみ」を選択できない。ボーンの実体とは「2つのジョイント+その間を視覚的に見せるオブジェクト」だから。

つまり、今まで何となくボーンと呼んでいたものの正体は「2つのジョイント」だったりする。それらは正確にはヘッドジョイントとテールジョイントなわけだ。

ボーンとは?「ヘッドジョイントを中心に回転するもの」

理解ができたところで普通のボーンの状態で解説する。

f:id:yamato-tsukasa:20210810201430p:plain

次にボーンの回転特性。ボーンはヘッドジョイントを基準として回転する。Blender 2.93系からは標準でヘッドジョイントにXYZ軸が表示されるようになった。それまでのBlenderではテールジョイントにそれがあったようだ。だがMayaのボーンを見た場合でもヘッドに軸が表示されるのが一般的だからそれに合わせたのだろう。

だから何なの?と思うかも知れない。

だがこの理解がとても重要なのだ。

Eキーで複数ボーンにした場合

f:id:yamato-tsukasa:20210810201832p:plain

編集モードでボーンをEキーで追加すると上のようになる。ボーンが2つあるのは分かるが、ジョイントが3つしかない。では真ん中のジョイントはヘッドなの?テールなの?

正解は「選択中のボーンで意味が変わる」のだ。

復習。くどいが、ボーンとは「2つのジョイント」であって、8面体のことではない。8面体はヘッドとテールを視覚的に分かりやすくするためのユーザーインターフェースに過ぎない。とはいえその表現では分かりにくいので以降では8面体のことをオブジェクトとして説明する。

なので、選択中のボーンは上か下かどっち?の質問は「選択中の2つのジョイントは上の一組ジョイントなのか下の一組ジョイントなのかどっち?」という質問と同じだ。上のボーンを選べば真ん中はヘッドジョイントになるし、下のボーンを選べば真ん中はテールジョイントになる。

上のボーンを回転させると当然ながらヘッドジョイントを基準に回転するし、下のボーンを回転させると一番下のヘッドジョイントを中心に回転する。

何を当たり前のことを?と思うかも知れない。

ところがこの理解は、Eキー操作では自動でボーンに親子関係がセットされるというBlenderの自動機能を理解していないと後々困ることになる。

ボーンの追加では「自動的に親子関係」がセットされている

まず大前提としてBlenderではボーンの話になると「オブジェクト・プロパティ」の項目ではなくて「ボーン・プロパティ」の項目の設定に意味が出てくる。ここが罠。

f:id:yamato-tsukasa:20210810202611p:plain

なので編集モードでボーンを選んでオブジェクトの親子関係を見ても何もセットされていないように見えるが、ボーン・プロパティの同項目を確認するとしっかり親子関係がセットされている。

ではこの親子関係を切るとどうなるか?(編集モードで操作すること)

f:id:yamato-tsukasa:20210810202912p:plain

するとジョイントの数が3から4になった。そして下のボーンを回転させると、中間のジョイントが実は下のボーンのテールと上のボーンのヘッドが重なっていたということが分かる。つまり、親子関係があるときには中間ボーンは共通ジョイントであり、親子関係を解除すると各ボーンの必須ジョイントに戻るわけだ。

厳密に言うと、以下の接続オプションのON/OFFで変わる。

f:id:yamato-tsukasa:20210810203327p:plain

接続OFFで親子関係があるとこんな感じで点線で親子関係を可視化してくれるわけだ。

f:id:yamato-tsukasa:20210810203537p:plain

いずれの場合であっても、ボーン操作の基準はヘッドジョイント、ということに変わりはない。だが多くのボーンでは、特に人型では関節が離れていることは少ないので親子関係+接続ONのボーンをよく目にする。

例外なのは股関節や肩関節周りだ。骨盤のようなオブジェクトを設置することは少ない。というか見たことがない。股関節の位置にヘッドジョイントが来るように「大腿骨相当」のボーンがセットされることになる。そのときに黒の点線を見ることになるだろう。

f:id:yamato-tsukasa:20210810204557p:plain

コーヒーブレーク(休憩)

こう考えると、あれ?肩関節ってどこの骨を経由して背骨とつながっているの?と思った。背骨につながっていなければ重力に引っ張られて脱落してしまう(笑)筋肉だけでつながっている気もしないし。

解剖学的に面白いと思う。肩甲骨は筋肉で背骨とつながっている気がする(適当w)。どうやら鎖骨ボーンのヘッドと「可動しない肋骨ボーンのテール」が親子関係にセットされていそうだ。もしBlenderのリグで人体を表現した場合、肩関節や鎖骨はきっと点線で背骨とつながることになると思う。

ここまででボーンの理解ができたと思うので次に進もう。

ウェイトとボーンの関係(スキニング)

ボーンを入れたら半自動でウェイトペイントできる。(自動ウェイト塗りの手順は各自学習して下さい。)もちろん手動でもいいし便利なアドオンを使ってもいい。なのでボーン入れはウェイト設定のための必須作業だ。ここまではすんなり理解できるはず。

ボーンのウェイトをメッシュに設定することをスキニングと言う。ま、用語だと思って覚えて下さい。

f:id:yamato-tsukasa:20210810210023j:plain

ウェイト設定(スキニング)が終わったらボーンを回転させるとメッシュが変形する。Blenderではカラフルなウェイトが見える。

f:id:yamato-tsukasa:20210810212334j:plain

(ちなみに頂点グループ未割り当ての場合は紫になる。紫色のウェイト値は存在せず、紫色=頂点グループ設定なし、という意味だ。)

当たり前すぎて何?と思うだろう。

だが思い出してほしい。ボーンとは2つのジョイントを意味する。決して8面体ではない。そしてボーンはヘッドジョイントを中心に回転する。なのでウェイトとは実は「ヘッドジョイントの回転や移動に何%追従して各頂点を移動させるか」を指定する値なのだ。8面体に追従しているわけではない。あくまでもヘッドジョイントの回転情報を参照しているわけだ。

Blenderでは赤に近いほど100%ヘッドジョイントの回転に追従し、ミックスされた緑色は一方のヘッドジョイントの回転状態と他方のヘッドジョイントの回転状態とをミックスしたように各頂点が移動するわけだ。だがボーンの親子関係の影響によって、子のボーンを動かさなくても親のボーンを回転させると結果としてポージングが変わって見えるわけだ。

だから序盤で親子関係の話もしたのだ。ボーンのポージングは決してウェイト値だけの変形ではなくて、ウェイト元のボーンに影響を与える親ボーンによる変形もあるのだ。親子関係があればウェイトがなくても100%親の回転に追従することは明らかだ。

なのでボーンによる変形とは、

  1. ウェイトの設定値(ボーンのヘッドの回転に何%追従するか)
  2. ボーンの親子関係(子は親のヘッドに100%追従する)

という2つの要素によって変形しているという理解は重要だ。

テールジョイントの罠

2021/08/12 追記。

くどいが重要なのでもう一度説明する。ボーンの回転や移動の基準はあくまでもヘッドジョイントだ。回転時のウェイトもヘッド位置と回転角度が基準となる。

ではテールジョイントは何のため?

一つは接続された親子関係の場合は「次のボーンのヘッドジョイント」を兼ねるために存在する。もう一つは接続が外された親子関係の点線を表現するためにある。

f:id:yamato-tsukasa:20210812015628p:plain

ここまでの解釈で言うと、点線がもし「従属関係」を示すものならば、本来はヘッド同士を結ぶべきだと思う。親子関係が切れたボーン同士の場合、重要なのは親のヘッドの回転角のみだから。試しに親のテールを自由に移動させてもポージングに何の影響も与えない。実はこの解釈がとても重要だ。

では黒の点線は何を示すか考えた結果、どうやら「接続が外される前の互いの接続先」を示しているらしい。ならば確かに親のテールと子のヘッドなのは理解できる。

だが繰り返しになるが、ボーンの親子関係で重要なことは「親のヘッドジョイントのみ」なのだ。他は飾りなのです。偉い人にはそれがわからんのですよ。

ヘッドジョイントの位置がボーン・ポージングの回転時の軸になる。親のテールジョイントはどうでもいい。だがもし子ボーンに接続されているならば、それは子ボーンのヘッドジョイントになるので、すなわち親ボーンのテールジョイントは重要ということになる。

こうなると最初のたった2本のボーンとジョイントの理解が重要になることが分かってもらえたと思う。

点線の親子関係の表現に本質的な意味はない。単純に「もし接続していたらどこにつながるか」を示しているだけだ。重要なのは常に「親のヘッドジョイントの状態(位置と回転角度)」なのだ。

追記終わり。

アーマチュアって何?

これはBlender独自の用語。3DCGの一般的な呼び名はスケルトンというものだ。なのでBlenderでのアーマチュア=スケルトンと覚えて間違いない。

ではアーマチュア(スケルトン)とは何?

これは簡単にいうと「親子関係のあるボーンの集団」のことをアーマチュア(スケルトン)と言う。親子関係が無ければ個別のアーマチュアを構成することになる。通行人Aのアーマチュアと通行人Bのアーマチュア、というように。

そして前述したように、ボーン同士の親子関係でポーズ自体も変えられるから「アーマチュアによるポーズ変形」という表現は正しい。だからこそ初心者は「アーマチュアで変形なの?ボーンで変形なの?どう違うの?」となるわけだ。どっちも正しいが注目している規模が違う。アーマチュアならば人物全体のポージングのことを言おうとしているし、ボーンならば手足など一部の変形について言おうとしている。

ボーンにも2種類ある

ここまでの理解では、ボーンはメッシュにウェイトをセットするために必要なものだ。そして3DCGでは一般的に、かつ大原則として「ボーンのポーズ変更で」メッシュを変形させる。なのでこのポーズ変形用のボーンのことを特にデフォームボーン(Deform Bones)と言う。

というのも、メッシュを変形させないボーンの使い方があるのだ。例えばIKで肘や膝の曲げ方向を指定するボーンや、キャラクターの位置を指定するためのボーンなど、ボーン制御用のボーンもあるのだ。(IKを学べば必ず出てくるポールターゲットで指定するボーンや、最上位に配置されるルートボーンなど)

f:id:yamato-tsukasa:20210810220607j:plain

さて、デフォームボーンはメッシュのウェイト元であり必須だが、この「別のボーン」は、ウェイトが必要ない。というかウェイトを設定してはいけない。このボーンはデフォームボーンを制御するためのインターフェースなのだ。(上記の肘を制御しているボーンは次で説明する「リグ」なのだ。)だから多くの場合でボーンの変形設定チェックボックスをOFFにしているはずだ。

f:id:yamato-tsukasa:20210812022323p:plain

リグって何?ボーンとどう違うの?

で、このデフォームボーンを制御するためのインターフェースのことをリグという。

なのでリグとは、簡単に言うと、「デフォームボーンを制御する仕組み+そのユーザーインターフェース」なのだ。2つも機能がある。例えばこれは、足元に設置されたボックスを移動させるだけで勝手に膝が曲がってくれる。しかも逆関節にならないような仕組みも導入されている。

f:id:yamato-tsukasa:20210810221142p:plain

なのでユーザーは足元のボックスをマウスで移動させるだけで、キャラクターは自動的に膝曲げスタイルになってくれる。

リグはコントローラーなのだ。ゲーム機のコントローラーみたいなイメージでいい。デフォームボーンをコントールするための手段、ユーザーインターフェース。

楽ちんだ!これがゲームキャラやムービーでの歩行の場合、ボーンを1つずつ動かすよりもリグを導入してアニメーションさせた方が効率的なのは間違いない。そういう「楽するための仕組み」としてリグが誕生した、とも言える。なので、リグは大抵の場合は複数のボーンの状態を同時に変更する機能が与えられている。

なら、1つのボーンを1つのリグで制御するならばリグなど不要?とも思えるが、それはFKでの話。もしIKで制御している場合には、ポージング状態で1つのデフォームボーンを制御するためのリグは必要になる場合もある。

FK?IK?各自で学習して下さい。基本事項ですので……。

IKは便利な時もあるが、細かいポーズ付けではFKの方がイメージ通りに仕上がりやすい。例えば足のポージングは確かにIKが入っていると楽だが、逆に手にIKが入っていると思った通りのポージングにならず、最初から肩から指先に向かってFKでポーズ付けした方が早くてイメージ通り、という場合もある。

リグをウェイトの元にしない

前に書いたように、ウェイトの基準はあくまでもデフォームボーンであるべきだ。なのでリグ用のウェイトが設定されていてはいけない。この画像はAuto Rig Proの例だが、リグ用のウェイトは設定されていない。

f:id:yamato-tsukasa:20210810212334j:plain

デフォームボーンにはしっかりウェイトが設定されている。

f:id:yamato-tsukasa:20210810210023j:plain

そしてポーズモードにしてデフォームボーンを動かそうとしても動かない。なぜならばトランスフォームがロックされているから。

f:id:yamato-tsukasa:20210810222523p:plain

そしてこのデフォームボーンを動かす仕組みとして、デフォームボーンの親にリグの実体であるボーンが設定されている

f:id:yamato-tsukasa:20210810212334j:plain

ん?リングなのにボーンなの?これはカスタムシェイプという機能によってボーンを別の見た目に変更しているから。

カスタムシェイプ

画像ではリグは8面体ではなくリングだったりキューブだったり。なぜ?これはBlenderのカスタムシェイプという機能で「見た目」を通常のボーンからユーザー指定の形に変えて表示させているだけだ(見た目上の形状の差し替え)。だがどう見えていても実体はボーンなのだ。そしてボーンをデフォームボーンとしてではなくてリグとして使うためにはボーンとは違う見た目の方が色々と都合がいいのだ。

f:id:yamato-tsukasa:20210810223123j:plain

リグのユーザーインターフェースには、

  1. デフォームボーンと区別しやすいこと
  2. マウスで操作しやすいこと

この2つが要求される。なので多くの場合にはカーブオブジェクトのカスタムシェイプが割り当てられている。(カーブオブジェクトは面のないオブジェクトなのでレンダリングされないことも好都合だったりする。)

またリグの仕込みが終わっていればウェイトの元になるデフォームボーンは表示されている必要がないので、非表示で運用されることが多いだろう。

こんな具合にリグはデフォームボーンの制御機能とユーザーインターフェースという2つを兼ねるので、優れたリグの仕込み(セットアップと言う)は大変な作業なのだ。なので優れたリグのセットアップは、リガーとも呼ばれる専門家による職人技らしい。優れたリグはモーションを付ける工程の作業効率に大きく関わるから、キャラクターアニメーションでは最重要なポイントらしい。

【まとめ】

  1. ボーンの真の姿は「ヘッドジョイント」と「テールジョイント」
  2. ボーンはヘッドジョイントを基準に動く
  3. ボーンは親子関係があって親のヘッドの変形に従う
  4. 親子関係のあるボーンの集団のことをアーマチュアという
  5. アーマチュアは3DCG業界では一般的にスケルトンという
  6. ウェイトの元になるボーンのことを特にデフォームボーンという
  7. デフォームボーンを制御するボーンのことをリグという
  8. リグは一般的に複数のデフォームボーンを同時に制御できる
  9. リグはカスタムシェイプで「別の見た目」にされている
  10. リグをウェイトの元に指定しない

まとめてみると結構重要な情報がたくさんあった(笑)こりゃ確かに初心者にとってはとっても分かりにくいわけだ。

静止画やフィギュア前提ならばリグは不要?

静止画用のポージングモデルや、フィギュア用途のポージングならば、リグで楽する意味がほとんどない。リグはデフォームボーンを便利に制御できる反面、そのリグの挙動を理解しないと使えないというデメリットもある。そしてポージングによっては使いにくい場合もある。

そしてもしFKのみならば、リグはなくても問題ないことになる?

私は問題ないと思っている。直接デフォームボーンをFKで変形させればいいわけだから。The シンプル。

デフォームボーンと、その影響を受けるメッシュオブジェクト。1対1。以上。面倒なことは何もない。デフォームボーンの表示と非表示を切替えるだけだ。シンプル。ウェイト塗りの調整も簡単だ。リグのように何かを隠したりカスタムしたりする必要もない。せいぜい8面体をスティックに替える程度でいい。

非アニメーション用途なら不要だと思う

これが今のところの私の結論だ。シンプル。もちろんAuto Rig Proなどで「便利に使えるリグ」が理解できて使いこなせるならば使ってもいいだろう。Auto Rig Proにはもちろんリグ機能をOFFにするスイッチがちゃんと用意されているので、それでリグ機能をOFFにしてFKでポージングさせることもできる。

今回はAuto Rig Proで説明したが、別にRigifyや手付けで自動ウェイトから調整してもいいと思う。要するに、やることは一緒だ。ボーン入れてウェイトを設定して調整するだけ。静止画やフィギュア用途ではリグはなくても構わない。リグが威力を発揮するのはゲームやムービーなどのアニメーションだ。静止画用途ではリグがなくても何とかなる。

ただしAuto Rig Proは名前の通りリグでポージングするように自動でセットアップされるわけだからそこからリグを外してFKでデフォームボーンだけの制御をしようとすると一手間かけないといけない。Rigifyなどのほうがシンプルで分かりやすいのか?

複雑なことを簡単にやろうと思うと、やはり色々と試行錯誤が必要だ。何にせよ、どんなツールでスキニングしていくかは要検討だ。(だがAuto Rig Proによる全自動リグ入れモデルの利便性も捨てがたい。だが使い方が難しい。よく分からん。)

色々試行錯誤しないと。



というわけで長文になったが、これを一通り読めば「アーマチュア、ボーン、リグ」の正しい知識が得られたはずだ。

あとはここからウェイト塗りの知識を補充すればメッシュのポージングは自由自在だろう。

くどいが静止画・フィギュア用途限定のポージングの話だが。





今回の創作活動は約3時間30分(累積 約2,521時間)
(746回目のブログ更新)

筆者はAmazonアソシエイト・プログラムに参加しています。(AmazonアソシエイトとはAmazon.co.jpの商品を宣伝し所定の条件を満たすことで紹介料をAmazon様から頂けるという大変ありがたい仕組みのこと。)
以下のリンクを経由してAmazonで何かを買うと購入額の1~3%ほどのお小遣いが私に寄付されます(笑)