Blenderにおけるスキニングに関して、具体的な方法の説明は見つかるものの、概念的な説明がなかなか見つからないのでここにまとめる。メッシュ、ボーン、Armatureといった概念はなんとなく知っているものとする。
スキニングとは
スキニングとは、メッシュがボーンに連動して動くようにすることである。そのためには、メッシュの頂点の一つ一つに対して、その頂点がどのボーンにどれだけ追従するかを指定する必要がある。この情報をウェイトという。ウェイトは各ボーンに対して合計が1になるように割り振られた数値で表現される。割り振られた数値が大きいほどボーンに強く追従するようになる。
例えば、ある頂点のウェイトがUpperArmに対して0.8、LowerArmに対して0.2割り振られていたとすると、その頂点は
- UpperArmとLowerArmに対して8:2程度の割合で追従する。
- それ以外のボーンには一切追従しない。
Blenderにおけるスキニング
Blenderにおけるスキニングは大まかに次の3つのステップを踏む。
- Armature Modifierの追加
- ウェイトの設定
- 結果の確認
1. Armature Modifierの追加
まずメッシュにArmature Modifierを付ける必要がある。一般にModifierは何らかのルールでメッシュに処理を施す機能であり、Armature Modifierは指定されたArmatureの変形に基づいてメッシュを変形する。ただしArmature Modifierを付けただけではまだウェイトが設定されていないので動かない。
2. ウェイトの設定
Blenderではボーンと同名の頂点グループによってウェイトを管理する。各頂点グループには、そのボーンの影響を受けるべき頂点を追加する。
頂点グループを定義すると、各頂点に対して、その頂点が属する頂点グループごとにウェイトを割り振れるようになる。ボーンと同名の頂点グループにウェイトを割り振ることが、ボーンにウェイトを割り振ることにそのまま対応する。Armature Modifierはボーンと同名の頂点グループに割り当てられたウェイトをボーンに対するウェイトと解釈して変形を施す。
3. 結果の確認
ウェイトの設定ができたらArmatureを選択してポーズモードに入りボーンを動かしてメッシュが追従するか確認する。FBXにエクスポートしてUnityに持っていったらUnity側でボーンを動かしてもメッシュが追従するはず。多分。
実際の作業についての補足
- 実際の作業では単にArmature Modifierを追加するのではなく、まずArmatureをメッシュの親に設定し、その副作用を利用してArmature Modifierを追加すべき。具体的な操作としてはオブジェクトモードでメッシュ→Armatureの順に選択し、Ctrl+P→Armature Deform With Empty Group等を選択する。With Empty Groupならボーンと同名の空の頂点グループを自動で作ってくれる。With Automatic Weightsならボーンと同名の頂点グループを作った上で自動でウェイトを設定してくれる(ただし結果がいまいちな場合もある)。
- 実際の作業では頂点一つ一つに対して手作業でウェイトを設定することは現実的ではないので、ウェイトペイントモードで色塗りをするようにウェイトを塗ったり、自動的に生成されたウェイトをベースに手作業/半自動で調整したりする。