Knowledge / Blender_リギング / Overview(全体像) • 9 min read
Overview(全体像)
目次
もし一度もリギング(スキニング)をしたことがない場合は、この記事を読む前に、一度youtubeなどにある適当なチュートリアル動画をなぞることをおすすめします。
リギングは、いくつか直感的でない概念があり、置かれている状況によって効率的な手段が異なるので、チュートリアル動画によって手順が異なることが多々あります。
次の段階に進む際に、全体像および各種用語を押さえておかないと応用が利かなくなるので、そこをカバーするための記事です。
リギングの目的
3Dアニメーションを作ろうと思った場合、動きの対象は、ざっくり以下の2つに分けられます。
- 人が位置や回転を任意に制御したいもの
- 重力や風力、他との衝突の影響を受けて、自然に動いてほしいもの
前者をキーフレーム制御、後者を物理演算などで動かします。
(キーフレーム制御は、「ある瞬間にある物体がいる座標」を指定するものです)
リギングは、主に前者の準備となる作業です。
ここでは、制御したいものが「人体の動き」だと仮定して話を進めます。
モデリングは、人体の表面を作りこむ作業であり、中身については何も作っていませんね?
(もし眼球などの内臓を作りこんだ場合であっても、それは内側のパーツの表面を作っただけに相当します)
今の状態でモデルを動かそうとすると、それはモデリングの時と同様、各頂点の座標を移動する作業になってしまいます。
これはあまりにも非効率ですし、実際の人体もそのようには動きません。
現実の人体は、筋肉の収縮が骨を動かします。
3DCGでは、一段階ステップを省略して、骨を直接制御する、という方法をとります。
そして、皮膚に相当するモデルの表面(メッシュ)は、骨についてくるように設定します。
これを人体以外でも応用が利くように言うと、
- 骨:独立して操作・制御できる部位を、伝えたい動きが伝わる範囲で、可能な限り簡略化する
- 皮膚:残りの部分は、操作したものに「つられて動く」ようにする
ということになります。
blenderの世界では、独立して操作・制御できるものを「ボーン」と呼び、モデリングしたメッシュはすべて「ボーンにつられて動く」ものです。
という訳で、リギングの目的は、ざっくり言うと以下を設定することになります。
- 動かせるものは何なのか?(ボーンの定義)
- つられて動くものは、何につられて動くのか?(ボーンウェイトの設定)
リギングの単語
アーマチュア
直訳すると骨格です。
独立して制御したい部位(ボーン)の集合体を指します。
ボーンウェイト
ボーンを動かした時、メッシュの頂点位置は、結び付いたボーンの位置から計算されます。
「ボーンが移動した分、頂点も移動する」は、ちょっと不正確で、「モデリングした時の距離を保つように、ボーンが内側からメッシュ頂点を引っ張る」イメージが正確だと思います。
メッシュの頂点AがボーンBだけに結び付いている場合、ボーンBの動きに100%影響されます。
複数のボーンB、Cに結び付いている場合は、設定した結び付きの割合によって頂点Aの位置が計算されます。
平たく言うと、「このメッシュ頂点は、どのボーンに、どのくらいつられて動くのか?」の設定がボーンウェイトです。
頂点グループ
メッシュの頂点をまとめたものです。
メッシュ頂点は、それぞれにボーンとの紐づき情報を持っていますが、似たような位置にある頂点たちは、ボーンとも似たような紐づきを持っているはずなので、まとめて扱えると何かと便利そうです。
ちょっとトートロジーぽいですが、「似たような位置とは近場のボーンだ」ということで、頂点グループは、基本的に同じ名前のボーンと1対1の関係で対応します。
具体的には、以下のような手順の中で、頂点グループが生まれ、そして集団でボーンと結びつきます。
- ボーンを作ってから「空のグループを作成」するとボーンと同名の頂点グループが作成される
- 先に頂点グループを作成して後からアーマチュアと連携させると、同じ名前の頂点グループとボーンが自動的にマッピングされる
頂点グループ自体は、リギング以外にも用途がありますが、発生の仕方を考えると、リギングとの関連性が最も高いです。
なお、ウェイトペイントする際、ボーンを選ぶとサーモグラフィのようなものが表示されますが、あれは「どの頂点を(=色がある範囲)、どのくらいの割合で(=色)、そのボーンに紐づく頂点グループに組み込むか」を操作しています。
ルートボーン、tipsボーン、ペアレント
例えば、腕の骨(ボーン)を動かすと腕の皮膚(メッシュ)もつられて動くというのがボーンウェイトですが、そのキャラが歩いて移動したら腕も一緒に動いてくれないと困ります。
ボーン同士の関係をコントロールするのが、ボーン同士の親子構造(ペアレント)です。
親子構造の一番上(親を持たないボーン)をルートボーン、それ以外のボーンをtipsボーンと呼びます。
リギング工程の全体像
モデリングが終わった所から、とりあえず動くようになる所までを目指した工程です。
各工程の具体的な操作方法は、次の記事で整理します。
アーマチュアの作成
モデルの中にボーンを作り、ボーンを組み合わせてアーマチュアを作ります。
頂点グループの作成
すべての頂点グループを手動で作成することも可能ですが、blenderの自動アーマチュア機能を使うことで工程が短縮できます。
アーマチュア変形の「空のグループで」を使うと、すべての変形ボーンに対応する空の頂点グループが作られます。これが基本の方法です。
アーマチュア変形の「自動のウェイトで」を使うと、すべての変形ボーンに対応する頂点グループを作った上で、変形ボーンまでの距離に基づいてウェイトが設定されます。
例えば「3つのボーンでできた1本のしっぽ」みたいなオブジェクトであれば、これでスムーズに設定可能です。
ボーンが込み入ったアーマチュアで使うと、思わぬ所にウェイトが入って調整が大変になる可能性が高いです。
ボーンとメッシュの紐づけ
頂点グループとアーマチュアを「アーマチュアモディファイア」を使って連動させることで結び付きます。
頂点グループ作成の際に、アーマチュア変形を利用した場合は、既にアーマチュアモディファイアが適用された状態になっているので、この作業は必要ありません。
ボーンウェイトの設定
「各頂点が、どのボーンからどれだけ影響を受けるのか」を0から1で設定します。
編集方法として、直接数値を編集するか、ウェイトペイントなどがあります。
1つの頂点に影響を与えるボーンが増えるほど、頂点の位置の計算量が増えてパフォーマンスが下がるので、シンプルな方がいいです。
動作確認
ウェイトをつけたら、ポーズモードで動かしてみて確認し、おかしな部分を一つずつ調整します。
ワークフローに影響を与える小ネタ
小ネタというか、仕組みを正しく理解した後で考えると当然なのですが、自分は当初困惑したので残しておきます。
ボーンウェイトの情報はメッシュに保存される
繰り返しですが、メッシュ頂点が情報を持っています。アーマチュアでは無い点に注意です。
これに加えて以下の仕様があります。
メッシュに変更を加えても、頂点グループをそのまま保持できる
メッシュ頂点の「座標情報」と「ボーンウェイト情報」は、独立して存在できるのでこうなります。
メッシュをコピーすると、ボーンウェイトの情報もコピーされる
これによって、「素体の肌メッシュをコピーして作った衣装用のメッシュが最初からボーンウェイト情報を持っている」みたいなことが起こります。
複数のパーツからなるセット衣装を作っていて、アーマチュアと紐づけた途端に動くようになる部分と動かない部分があるのは、これが原因です。
また、「ウェイト転送」機能を使った場合に起こっていることもコレです。
そもそも論
アーマチュアは、基本的に自作するものではないです(少なくとも人型は)。
VRChatなどであれば決まった規格があるので、配布されているものを使います。
衣装などでも、スカートなど、よくある形は、アーマチュアが出回っています。
また、mixamoで自動でリギングさせることも可能です。
もしも、人体についてもっと凝った制御がしたい場合は、補助ボーンが大量に必要になり、それを一から自作するのはナンセンスなので、auto rig proなどアドオンを購入しましょう。