ボーン入れはblenderでやってみることに

メタセコでのモデリングでとりあえず手足が揃ったのでメタセコ上でmikoto方式のボーンを組んでみることにした。いろいろ手順とかを参考にしながらやってみたのだが、左右対称とか気にするとかなり厄介だ。対称モードにするのを忘れたり、対称モードを解除するのを忘れたりして細かくやり直しが発生する。これは負担が重いな。ユーザーの自分に対してw
そこで、blenderでボーン入れすることにした。mqoインポータは探せばあるし自作のもあるのでmqoのインポートは問題ない。で、ボーンを入れるに当たってまずは操作方法を調べた。
で、Armatureの動作がやはりややこしいのでメモっておく。

骨入れの手順

Armatureを作る

object modeにする
[shift-c]カーソルを原点に移動する
[space] - Add - Armature

Armatureの設定
エディットパネル(F9)で
Armature - Editing options
X-Axis Mirror(左右対称モード。ボーン名が_L, _Rで終わっていたら対象ボーンとして扱う)
X-Ray(メッシュの中のボーンが見えるように)
をオンする。
Names(ボーン名表示。ちゃんと名付けるように)

Display Options
Stick (これは好みでなんでもいい)
を選択。

ArmatureとMeshオブジェクトを関連付ける

2通りのやり方がある。
ひとつは、オブジェクトをArmatureの子にするように親子関係をつけてやる方法。
こちらの方が簡単(裏で自動的に動く処理があり一見、簡単)だが、機能が制限される。
モディファイアと組み合わせることができないと思う。
例えば、ミラーリングモディファイヤの上からボーンで変形することができない(横に回転すると頭蓋が開いたw)

もうひとつは、オブジェクトにArmatureモディファイアを追加する方法。
これは親子関係を設定した時に自動的に実行される処理などをいくつか手動でやる必要がある。あるが、どうせウェイトペイントするならそんなに手間は変わらないのでこっちの方がよかろう。なので、こっちの手順だけ書いておく。

オブジェクトの、エディットパネル(F9)のModifiersからadd modifier - Armatureと選択する。
Ob:に対象のArmature名(デフォルトはArmature)を指定する。
envelopeをクリックして解除する。

骨を生やす

Object mode でArmatureを選択
[tab]edit mode
骨を生やしたいボーンの先端を選択
[e]延び先に移動して左クリックで決定。
(左右対称に枝分かれするときは[shift-e])
先端を選択して[g]で移動して位置を調整していく。
棒部分を選択して[g]で移動することもできる。


ボーンには忘れないうちに名前をつける。
左右対称部分には、bonename_L, bonenme_Rと名づける(+xが左)。

WeightPaint

念のため
Object modeでArmatureを選択
[ctrl-tab]poseモード
適当なボーンを選択(水色になる)
[ctrl-tab]object modeに戻る。
(一度poseモードでボーンを選択しておかないとWeightPaintモードでボーンが選択できない?)

Object modeでMeshを選択
[ctrl-tab]WeightPaint

適当に骨を選択して塗る(青が0で赤が1の影響度)。

WeightPaintするとMeshオブジェクトのVertex Groupに点が追加されたり削除されたりする。(赤い点が1で含められる。黄色だと0.5とか?)
左右対称モードでのWeightPaintがうまくいくには、塗り対象を選択したときに左右両方のvertex groupが存在する必要があるようだ。つまり、bone_Lを塗り対象として選択した時点で、VertexGroup bone_Lとbone_Rが既に存在している必要がある。さもないとbone_Lに両方のウェイトが登録されてうまくいかない。
で、Armatureとメッシュの関連付けに親子関係を使った場合は、親子付けした瞬間に各頂点を近いボーンのVertexGroupに自動的に登録することができるためこの問題は発生しないのだが、modifierでArmatureを使っていると手動でVertexGroupを作る必要があるためはまる。


なので、新しいボーンを塗る場合は以下の手順で。

対象ボーンの名前を確認。
対象ボーン名のVertexGroupがあるか確認。EditPanel(F9) - Link and Materials - Vertex Groups
VertexGroupがなかったらNewで作ってbonename_Lとbonename_Rにリネームする。
改めて対象ボーンを選択する(他のボーンを選択してから選択しなおすと確実)。
塗る。
これで左右対称機能が正しく動作する。


塗るのに失敗したらVertexGroupを削除すれば全消しになる。
その場合は空のVertexGroupを作り直してから、ボーンを選択しなおすこと。


塗る色を変更する。
青で塗る(消す)には、EditPanel(F9)のPaintのWeightを0に。
赤で塗るには、EditPanel(F9)PaintのWeightを1にする(Mixモードの場合)。

sizeは小さ目のほうが頂点ひとつひとつを直接塗る感じになっていいかもしれない。



以上でArmatureメモ終わり。

モード間の移行に関して

コンテキストでショートカットが変わるのはついていけないw

Object mode<-(tab)->Edit mode
  ↓
Meshを選択してctrl-tab
  ↓
WeightPaint<-(tab)->Edit mode
Object mode<-(tab)->Edit mode
  ↓
Armatureを選択してctrl-tab
  ↓
Pose<-(tab)->Edit mode

要するにEdit modeでtabを押すと次のモードは分からないw