対象バージョン:Blender v2.82a
事前準備
Armature(骨格モデル)を利用する上で、事前準備をしておきます。
インストール直後の状態では、Object Modeで[Add]メニューからArmatureを選択すると、下記の様に「Single Bone」しか表示されません。
下記手順で「Rigging Rigify」アドオンを追加します。
①メインメニューの[Edit]からPreferencesを選択し、Blender Preferencesダイアログを表示する。
②左側の[Addons]を選択し、検索ウィンドウに「Rigi」と入力する。
([Rigging Rigify]だけが表示される状態になると思います。)
③ [Rigging Rigify]にチェックを入れて、Preferenceダイアログを閉じる。
さて、この状態でObject Modeで[Add]メニューからArmatureを選択すると、[Single Bone]以外の項目が追加されていると思います。
これで、事前準備は修了です。
Armatureの基礎
さっそく、「Qちゃん」を動かしたい所ですが、その前にArmature(骨格モデル)について少し見ていきます。
(ある程度基本を押さえておくと、わかりやすいと思います。自分もたまに頭の中に「?」が出る事があるので、まとめておきます)
Bone(ボーン)
Bone(ボーン)はArmatureを構成する基本要素です。
Boneの構造
通常は、下記の様に八面体(Octahedral)の根本側にHead、先端側にTailの球がそれぞれくっついている構造になっています。
Boneの情報
Edit Modeでサイドバーを表示し、Boneの情報を見てみると、下記の様に様々な情報が表示されます。
HeadやTailには位置情報他に、Radius(半径)情報がありますが、これを変更してもViewport上の八面体の形状は変わりません。(次の項目で説明します)
Roll(回転)はBone自身の回転角度で、ローカル座標の向きを決定します。
Length(長さ)はHeadとTail間の距離です。
Envelope(エンベロープ)も変更してもViewport上の八面体の形状は変わりません。(次の項目で説明します)
Boneの色々な表示方法
Boneは基本8面体で表示されますが、他の表示方法もあります。
表示の切替は、Propertiesパネルの[Object Data Properties]タブのViewport Displayの項目の[Display as]で変更できます。
この中のEnvelope(エンベロープ)に注目すると、HeadとTailの球の大きさが異なり、また、Boneの周りに膜がはったように描画されます。
前項の「Boneの情報」にあったHeadやTailのRadius(半径)や、Envelope(エンベロープ)は[Envelope]で描画した時に表示に反映されます。そして、この膜の様なものは、特定の方法でメッシュデータと関連付けた時に、Vertexが影響を受ける範囲を表しています。(後述)
Armature(アーマチュア)
Armatureの構造
Armature(アーマチュア)は一つ以上のBoneから構成される骨格モデルです。
Object Modeで[Single Bone]を追加する場合、一つのBoneからなるArmatureを追加する事になります。(Object ModeでのBoneの追加は、既存のArmatureにBoneを追加するのとは異なります)
Boneの親子関係
またArmatureに含まれるBoneは上の図の様にだいたい親子関係があります。
親子関係の中にも親のTailと子のHeadが接続されているものと、切断されている物があります。
Bone同士の親子関係の作成・解除はEdit Modeで行われます。
(Object Modeでの親子関係の作成・解除はArmature間のものとなります)
自分も良く勘違いしますが、この親子関係はPose Modeの動作で子が親の動きに追従するもので、Edit Modeでは親の移動・回転に子が追従する事はありません。(ただし、接続関係は維持されるので、接続されているBoneはそれに応じて変形します)
Armatureは描画されない
Armature(骨格)モデルはそれ自体は描画されません。
Armatureはメッシュデータに関連付けて初めて意味を持ちます。
Armatureとメッシュデータの関連付け
説明用データ
ここでの説明は下記の様なU字型のメッシュデータを使います。
Boneの前面表示
メッシュデータにArmature(複数のBone)を配置していきたいのですが、通常メッシュデータの内部では、Boneが良く見えません。
Wireframe表示やX-Ray設定でもいいのですが、Solid表示、Material表示、Rendered表示でも見やすくするために前面表示設定を行います。
Armature(Bone)を選択した後、Propertiesパネルの下記のいずれかにチェックします。
- [Object Properties]タブ()のViewport Displayの項目の[In front]
- [Object Data Properties]タブ()のViewport Displayの項目の[In front]
Armatureの追加
メッシュデータに対して、下記の様にArmatureを配置します。(作成方法は省略します)
前から 横から
※前面設定をしているため、Boneがメッシュの手前にあるようにみえるかも知れませんが、実際にはメッシュの内部に入っています。
この時点では、メッシュデータとArmatureは関連のない独立したデータです。
Outlinerの表示でも別々のデータである事が確認できます。
Armatureとメッシュデータの関連付け
Armatureとメッシュデータの関連付けはObject Modeで行います。
Armatureは親、メッシュデータは子
Armatureを対象のメッシュデータの親(Parent)になるように、それぞれのデータを選択します。
- メッシュデータ…濃いオレンジ
- Armature…明るいオレンジ
Armature Deform With Automatic Weight
上記の状態で親子関係を設定します。右クリックで表示される[Object Context Menu]のParent項目、もしくは、[CTRL] + 「P」キーで表示される[Set Parent To]メニューから、[Armature Deform With Automatic Weight]を選択します。
気を付けないといけないのは、それぞれのメニューで、[Armature Deform With Automatic Weight]の位置が違う点です。紛らわしいので注意が必要です
これで、Armatureとメッシュデータの関連付けが完了しました。
OutlinerでArmatureの中にメッシュデータ(Cube)が入った事が確認できます。
Pose Mode(ポーズモード)
Armatureによるメッシュデータの変形
Armatureとメッシュデータを関連付けが完了したら、ArmatureをPose Modeで動作させてみます。
Pose ModeでArmatureの各Boneを操作すると、メッシュデータがBoneの動きに応じて変形します。
これを、Armatureの機能を使わず、Edit ModeでVertexを移動させて実現しようと思ったら…、ちょっとクラクラしますね…。
上記の例では、全てのBoneが接続されているので、移動(「G」キー)、回転(「R」キー)でもHeadを中心に曲がる動作になりますが、接続されていないBoneであれば、位置の変更も可能です。
Armatureの初期化
色々変形した後、Armatureの各Boneの位置を元に戻したいという場合は下記の手順で戻します。
- Pose Modeで「A」キーを押して全選択
- [Pose]メニューの[Clear Transform]の[All]を選択
Weight Paint
Weight(重み)
今回の例([Armature Deform With Automatic Weight]での関連付け)では、それほどおかしな部分はなく、メッシュデータがArmatureに追従してくれました。
これは、各Boneが動いた時にメッシュデータのどのVertexをどの程度追従させるかが、正しくセットされている事を示しています。
この「どの程度追従させるか」をBlenderでは、「Weight(重み)」と呼んでいます。
Weightが1.0なら完全に追従、0.0なら追従しない、その間は値に応じた追従を行います。
Weight Paintモード
Weight Paintモードへの切替
Weightを確認するには、Weight Paintモードを使います。
Weight Paintモードにすると、メッシュデータが赤・黄・緑・青の様な色が付いた状態になります。
※自分は最初「曲がりが強い所が赤でないの?何で全く関係のない部分が赤なの?」と勘違いしていました。
Propertiesパネルの[Object Data Properties]タブを開いて、[Vertex Groups]を確認すると、[Bone_R_002]が選択された状態になっています。
そうです。メッシュデータで、赤から緑(青以外)の色がついている部分は、ArmatureのBone_R_002が動いた時に追従するVertexの重みを表しています。
赤(Weight = 1.0)~ 青(Weight = 0.0)
各Vertexの具体的な数字は、Edit Modeにして、情報を見たいVertexを選択して、サイドバーで確認する事が出来ます。
Weightの変更
Pose ModeでBoneを操作した時に、追従して欲しいVertexが追従してくれなかったり、追従して欲しくないVertexが追従してしまったりした場合に、Weightを変更します。
① Weightを変更したいBoneを[Vertex Groups]から選択する
② サイドバーを表示し、[Tool]タブを選択する
Toolbarのブラシ種別が[Draw]の場合、サイドバーにブラシ設定が表示されます。
項目 | 説明 |
---|---|
Blend | 現在のVertexの重みと[Weight]で設定された値とのブレンド(合成)方法を指定します。 初期値は[Add](加算)になっていますが、もともと最大値の1.0になっているVertexにいくら、加算しても1.0から変わりません。 おすすめは[Mix](ミックス)で、現在の値とWeightをミックスします。 |
Weight | [Blend]で指定された方法でブレンドする重みの値です。 [Blend]に応じた値を指定します。 |
Radius | ブラシの半径です。Viewportのカーソル周りの円の半径になります。 広い範囲を変更したい場合は大きく、細かい部分を変更したい場合は、小さくします。 |
Strength | ブラシで左クリック(もしくはドラッグ)で値を変更する強さを指定します。 |
③ Blendに[MIX]、Weightに変更したい重みを指定し、変更したい頂点の重みを変更していく。
上記はカーソル部分のVertexのWeightを0.0にしたため、Boneに追従しなくなった状態です。
Weightを変更する場合は、視点を色々変更して、Bone周りの各Vertexのバランスを考えながら変更します。
視点によっては、まったく関係のない部分のVertexのWeightを変更してしまう場合があるので、ブラシサイズを適宜変更しながら編集します。
特定のVertexのWeightだけ指定の値にしたい場合は、Edit Modeのサイドバーで変更してもよいかも知れません。
補足
Armatureとメッシュデータの関連付け方法
上記の例では、[Armature Deform With Automatic Weight]を選択して、関連付けしました。これは、各Boneに関係しそうなVertexの重み付けを自動で計算してくれるものでした。
他の2つはどういった関連付けかを見ていきます。
Armature Deform With Empty Groups
ここでいう[Groups]はBoneについてのVertex Groupsで、それがEmpty(空、未設定)になるという事です。
なので、Pose Modeでポーズを変更しても、どのVertexも追従せず、Weight Paintモードでは、すべて真っ青で表示されます。
この関連付けは、Vertexの重みは自分で全て手動で設定するような場合に使うものだと思います(あまり、そういった事は無いような気がしますが…)
Armature Deform With Envelope Weights
ここで、Envelope(エンベロープ)というのは、上述のBoneのEnvelopeを指示しています。
BoneをEnvelope形状で表示すると分かりやすいかと思います。
各BoneのEnvelope(膜)がWeightの影響範囲です。余分なVertexを含んだり、どのBoneにも属さないVertexが存在しています。
そのため、Pose ModeでArmatureのポーズを変更すると、かなり不自然に変形する場合が見られます。
間違えて関連付けてしまった場合
間違えて関連付けをしてしまって、関連付けの状態まで、UNDOが出来ない場合は、以下の手順で関連付けを解除します。
① Object Modeでメッシュデータを選択し、[Clear Parent]を実行して、親子関係を解除
この状態でArmatureとメッシュデータの親子関係はなくなりますが、メッシュデータのVertexに関して、Vertex Group情報が残ってしまっています。
② Object Modeでメッシュデータを選択し、Edit Modeへ変更
③ 「A」キーでVertexを全選択
④ [Vertex]メニューの[Vertex Groups]の[Remove All Groups]を選択し、Vertex Group情報を削除する。
今回は、Armatureの基本部分について見てきました。
個人的には、Armature Deform With XXXXのメニューの順番が違う点が、Blenderの罠だと思います…。(Automaticを指定したつもりがEnvelopeになっていたとか、初心者にはなかなか気づかないです)
前の記事 | 次の記事 |
---|---|
No.14(Armature①) | No.16(Armature③) |