チュートリアル / Mayaの標準機能だけでリグを作るテクニック
第2回:手のセットアップ(リギング)
- ABCアニメーション
- Maya
- アニメ
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 学生・初心者
- 映画・TV
はじめに
第1回から少し時間が空いてしまいました。おかげさまで前回のコラムはかなりの反響があり、感想や質問をたくさん頂くことができました。
特に質問の多かったのが「手」と「顔」についてです。そこで、今回は「手のセットアップ(リギング)」について掘り下げていきたいと思います。
前回の内容はややコア過ぎたため、今回は学生さんや初心者の方でも生かせる実用的な内容にしていきたいと思います。
ちなみに、現在ABCアニメーションで制作している手の進捗はこのような感じになっています。
今まで色々なキャラクタアニメーションに関わってきましたが、速い動きでごまかせないタイプの案件では手のクオリティが想像以上に重要になってきます。
私自身「アベンジャーズ・インフィニティウォー」でサノスの手のアップを見た時、あまりのクオリティに鳥肌が立った経験があります。
手のセットアップは一度頑張って作れば2体目以降に移植しやすい部位でもあります。機会があれば、是非「手としっかり向き合う」時間を作ってみてはいかがでしょうか。
モデリングについて
テーマであるリグの話に入る前に、少しだけモデリングの話をしたいと思います。手のモデリングをする際、最初に迷うのが「ポーズ」です。私自身、試行回数を増やす意味で今まで色々な手のポーズを試してきました。その上で、それぞれのメリット・気を付けておいた方がいいポイント等をお話しようと思います。
まっすぐポーズ
指をまっすぐに伸ばしたベーシックなタイプのモデリングです。親指の根本の角度は開いたタイプや閉じたタイプなど色々と存在しますが、指は基本的にまっすぐにモデリングします。
まっすぐポーズのメリット
・ポーズ共有がしやすい
手のポーズは、握り、リラックス、反りなど汎用的なポーズをあらかじめリードアニメータが作っておき、StudioToolなどで保存して各アニメータに配布することがよくあります。その際、初期で姿勢が入っていると、それがキャラクタ毎、案件毎に誤差が出てきた場合、だんだん再現率が低くなってしまいます。まっすぐ伸ばしたポーズだと、そういった問題が起こりにくい傾向にあります。
(※親指の根本は「何をもってまっすぐか」が定義し辛いため、最初に決めた角度をしっかり守ってモデリングする必要があります。)
・逆反りに強い
指は思った以上に逆に反ります。最初から曲げていると逆反りした時の形状が汚くならないようかなり気を使ってリギングする必要が出てきます。
・開いた手の大きさがわかりやすい
ディレクターとしてモデリングのチェックをしていると、顔と手の大きさの比率を比較したりすることがよくあります。その際、指が伸び切っていると比率が分かりやすくありがたい事が多いです。
リラックスポーズ
指を最初から少し曲げて作るタイプのモデリングです。少し曲げるか45度くらい曲げるか。第一関節はまっすぐで第二関節以降をリラックスさせるかなど色々とタイプはありますが、私はまとめて「リラックスポーズ」と呼んでいます。
リラックスポーズのメリット
・自然なポーズを表現しやすい
手は指を伸ばすことよりも曲げることの方が圧倒的に多いため、より使用頻度の高い形に近づけてモデリングすることで、リギング後の差異を減らそうという考え方です。
・テクスチャが伸びにくい
手のUVを展開する際、基本的にはモデリングされた形状に対してチェッカーが一番伸びない形でUVを開くと思います。しかし、伸び切った姿勢だと曲げ切った姿勢から一番遠い状態になりますので、必然的にテクスチャが伸びてしまう傾向にあります。
・プロップの大きさを比較しやすい
キャラクタが持つプロップを作る際、握りに近いリラックスポーズは比率をイメージしやすくなります。
本当はモデリングの段階で仮でも骨が入っていて、握りながらチェックするのが理想です。
しかし、平行作業が多い大規模プロダクションではそうならない事も多く、素のモデリングと比較しなければならない事が多くあります。
ちなみにABCアニメーションでは...
大きく分けて2つのポーズのメリット、デメリットを紹介してきましたが、ちなみにABCアニメーションではどうしてるの?というお話をしようかと思います。
結論から言うと「モデリングはリラックスポーズ」で「出荷時はまっすぐポーズ」です。前述のとおり、モデリングする段階ではUVの件や造形の面などを含めリラックスポーズに軍配が上がります。しかし、その後の運用を見越した時にはまっすぐになっていた方がいいこともあり、いいところ取りをした手法を模索していると結果この答えになりました。
具体的なワークフローとしては
①リラックスポーズでモデリング (造形をしっかり詰める)
②その状態でUVを展開 (曲げた状態で伸びないUVを整える)
③手に仮骨をいれる (ウエイトは若干甘めでも大丈夫)
④仮骨でまっすぐポーズに戻す
⑤バインドした手のジオメトリのヒストリーを切る
⑥汚い頂点を微調整
このやり方を使えば、モデラーがモデリングデータをパブリッシュする際に指のジョイントの参考位置もリガーに渡すことができます。
仮骨入れは少し面倒くさいですが、私の経験だとその後リガーやアニメータにお小言を言われ続けるよりは何倍も楽だと思っています。「プロジェクトで最初の1体」だけでもこのフローで作っておくとみんなハッピーになれますので、お勧めです。
骨打ち
ここからは本題であるリグの話に移ります。手のセットアップをする際、最初に失敗しがちなのは骨打ちです。骨格のイラストや写真を参考にするのが有効ですが、その際に間違った認識で骨打ちをすると、とたんに汚い曲がり方になってしまいます。
指の骨を模した簡単なプリミティブを作ってみました。
皆さんはこの骨に対し、どこに関節を置くでしょうか?
Aは骨の根本である接合面。
Bは親の骨に少し入り込んだ部位。
曲げてみるとこのような結果になります。人間の関節はボールジョイントのように親の骨の表面を滑って稼働しますから、答えはBとなります。
実際に骨がモデリングデータとして存在すれば、このように「見れば分かる」簡単な問題です。皮膚のみのモデリングデータに対して「骨を想像して打っていく」のがリガーの特殊技能ですが、たまにこの認識違いでハマることがあります。
他に指の第一関節もハマりやすいポイントです。指そのものは「見た目通り」の部位で曲がりますが、根本だけは手のひら側のシワの所で曲がります。
なお、冒頭の動画で出てきた手の関節位置は以下のようなイメージで配置してあります。
スキニング
骨打ちが終わったら、スキニングに入ります。
使用するデフォーマの種類を絞る
手のセットアップをする際は色々な手法があるかと思いますが、ABCアニメーションは基本的にブレンドシェイプを使ったPSD(ポーズ・スペース・でフォーメーション)は使用せず、スケルトンとそれに付随する補助骨を使ったスキンクラスターのみで表現するようにしてあります。デフォーマを絞ってある理由は「移植のしやすさ」が最大の理由です。
このコラム冒頭で「手はセットアップを移植しやすい」とお話しましたが、スキンクラスターオンリーでセットアップを行う場合、以下の手順で簡単に他キャラクタにセットアップを移植できます。
①1体目でバインドされたキャラクタのスキンウエイトデータのみ書き出し
②2体目にあわせて骨の関節位置を修正
③2体目に、1で書き出したスキンウエイトを読み込み
大きく体形が変化する場合に多少の調整作業は必要ですが、スキンクラスターオンリーでセットアップしておけば基本的には上記3手順で移植が実現してしまいます。
ブレンドシェイプは移植できなくはないですが、スキンクラスターと比較すると移植コストは多くかかります。本当に凝りたい場合にブレンドシェイプを補助的に使うこともあると想定していますが、これまでの経験で手にブレンドシェイプを使った事は殆どありません。
補助骨について
上記のようにスキンクラスターに絞ったセットアップをする場合、重要になってくるのは「補助骨」の存在です。最近はブレンドシェイプの結果を学習し、補助骨を自動生成する技術等が盛んに研究されていますが、まずは「基礎ありき」。そういった「自動生成」を使う場合、手作業で仕込む流れをきちんと経験した上で導入する事をお勧めします。
補助骨に関して説明し始めると膨大な時間がかかってしまいます。しかし、これを見ておけばOKという決定版のような動画がありますのでこちらを見ていただければと思います。
Mayaパーフェクトスキニングウェビナー ~美術解剖学に基づくロジカルスキニング講座~
https://area.autodesk.jp/event/webinar/maya-skinning/
・・・ただ、いきなり外のページに放り投げるのもどうかと思いますので、ここでは1つ汎用的なテクニックをご紹介します。
指の各関節や肘、肩など、大きく曲がる関節の場合、そのまま2本の骨でスキニングをしてしまうと間が痩せてしまう事があります。それを防ぐため、中間の角度を取った「中間関節」を配置し、そこにウエイトを割り振ることで痩せにくくするテクニックがあります。
Maya 2019までにプラグインレスでこれを実現する場合は、「pairBlend」というノードを使うと手っ取り早かったかと思います。ここではせっかくなのでMaya 2020で搭載された新ノードを使ってセットアップしてみたいと思います。
(サンプルファイル「middleJoint.ma」のダウンロードはこちら)
今回、中間関節で実現したい挙動は以下の2点です。
①回転はちょうど半分の値でついてくる
②移動は0.95くらい、少しだけずれてついてくる
(※運用の都合上、少しだけずらしておいたほうが都合がいいため)
というイメージで設計しています。
ノード構成としては以下のイメージです。
(Maya 2020から新搭載された「blendMatrix」というノードと、「offsetParentMatrix」というアトリビュートを使用しています。Maya 2019以前でこのテクニックは使えませんのでご容赦下さい)
リギングの説明で「マトリックス」という単語が出てくると急に嫌な顔をされる事が多いですが、今回はシンプルな使い方ですのであまり恐れず見てみてもらえればと思います。
まず、移動用・回転用に2つblendMatrixを作ります。その後、動く骨「indexFinger2_L_jnt」のmatrixをそれぞれのblendMatrix「(ノード名).target[0].targetMatrix」に接続します。
それぞれのアトリビュートは以下のように設定します。
移動用のblendMatrix
blendMatrixには「pickMatrix」の機能もオマケでついてきますので、移動以外の影響を受けないよう「useTranslate」以外のチェックを外します。(composeMatrixを省略できるのでとても便利です!)
そのうえで、weightに0.95と入力します。ここに入力した値は、0で完全についてきません。1で完全に同じ動きにシンクロするものです。今回は少しだけずらしながら追随したいので、0.95と入力しました。
回転用のblendMatrix
回転用のblendMatrixは、移動と同じように他の影響を切りたいため「useRotate」以外のチェックを外します。そして、回転はちょうど中間の角度でついてきてほしいので「0.5」と入力します。
その後、multMatrixを作成します。(※multMatrixは複数のマトリックスを統合できるノードで、マトリックスを使う上で無くてはならないノードです。
これも説明し始めると長くなりますが、とりあえず「子供にいくほど小さいインデックス(末尾につく~[0]というやつです)につなぐ」とだけ覚えてもらえればと思います。)
それぞれのblendMatrixの「outputMatrix」を、multMatrixの「matrixIn」に接続します。今回は、まず移動で位置を決めて、その後回転を決めたいので移動が親になるよう接続します。
子ほど小さいインデックスですので、回転のblendMatrixは「multMatrix.matrixIn[2]」に、移動のblendMatrixを「multMatrix.matrixIn[1]」に接続します。
(あれ、[0]は使わないの?と思われるかもしれませんが、この後「回転した後さらにその軸で移動させたい」というケースで使いたい事があるので念のため空けておきます。)
最後に、multMatrixの「matrixSum」を、中間関節の「offsetParentMatrix」に接続したら完成です。なんだか無理やりマトリックスを使った感じがするかもしれません。しかし、前述の「回転した後さらにその軸で移動させたい」といった要望など、ピポット・軸を自由自在に操って複雑な稼働を作ることができるためコネクションをマトリックスベースで設計しておけば、後から機能を追加するのが簡単になります。
最終接続もoffsetParentMatrixにしておけば、中間関節自体のtranslateやrotateはドリブンキーを作ったりコントローラからの値を刺したりと何かと使い道ができてきます。シアー問題等が気にならない部位については、offsetParentMatrixを使ってみるのがお勧めです。
ここまで、モデリング、スケルトン、スキニングまでをざっと説明してきました。
・まっすぐポーズでモデリング
・ブレンドシェイプを使わない
という縛りを設けても、ざっくりこのくらいのクオリティで変形ができています。
コントローラ
スキニングが終わったら、最後はアニメータが動かしやすいようにコントローラを作成していきます。
手のコントローラは、指にIKを入れるかどうか等アニメータの好みでカスタイマイズは必要です。しかし、それほど複雑なギミックが必要となる事はありません。
あえて言うなら・・・というオマケレベルですが、ARSの手の標準には以下の2つが入っています。
手の甲を一括で動かすリグ
手の甲は丸めたり広げたりと、何かと動かすことの多い部位です。しかし、4つのジョイントを動かすのが面倒くさい・・・という理由でおざなりになりがちなパーツです。一括で動かすことができるリグが1つ入っているとアニメータも動かしてくれる事が多くなります。これは、前述した「blendMatrix」を使えば実現できます。
軸を好きに変えられるリグ
親指の根本はアニメータによって軸を変えたいという要望がよく出ます。動画では、十字のコントローラで設定した軸で親指のローカル軸が変更されているのが分かるかと思います。
特にキーを綺麗に整理したいタイプのアニメータには重宝されますので、ARSでは標準として実装しています。これは、前述した「multMatrix」を使えば実現できます。
まとめ
今回は、手を作るにあたり気を付けた方がいいこと、テクニックなどをご紹介してきました。ARSにはサンプルデータとして、ウエイトつきケージのセットアップデータが入っています。そこから移植するツールもそろっていますので、簡単にこのくらいの手になるような仕組みが出来上がっています。
ここまでの内容はあくまでABCアニメーションが実践している一例ではありますが、Mayaはこのような「最初に頑張れば2体目以降楽をできる」フローを作るのがとても得意なソフトです。
是非皆さんも、自分なりの「押しの一手」を作って、楽ができる範囲を少しづつ広げてみてはいかがでしょうか。