チュートリアル / 人体構造を意識したキャラクターセットアップ方法 ~ゼロから始めるMayaリギングの基本~
第1回:人体セットアップシンプル編/骨入れ
- Maya
- アニメ
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 学生・初心者
- 映画・TV
00.はじめに
皆様はじめまして。
インテグラル・ヴィジョン・グラフィックスのリードリガーの古屋です。
当社はクリエイティブディレクション、映像企画を得意とする小規模なジェネラリスト集団から始まったCGプロダクションです。
4~5年ほど前からゲームのお仕事の機会が増え、徐々にスペシャリストの比率が増えてきて、現在はスタッフの半数ほどがゲームの仕事に従事しております。
特にリグに関しては、7名から成る専門のリグチームを編成しており、スクウェア・エニックス様の「FINAL FANTASY XVI」「FORSPOKEN」などのPS5向けゲームのキャラクターセットアップをはじめ、CGアニメーション映画やソーシャルゲーム向けのリギングも多数担当しております。
日々リグに携わる業務の中で得た経験・知見を還元する事ができればと考え、コラムの連載をさせていただくことになりました。
当コラムが少しでも皆様の創作活動のお役に立てれば、と思います。
なお、当コラムの本文ついては、当社リグチームで協議の上、初心者の方にわかりやすくなるようまとめております。
そのため、執筆名義はIVGリグチームとさせていただきました。
よろしくお願いいたします!
01.コラム全体の概要
当コラムでは、これからキャラクターセットアップをやってみようという人を対象にリギングの各工程を紹介していきます。
リギングとは、モデルをアニメーションできるように様々な仕掛け(設定)を作っていく工程を指します。
(下図はHumanIKでコントローラーを作成してポーズをつけたものになります。)
細かく見ていくと、スケルトンの作成、スキニング、コントローラーの作成、コンストレイントやIKの設定などの工程があります。 視覚的に少し地味な工程ですが、動かした際のシルエットはリギング工程が大きく関わっているため、しっかり設定していく事で美しいアニメーションに繋がります。
まずは、なるべくシンプルな構造でキャラクターを動かす楽しさを感じていただき(シンプル編)、その後にもう少し踏み込んだリギングの世界(リアル編)を紹介していく予定です。
02.第一回目の概要
第一回目は、キャラクターモデルを動かす上で避けて通れない、骨についてになります。 骨の位置、骨の軸、名前…。決めることがたくさんありますが、一つずつ追っていきましょう。また、作業を始める前に確認することなども紹介していきます。
今回のコラムでは、以下の画像のようにシンプルな骨入れまで、順を追って解説します。
03.作業をはじめる前に
■骨入れについて
3DCGは頂点が集まって面になり、面が集まることで立体(モデル)になります。
モデルには多くの頂点があるため、これを一つ一つ動かしてアニメーションを作成するのは膨大な手間がかかり、現実的ではありません。
そこで「関節を模した構造を作って頂点をまとめて動かそう」ということで骨入れが必要になります。この骨の位置で動かせる範囲やシルエットが決まっていくため、モデルの形状や解剖学などを参考に位置を考えていきましょう。
Mayaでの骨の構成は下記のようになっています。
まず最小の単位としてジョイントがあり、ジョイント同士をつなぐ中間部がボーン、複数のジョイントやボーンによって出来上がった階層構造をスケルトンと呼んでいます。
実際に配置していくのはジョイント部分になります。
ジョイントはレンダリングされることはありません。
ボーンはジョイントが親子関係で接続された時に表示されます。
■骨入れの前に
リギングの方針を確認
最初に、どういう方針で動かしたいのか、を確認していくところから始めます。
今回のコラム(シンプル編)では、シンプルな構造でなるべく骨数を抑えた状態でもきれいに動かせる、という状態を目指したいと思います。 また、シンプル編のコントローラーの作成は、HumanIKというMayaに標準装備されているリグシステムを使用する予定です。
モデルを確認
モデルを確認してみましょう。
モデルのデザインから、どういう風にデフォームさせていきたいかの方向性を探ることが大切です。
今回のモデルは腕周りなど、筋肉が少し目立つ形状です。 この印象を大事にして、関節を曲げたときの形状やシルエットの変化をイメージしてみましょう。
また、モデルをよく観察し、破綻している部分(マージされていない頂点や穴、不正ポリゴン等)が無いかも確認しましょう。
もしもこの段階でモデルデータに不具合が見つかった場合は、後の工程で修正するのが困難になるため、この時点で修正してください。
作業環境を確認
今回は Maya 2023 を使用していきます。
骨のルール
骨の軸方向のルール
当コラムでは基本的には子ジョイントに+X軸が向き、主に曲がるのは-Z方向の回転になるように設定しています。
骨の命名規則
骨の名前に規則性を持たせることで、左右の反転複製(ミラー)などの際に手間を省くことができます。
今回はHumanIKを使用する予定であるため、命名規則をHumanIKに準拠します。
左右を識別するためのLeftとRightを接頭語として(中心にある骨には必要ありません)、先頭の文字は大文字、単語の先頭の文字も大文字にします。
例えば、腕は左右にあるので、LeftArmとRightArmです。 首は中心にあるので、Neckとなります。
ジョイントの方向(Joint Orient)
ジョイントの方向(Joint Orient)
ジョイントのローカル回転軸の方向を設定しているアトリビュートです。
この値を設定することによりトランスフォームアトリビュート(Transform Attributes)の回転(Rotate)を0にした状態にすることができます。
回転(Rotate)が0の状態を初期ポーズにしておくと、リグの制御がきれいに行えます。回転(Rotate)に値が入っている場合は 修正>トランスフォームのフリーズ(Modify > Freeze Transformation)を実行し、ジョイントの方向(Joint Orient)に変換しておきましょう。
■骨の作成方法について
ジョイントを作成(Create Joints)の使い方
①左上のメニューセットを「リギング」に切り替えます
②スケルトン > ジョイントを作成(Skeleton > Create Joints)を選択します。
③任意の場所をクリックしていくと、ジョイントが作成されます。
ジョイントは親子関係を持って作成されます。作成を終了する場合はEnterキーやQキーを押してください。
HumanIKのジョイント作成について
HumanIKのスケルトン作成でも骨を作成することができます。
今回のコラムでご紹介する骨構造は、HumanIKのテンプレート スケルトンを元に追加で変更を行っていく事でも作成することができます。
これにより、スケルトン作成の手順を少し省略できます。
①左上のメニューセットを「リギング」に切り替えます。
②スケルトン > HumanIK(Skeleton > HumanIK)でHumanIKのメニューが開きます。
③作成タブの「スケルトンの作成(Create Skeleton)」で人型の骨構造のテンプレートが作成されます。
作成されたジョイントをそれぞれ位置調整していきます。
全てのジョイントに名前がついていますので、改めて命名する手間を省いた状態でジョイントの位置調整作業に入ることができます。
また、HumanIKのスケルトン作成で作成されたジョイントには、HumanIKで骨を認識するために必要なキャラクター名(下の画像だとCharacter1)が付きますが、これはそのままで問題ありません。
ジョイントの配置方法
ジョイントは親子関係で接続されているため、動かそうとすると子のジョイントも影響を受けます。
その為、選択した骨だけを動かすには下記のような方法を使用しましょう。
ピボットを動かして配置を整える
Dキーを押すとピボットの編集モードになります。この状態で移動を行うと子のジョイントは影響を受けず、選択したジョイントだけが動きます。
「子を保持」にチェックを入れる
左側にある移動ツールのアイコンをダブルクリックしてツール設定を開き、
「子を保持(Preserve Children)」にチェックを入れます。
このチェックが入っていると、子のジョイントは影響を受けません。子のジョイントをまとめて動かしたい際はチェックを外すのを忘れないように気をつけてください。
トランスフォームのフリーズについて
回転(Rotate)を使用して位置調整を行った場合には、修正 > トランスフォームのフリーズ(Modify > Freeze Transformation)を実行します。
これにより、回転値はジョイントの方向(Joint Orient)に変換されます。
また、スケール(Scale)は初期ポーズの時点では1にしておきましょう。ジョイントの位置調整でスケールを使用することはありません。
04.骨の配置
実際にそれぞれの骨の配置について解説する前に、骨配置の共通方針とHumanIKにおけるTスタンスの定義について説明します。
■骨配置の共通方針
ウェイトを振られた頂点は、ジョイント位置を中心軸として円運動のような移動をしますので、ジョイントから距離が離れるほど移動幅が大きくなります。
その特性を理解したうえで骨の配置を行います。
基本的に動かしたい関節部分の体積の中心に骨を配置するのですが、場所によって骨の配置を偏らせます。
実際に人体の骨がある箇所に配置するイメージをしてもらうと分かりやすいかと思います。
肘や膝、指の関節などは曲がる方向が決まっているので、関節の外側に寄せて骨を配置します。こうすることによって関節の外側の丸まりを軽減し、骨の尖りを表現します。
この考え方に加え、前述した骨の軸方向のルールに沿って、各骨の配置について解説していきます。
■HIKにおけるTスタンスの定義
HIK用にスケルトンを用意する場合、Tスタンスの状態で骨を用意する必要があります。
さらにTスタンスの定義として定められている要件があります。抜粋すると以下の文章がそれに当たります。
・腕は X 軸に沿って広がっている必要があります。したがって、左腕は X 軸の正の方向を指している必要があります。
・キャラクタの足は(図のようにつま先が Z 軸に沿うような向きで)脚と垂直になっている必要があります。脚を Y 軸のまわりで回転させないようにします(左足指が内側、つまり右脚方向に向いたり、外側、つまり右脚から遠ざかったりしないようにする)。
<参考>https://help.autodesk.com/view/MAYACRE/JPN/?guid=GUID-8D27BAFD-7785-4173-860E-515FEB2E9C98
要約すると、腕はグローバルX軸と水平に、足はY軸と水平に配置されている必要があります。
セットアップするモデルの初期ポーズによっては、この条件を満たして配置するのが難しい場合があります。
その場合、モデルの修正か、スキニング後に初期ポーズの修正を行う必要があります。
ちなみに今回のモデルの場合は、骨の配置がしやすいようにあらかじめモデルの修正を行っております。
■骨の配置
骨の配置について部位ごとに解説していきます。
実際の作業では同時にスキニングも行いながら、理想的なデフォームを再現するための適切な配置を探りますので、皆さんもその形で進めてもらえれば幸いです。
例えば、上腕と前腕、上腿と下腿は概ね同じ長さになっていないと成立させられないポーズがあります。
こういった確認を行うためにも同時にスキニングを行いながら骨の配置を行うことが大切です。
また、右半身の骨は左半身に配置したものをミラーして配置することが可能です。
詳細な手順は後ほど解説しますので、まずは右半身以外の部分を配置していきましょう。
腰
Hips
腰の位置の移動と骨盤の回転を制御したいので、臀部の中心に配置します。
脊椎
Spine
腰から胸にかけてのデフォームの制御をするための骨です。
実際の人体では骨の配置が背中側に寄っています。
そのように配置にした方が背中の硬さを表現しやすいです。
しかしspineは前後左右どの方向にも曲げたい骨なので、体積の中心に骨の配置を行います。
spineは全部で3本あります。
spine2は胸部の制御を担っていますので、みぞおち付近に骨を配置します。
spineはへそと骨盤の出っ張りの中間の位置に配置します。
腰椎の開始地点の高さに骨を合わせるイメージです。
spine1はspineとspine2の中間に配置します。
今回のモデルでは筋肉の起伏とspineの中間地点が概ね一致したので、その形状を生かしてデフォームできるような位置に微調整しました。
Neck
首のデフォーム制御をするための骨になります。
前後左右どの方向にも曲がるので、関節部分の体積の中心に配置します。
Neck1
同じく首のデフォーム制御をするための骨になります。
NeckとHeadを結んだ中間地点に配置します。
Head
頭部のデフォーム制御をする骨になります。
RightViewで見た時の耳の下あたりが基準になります。
足
UpLeg
上腿のデフォーム制御をする骨になります。
前後左右どの方向にも曲がることが想定される骨なので、関節部分の体積の中心に配置します。
正面から見た時に骨盤と股を結んだ中間位置が適当です。
RightViewで見た際の配置の場所は、尻のアウトラインの中心が目安になります。
それよりも下過ぎると足が途中で折れ曲がったような印象になります。
Leg
下腿のデフォーム制御をする骨になります。
高さは膝関節の中心付近が良いです。
また、膝は曲がる方向が決まっていますので、骨の配置を少し偏らせます。
今回のモデルの場合、FrontViewで見た時の配置が少し内側に偏っていますが、これはUpLegとFootを結んだ場所に配置しているためです。
HIKを適用する際の要件にあるように、UpLegからToeBaseまでの骨はグローバルY軸と並行である必要があるので、こういった配置になっています。
膝の場合は+Z方向の回転しかできないので、FrontViewで見た時の配置に偏りがあっても影響はないため、問題ではないです。
Foot
足首の関節の制御にあたります。
足首は前後左右どちらにも曲がるので、関節の中心に配置します。
ToeBase
足の指のデフォームを制御します。
HIKを使用する都合上、Footからまっすぐ下におろした位置に配置します。
今回はまっすぐ下におろした時に、足の指の中心付近に配置できましたが、
初期ポーズでモデルの足が開いていると、中心からのズレが大きくなります。
その場合踏ん張ったような足のポーズをするときに、設置による足の指の捻りをうまく制御できなくなります。
初期ポーズで足が開きすぎていると感じたら、モデルの修正を検討しましょう。
ToeBaseは一本で足の指全てのデフォームを制御するので、全ての指の関節の平均的な配置にできると良いです。
TopViewから見た配置は、母指球と小指球を結んだ線上にあると良いです。
腕
Shoulder
肩の上げ下げなど、肩関節自体の移動を制御する骨になります。
肩の動きの起点となる、鎖骨と胸鎖関節との接合部分に骨を配置しています。
Arm
上腕部のデフォーム制御をする骨になります。
肩関節の曲がる位置を意識して配置します。 どの方向にも曲がることが想定される骨なので、体積の中心に配置します。
キャラクターのプロポーション次第ですが、今回のモデルだとFrontViewを見た時の僧帽筋による傾斜の着地地点と脇の中間が適当です。
TopViewで見た時の体積の中心に配置するのが適当です。
ForeArm
前腕部のデフォーム制御をする骨にあたります。
肘は曲がる方向が決まっていますので、TopViewで見た時の骨の配置を偏らせます。
実際の人体の肘の関節位置に近い印象になるかと思います。
補助骨なしでも、ある程度肘の尖りを表現できるようにこのような配置をします。
Hand
手首の関節の制御にあたります。
手首もどの方向にも曲がることが想定される骨なので、手首の関節の体積の中心に配置します。
TopView、FrontViewを活用して配置調整をすると分かりやすいです。
手のひらを壁に着くような曲げ方をしたときに掌底がなくなってしまったり、前腕の途中で折れ曲がるような印象にならないよう、配置には注意しましょう。
Finger
指関節の制御にあたります。
指は曲がる方向が決まっていますので、骨の配置を偏らせます。
補助骨なしでもある程度骨の尖りを表現できるように、骨の配置を背中(甲)側に寄せます。
ただし、第三関節の骨は背中側に寄せすぎると拳が小さくなってしまうため注意が必要です。
また、指の生えている位置よりも深い場所に骨が配置されているので、そういった特徴を再現できると人体らしいデフォームを再現できます。
自分の指の骨位置を確認しながら配置すると分かりやすいです。
■配置後の軸調整
骨の配置後に前述したルールに沿って骨の軸方向の調整を行います。
ジョイントの方向付け(Orient Joint)について
ジョイントの方向付け(Orient Joint)でジョイントの軸方向を調整することができます。 使用する際はスケルトン > ジョイントの方向付けのオプション(Skeleton > Orient Joint□)を開いてください。
主軸(Primary Axis)は子階層に向ける軸を選びます。
補助軸(Secondary Axis)は補助軸のワールド方向(Secondary Axis World Orientation)で設定した方向に向きます。
オプションがデフォルトになっている場合、主軸(Primary Axis)のローカル+X軸が子階層、補助軸(Secondary Axis) のローカル+Y軸がワールド空間の+Y軸に向くようになっています。
オプション部分で任意の設定をして実行することで、軸方向を調整します。
ジョイントの回転値(Rotate)の値が0でないと実行できません。ジョイントをフリーズしてから実行してください。
End骨について
今回は、各ジョイント構造の末端にジョイントの向きを設定するための骨として、End骨を配置します。
End骨が配置されていれば、Orient Jointを実行した際にEnd骨の一つ上の階層の骨は主軸(Primary Axis)がEnd骨を向くようになります。
これを利用して後述するHeadやHand、Finger、ToeBaseの軸方向を制御をします。
Orient Jointを実行した後は、End骨のRotateとJoint Orientの値を0にしましょう。
こうすることで親階層との角度の差が無くなり、End骨が親階層と同じ方向を向くようになります。
End骨はスキニングに関与しない骨なので、この処理は統一のとれたデータを作成するために行います。
データが整理されていると後編集や他の人とのデータのやり取りが円滑に進むので、やっておきましょう…!
腰
Hips
軸の向きはグローバル軸と直行、もしくは一致させます。
これはHipsを垂直、水平に移動させたい場合が多いからです。 例えばその場でジャンプするようなモーションでは垂直にHipsを持ち上げたいですし、 歩行モーションでは水平に体を前進させたいです。
HIKを設定する場合は、骨の向きに関わらずHipsコントローラがグローバル軸に合わせて設定されるので、あまり効力のない設定方針ですが、自作のリグ設定をする際はコントローラと骨の向きが一致していると扱いが楽なことが多いため、汎用的に対応できる骨配置を目指すといった理由で、このような設定を採用します。
脊椎
Spine~Neck1
+X軸は子階層を向き、+Y軸は背中側に向くようにOrient Jointを実行してください。
Head
+X軸は子階層を向き、+Y軸は背中側に向くようにOrient Jointを実行してください。
加えて軸はグローバル軸と直行するように設定しましょう。
基本的にキャラクターモデルはまっすぐ正面をむいているポーズなので、
頭を捻じって周りを見渡すようなモーションの時に一軸のみ(今回はX軸)で制御できると扱いやすいためです。
Headの子階層にEnd骨を作成し、グローバル+Y方向に移動させてからOrient Jointを実行するとグローバル軸と直行する状態になります。
腕
Shoulder~ForeArm
X軸は子階層を向き、Y軸は背中側に向くようにOrient Jointを実行してください。
Hand
X軸は子階層を向き、Y軸は頭上に向くようにOrient Jointを実行してください。
加えて軸方向はグローバル軸と直行するように設定しましょう。
HandもHips同様に垂直、水平に移動させたい場合が多いからです。
Handの子階層にEnd骨を作成し、グローバル+X方向に移動させてからOrient Jointを実行するとグローバル軸と直行する状態になります。
Finger
X軸は子階層を向き、Y軸は関節の骨が出っ張っている方に向くようにOrient Jointを実行してください。
それぞれの指の末端にはEnd骨を設定します。
End骨を指先に配置してからOrient Jointを実行する事で、指の第一関節の骨の+X軸が指先を向くように設定できます。
足
UpLeg~ToeBase
X軸は子階層を向きます。Y軸は人体の正面側(足の甲側)に向くようにOrient Jointを実行してください。
加えてToeBaseの軸方向はグローバル軸と直行するように設定しましょう。
グローバル軸と直行した状態を初期状態にしておく事で、足が地面と設置した状態を設定しやすくなるためです。
ToeBaseの子階層にEnd骨を作成し、グローバル+Z方向に移動させてからOrient Jointを実行すると、グローバル軸と直行する状態になります。
Orient後の正しいアトリビュートの状態について
Orient Jointの実行によって骨のX軸が子階層を向いている状態なので、骨の位置は親階層からみたX軸上の移動値のみで示されます。
そのためTransform Attributes内のTranslateY軸とZ軸は、値が0の状態になっているはずです。念のため確認しましょう。
例外として分岐部分(足や鎖骨、指等)はY軸やZ軸の値が0でなくても大丈夫です。
また、Orient Jointの実行前に回転(Rotate)の値も全て0になっているはずなので、この段階でもう一度確認しておきましょう。
05.左側の骨の配置が終わったら
■右側の骨を作る(骨のミラー(反転して複製))
左側のジョイント配置が終わったら、右側はミラーで作成します。 スケルトン > ジョイントのミラーのオプション(Skeleton > Mirror Joints□)を開きます。
ミラー平面(Mirror Across)
ミラーする際の軸を決めます。規定はXYですが、YZに設定します。
ミラー対象(Mirror Function)
骨の軸方向を選択できます。 動作(Behavior)骨の軸が反転してコピーされます。これにより、動作も反転します。 方向(Orientation)骨の軸はコピー元と同じ方向を向きます。左右同じ方向に動作します。
どんなアニメーションをするかによって軸方向を選びましょう。 シンプル編では動作(Behavior)を推奨します。
複製するジョイントの代替名(Replacement Names for duplicated joints)
ミラー元とミラー先の骨名について指定します。
検索する文字列(Search For)
コピー元の置き換えたいジョイント識別子を指定します。 左から右にコピーするので、Leftと入れてください。
置換後の文字列(Replace With)
検索する文字列(Search For)で指定した識別子と置き換える識別子を指定します。 Rightと入れてください。
■骨のラベル
ジョイントにはジョイントのラベル付け(Joint Labelling)というアトリビュートがあります。 これはスキニング工程で有用なものなので、設定しておきましょう。
サイド(Side)
左右や中央(Left、Right、Center)など、ジョイント識別子に従って設定してください。
タイプ(Type)
部位によって指定することもできますが、当コラムでは全て「その他(Other)」を選択してください。
その他のタイプ(Othter Type)
当コラムでは方向識別子を除いたジョイント名を入力してください。
この骨のラベル付け作業ですが、弊社で作成したカスタムツールを用意しておりますのでぜひご活用ください。
■IVG_jointLabelSetting
ジョイントのラベル設定のカスタムツールです。
IVG_jointLabelSetting.mel使用方法:
ツールをダウンロードしたら任意の場所に保存し、Mayaシーンにドラッグ&ドロップで起動できます。
起動できましたら、ラベルを設定したいジョイントを選択し(複数選択可)、ツールの ”Labeling” をクリックすることで適用されます。
適用されるとコマンドラインに何本のジョイントにラベル付けされたかログが表示されます。
※今回の命名規則と異なる場合はうまくラベルが設定されませんのでご了承ください。
06.おわりに
今回は骨入れについて紹介いたしました。
リギング工程としてはどうしても最初に行わなければいけない作業ですが、 ここがしっかり定まっていると綺麗なデフォームになりますので、ぜひ丁寧に行ってみてください。
次回はスキニングとコントローラー(HumanIK)についてご紹介する予定となっております。
それでは、次回もよろしくお願いいたします!