ポリゴン・ピクチュアズが現場で実践しているリグおよびアニメーション制作の手法を、Maya用リグ・アニメーション開発ツール「eST3」を中心に紹介していく本連載。
前回は eST を使った最も基本的な方法で眼鏡のリグを作成しました。今回は同じモデルを別の方法でセットアップしてみましょう。今回の方法でセットアップすると、eST3 のより多くの機能を使用することが可能になります。
Information
eST3
eST3 は、リギングとアニメーションのフレームワークです。Maya で動作し、様々なツールを提供します。
動作環境:Windows 10(Maya 2020〜2024/Python 2.7, 3.7, 3.9, 3.10)、Linux(Maya 2020〜2023/Python 2.7, 3.7, 3.9)
価格:無料(※利用規約とプライバシーポリシーへの同意が必要)
est3.jp
はじめに
eST にはモジュラーリグの機能があり、その基本となるユニットというしくみを利用してセットアップしていきます。
ユニットには具体的な骨構造を定義するものもありますが、今回は既存の構造に当てはまらない場合にも、ユニットを使用してセットアップする手順をお見せします。ユニットを使用してセットアップされたリグは「拡張スタンダード(Extended Standard)リグ」と呼び、より多くの eST の機能が利用できるようになります。
作業に入る前に「第5回:簡単なリグを作成しよう」の「
Topic 01:準備
まず、アニメーション要素を整理してみましょう。
アニメーション可能な部分は眼鏡全体とツルです。その要素は以下のようになります。
・眼鏡全体の移動・回転・スケール
・左のツルの1つの軸周りの回転
構造に適当なユニットが存在しないので、自由な階層構造をセットアップするため、「カスタム(custom)ユニット」を使用します。このユニットには、任意の DAG ノードとそのアトリビュートをアニメーションする対象として指定できます。
Topic 02:フレームワークの作成
最初にフレームワークを作成します。以下の手順で行います。
1. eSTメニューバーから[リグ(Rig)→ コンストラクター(Constructor)…]を選択し、ウィンドウを開きます。
2.[リグコンストラクター(Rig Constructor)]ウィンドウで[リグ→作成(Create)→ □]を指定し、[フレームワークエディター(Framework Editor)]ウィンドウを開きます。
3. [リグの構成(Rig Construction)]に[スタンダード(拡張)(Standard(Extended))]を指定します。
4. [ネームスペース(Namespace)]に[無し(None)]を指定します。
5. [リグパス(Rig Path)]を指定します。ここでは「CGW チュートリアル/プロップ/眼鏡/アニメーション(CGW Tutorial/Props/Glasses/Animation)」を指定します。
6. [リグバージョン(Rig Version)]フィールドに「1.0」と入力します。
7. [既定のコンストレイン AnimPlugs を作成(Create default constraint animPlugs)]、[既定のデフォーマー AnimPlugs を作成(Create default deformer animPlugs)]、[既定のイレギュラー AnimPlugs を作成(Create default irregular animPlugs)]の各チェックボックスをOFFにします。
8. [レイアウトハンドル(Layout Handle)]メニューに[無し(None)]を指定します。
9. [作成して閉じる(Create and Close)]ボタンをクリックして、ウィンドウを閉じます。
Topic 03:ジオメトリの読み込み
セットアップ対象のジオメトリをシーン中に読み込んで、リグに追加します。前回と手順は同じです。
1. eSTメニューバーから[ファイル(File)→ライブラリアン(Librarian)…]を選択し、[ライブラリアン(Librarian)]ウィンドウを開きます。
2. パスセレクターで「プロジェクト/CGW チュートリアル/リグ/プロップ/眼鏡/共通(Project/CGW Tutorial/Rigs/Props/Glasses/Common)」を指定し、一覧に表示される「glasses_model.ma」を選択します。
3. ウィンドウ下部の実行ボタン左端にある▼ボタンをクリックし、表示されるメニューから[ネームスペースなしでインポート(Import with No Namespace)]を選択します。その後、実行ボタンをクリックしてファイルを読み込みます。
Topic 04:ベーススケルトンの作成
ユニットを追加する
ユニットの機能を利用して、基本的なアニメーション構造であるベーススケルトンを作成します。自由にベーススケルトンを追加するため、custom ユニットを使用します。
1. eSTメニューバーから、[リグ(Rig)→リグコンストラクター(Rig Constructor)...]を選択し、ウィンドウを開きます。
2. [ベーススケルトン(Base Skeleton)→作成(Create)...]を指定して[ベーススケルトンを作成(Create Base Skeleton)]ウィンドウを開きます。
3. ウィンドウ左側に表示されるユニットのリストから[BasicPart→Custom→custom]を選択します。
4. ウィンドウ右側に[基本設定(Basic Settings)]タブが表示されます。
5. [ノードの一般名(Basic Generic Name)]に「glasses」と入力します。この名前はユニットが作成するノードが使用します。
6. [COGを作成する(Create COG)]チェックボックスをONにします。
7. [新規COGの識別子(New COG Identifier)]は空にします。
8. [作成して閉じる(Create and Close)]ボタンを押してウィンドウを終了します。
実行後、origin ノードの下に新しいノードが追加されます。これらは新しく作成されたベーススケルトンです。この段階では custom ユニットのベーススケルトンは作成されていませんが、その親階層となる baseRoot、baseCog_space、baseCog ノードが作成されています。
その他、rig ノードの直下に[unit_gp]、その子階層に[unit]という機能名をもつノードが作成されます。これらは「ユニットノード」と呼ばれる特別なノードで、ユーザーが追加したユニットごとに作成され、その情報が記録され ます。
「custom_unit_Glasses」が今回作成した custom ユニットのユニットノードです。それ以外に[root_unit]と[cog_unit]が作成されていますが、これらは transform 可能なベーススケルトンの親階層となるベーススケルトンのための、特別なユニットです。
また、animPlugs として glasses_baseAnimPlugs、root_baseAnimPlugs、cog_baseAnimPlugs も作成されました。「glasses_baseAnimPlugs」 が、今回作成した custom ユニットのベーススケルトンのための animPlugs です。この段階では空です。
Transformの複製
このリグでは、眼鏡全体のアニメーションは baseCog ノードを使用して行うため、ツル部分のノードのみを custom ユニットのベーススケルトンとして追加します。
ツル部分のジオメトリの親 transform はレンダージオとして利用するので、同じ位置に transform ノードを作成してベーススケルトンに利用します。
1. アウトライナーから[glassesTemple_L]ノードを選択します。
2. [作成(Create)→選択した位置(At Selection Position)→□]を指定して[選択した位置に作成(Create Nodes at Selection)]ウィンドウを開きます。
3. [ノード命名式(Node Naming Expression)]に前から[~]、[base]、[~]を指定します。
4. [ノードタイプ(Node Type)]に[ヌル]を指定します。
5. [位置(Position)]に[それぞれの位置(Each Positions)]を指定します。
6. [回転を適用する(Align rotation)]をOFFにします。
7. [作成(Create)]を押してノードを作成します。
これで、glassesTemple_Lの位置に glassesTemple_base_L ノードが作成されました。
ベーススケルトンを追加
custom ユニットにベーススケルトンを追加するには、「ユニットユーティリティー」と呼ばれるユニット固有のツールを使用して、あらかじめ用意した transform ノードを追加します。
1. アウトライナーから[glassesTemple_base_L]ノード、[baseCog]ノードを順に選択します。
2. [リグコンストラクター(Rig Constructor)からユニット(Unit)→Glasses:custom→ベーススケルトンを編集(Edit Base Skeleton)...]を選択して、[ベーススケルトンを編集(Edit Base Skeleton)]ウィンドウを開きます。
3. [編集(Edit)→ベーススケルトンを追加(Add Base Skeleton)]を選択します。[glassesTemple_base_L]ノードが[baseCog]ノードの子階層に追加され、ベーススケルトンとして認識されました。
4. [UI→プロパティエディター(Property Editor)]チェックボックスをONにします。ウィンドウの右側にプロパティエディターが表示されます。
5. [glassesTemple_base_L]ノードを選択し、プロパティエディターの[アニメーション可能(Animatable)]メニュー項目を[はい(Yes)]に設定します。
6. 表示される[非アニメータブル属性(Non-Animatable Attributes)]リストから[rotateY]を選択し、マウスの中ボタンをクリックして[アニメータブル属性(Animatable Attributes)]リストへドラッグ&ドロップします。rotateYが[アニメータブル属性(Animatable Attributes)]リストに移動し、Mayaのチャンネルボックスに表示されます。
これで glassesTemple_base_L ノードはアニメーション可能になり、glasses_baseAnimPlugs に追加されました。
※ eSTのツールが作成したノードを手作業で削除しないでください。ツールが参照するアトリビュートやコネクションが追加されている場合があり、手作業で削除すると整合性が取れなくなってツールが正しく動かなくなります
Topic 05:ジオメトリを追加
ジオメトリをレンダージオとして登録します。
1. アウトライナーから[glassesTemple_L]ノードと[glassesTemple_base_L]ノードを順に選択します。
2. [リグコンストラクター(Rig Constructor)]ウィンドウから[レンダージオ(Render Geo)→追加(Add)→選択したベーススケルトン空間へ(To Selected Base Skeleton Space)]を選択します。これでglassesTemple_Lノードがレンダージオになりました。
3. 続いて、アウトライナーから[glasses]ノードと[baseCog]ノードを順に選択します。
4. [リグコンストラクター(Rig Constructor)]ウィンドウから[レンダージオ(RenderGeo)→追加(Add)→選択したベーススケルトン空間へ(To Selected Base Skeleton Space)]を選択します。これでglassesノード以下が全てレンダージオになりました。
[sets]の下に[displayGroups]と[renderGeo_displayGroup]という名前のobjectSetが追加され、その下に[glassesTemple_L]と[glasses]が登録されます。
※レンダージオとして登録されたノード以下階層のDAGノードは、レンダージオとして扱われます。
Topic 06:コントローラーを作成
アニメーションをつけるインターフェイスとしてコントローラーを作成します。
ベーススケルトンだけでもアニメーションすることはできますが、拡張スタンダードリグでは、視認しやすいコントロールハンドルやIK機能、最適化されたGUI等、アニメーターがコントロールしやすいインターフェイスをベーススケルトンとは別の階層に用意します。eST ではこれらのノード階層を「コントローラー」と呼びます。
ユニットで作成したベーススケルトンにコントローラーを追加するには、あらかじめ用意されているコントローラースクリプトからタイプを選択します。
custom ユニットにコントローラーを作成
customユニットにコントローラーを作成する場合は、既定で次の2つの方法を選択できます。
・ベーススケルトンと同じ階層構造およびアトリビュートをもつコントローラーを自動生成する
・手作業で任意のコントローラーをセットアップする
ここでは、minimalタイプのコントローラーを作成し、ベーススケルトンのアニメータブルなアトリビュートをそのまま操作できるようにします。
1. [リグコンストラクター(Rig Constructor)]から[コントローラー(Controller)→作成(Create)→Glasses:custom→□]を選択し、[コントローラーを作成]ウィンドウを開きます。
2. [タイプ(Type)]メニューから、[Minimal]を選択します。
3. [作成して閉じる(Create and Close)]ボタンを押してコントローラーを作成し、ウィンドウを終了します。
globalLayoutノードと同じ階層に[controller_gp]という名前のノードが作成され、その配下にベーススケルトンをドライブするコントローラー階層が生成されます。
また、新たに[glasses_minimalCtrlAnimPlugs]という名前のAnimPlugsが作成され、[glassesTemple_baseCtl_L]という名前のコントローラーノードがそのメンバーとして登録されます。
これでユニットを使用したセットアップは完成です。
Topic 07:追加のセットアップ
animPlugsノードの下を見ると、複数のanimPlugsが作成されていることがわかります。layout_animPlugsは、スタンダードリグおよび拡張スタンダードリグに必ず存在するanimPlugsで、ベーススケルトン階層のルートとなるベーススケルトンが登録されています。それ以外のanimPlugsは、ユニットを使用してセットアップした際に作成されたものです。
ユニットを作成すると、必ずrootユニットとcogユニットが生成されます。また、各ユニットにはベーススケルトン用とコントローラー用のanimPlugsがそれぞれ作成されるため、ユニット数に応じてanimPlugsの数も増えていきます。
animPlugsは、グループ化するために手動で作成することもできます。ここでは、ユニットによって作成されたanimPlugsを、ベーススケルトン用とコントローラー用に分けてグループ化してみましょう。
animPlugs をグループ化する
ユニット によって作成された animPlugs をグループ化します。
1. [eSTメニュー→リグ(Rig)→AnimPlugsエディター(AnimPlugs Editor)…]、またはリグコンストラクター(Rig Constructor)の[リグ(Rig)→AnimPlugsエディター(AnimPlugs Editor)…]を選択し、[AnimPlugsエディター(AnimPlugs Editor)]ウィンドウを開きます。
2. ウィンドウ左側のAnimPlugsリストから、[ルートベーススケルトン]、[COGベーススケルトン]、[Glassesベーススケルトン]を選択します。
3. [作成→新規グループAnimPlugs□]を選択し、[AnimPlugsをグループ化]ダイアログを表示します。
4. [ノード命名式(Node Name Expression)]の各フィールドに、先頭から[glassesAll]、[base[animPlugs]]と入力します。最後のフィールドは空欄のままにします。
5. [作成して閉じる(Create and Close)]をクリックします。glassesAll_baseAnimPlugsが作成され、その配下にroot_baseAnimPlugs、cog_baseAnimPlugs、glasses_baseAnimPlugsが格納されます。
同様に[glassesAll_ctrlAnimPlugs]を作成し、root_ctrlAnimPlugs、cog_ctrlAnimPlugs、 glasses_minimalCtrlAnimPlugs を追加してください。
animPlugs の属性を変更する
現在の設定で、リグビュー(Rig View)でどのように表示されるかを確認してみましょう。[eST メニュー→リグ(Rig)→ビュー(View)...]を選択します。
リグビューには、1つのレイアウト(Layout)タブと、2つのGlasses Allタブが表示されます。2つのGlasses Allタブのうち、一方にはコントローラーが表示されますが、もう一方には何も表示されません。これは、ベーススケルトンをグループ化した animPlugs が表示されているためです。
ベーススケルトンはコントローラーによってドライブされるため、通常はGUIに表示したり、アニメーションファイルの保存対象にしたりする必要はありません。
このようなanimPlugsは、[保存可能(Storable)]属性をOFFに設定します。以下の手順で設定します。
1. [AnimPlugsエディター(AnimPlugs Editor)]ウィンドウを開きます。
2. ウィンドウ左側のAnimPlugsリストから、[Glasses All ベーススケルトン]を選択します。
3. ウィンドウ右側のプロパティエディターで、[保存可能(Storable)]チェックボックスをOFFにします。
リグビュー(Rig View)の[UI → 再構築(Rebuild)]を実行すると、GUIが現在のリグ構成に合わせて再構築されます。Glasses Allタブは1つだけ表示されるようになります。
リグビューのタブには[Glasses All]と表示されていますが、このリグではレイアウト(Layout)タブ以外にタブが存在しないため、表示名を「Glasses」に変更します。以下の手順で設定します。
1. [AnimPlugsエディター(AnimPlugs Editor)ウィンドウ]を開きます。
2. ウィンドウ左側のAnimPlugsリストから、[Glasses All コントローラー]を選択します。
3. ウィンドウ右側のプロパティエディターで、[短縮UI名(en)]テキストフィールドに「Glasses」と入力します。
リグビュー(Rig View)の[UI → 再構築(Rebuild)]を実行すると、タブに「Glasses」と表示されるようになります。
次回予告:人型キャラクターのセットアップ
今回は前回と同じ眼鏡リグを、モジュラーリグの機能を使用して「拡張スタンダードリグ」としてセットアップする方法を紹介しました。
次回からは、人型のキャラクターをセットアップしていきます。
付録:用語解説
今回の用語解説は、前回の内容を前提としています。必要に応じて前回の用語解説も参照してください。
animPlugs
animPlugsは、アニメーションに使用するGUIであるリグビュー(Rig View)の表示や、アニメーションファイルの保存単位など、eSTの様々なツールの動作に関わります。例えば、animPlugsの名前は、リグビュー(Rig View)が読み込むGUIスクリプトの名前に使用されます。
このように、animPlugsの構成はリグ全体の動作に大きく関わるため、通常はリグの作成に着手する前に、animPlugsの構成や登録するアトリビュート、命名規則をあらかじめ設計・確認しておきます。
拡張スタンダードリグ
eSTには、ベーススケルトンを追加するための「ユニット」と呼ばれるしくみが用意されています。
ユニットを使用して全てのベーススケルトンを構築したリグは、eSTのより多くの機能に対応できます。このようなリグを「拡張スタンダードリグ」と呼びます。
■ユニット
ユニットは、「部位ごとのアニメーションインターフェイスの設計図」のようなものです。
多数のユニットが用意されており、腕(arm)や頭(head)のような動物の骨構造を表す単位や、車輪(wheel)や紐(strand)のように特定の機能を提供する単位、さらに抽象的な概念を表す単位に分類されます。
各ユニットには、それぞれ固有のベーススケルトンの構成や役割、仕様があらかじめ定義されています。そのため、ユニットを使用してセットアップしたリグでは、eSTの様々な自動化処理が可能になります。
■rootユニットとcogユニット
ユニットを使用してベーススケルトンを作成する際、既に存在するベーススケルトンを親として指定しない場合は、フレームワークのoriginノードの下に、baseRoot、baseCog_space(_*)、baseCog(_*)という名前のtransformノードが作成されます。以降に作成されるベーススケルトンは、その子階層に配置されます。
baseRootは、リグに1つだけ作成されるrootユニットのベーススケルトンです。シーンの原点に配置され、リグ全体をアニメーションするための基準となります。
baseCog_spaceとbaseCogは、cogユニットのベーススケルトンです。cogは「Center of Gravity」の略で、本来は「重心」を意味します。eSTでは、子階層のベーススケルトン全体のアニメーションの基準となるトランスフォームを指します。cogBaseの配置は、ユーザーが任意に指定できます。
ユーザーが作成するユニットは、必ずcogユニットのベーススケルトンであるcogBaseノードの子として配置されます。また、cogユニットの作成時にrootユニットが存在しない場合は、自動的にrootユニットが作成されます。cogユニットは複数作成でき、各cogユニットの最上位にあるベーススケルトン(baseCog_space)は、baseRootの子となります。
■拡張スタンダードリグの構成要素
拡張スタンダードリグでは、ユニットが提供する仕様を利用することで、前回解説したスタンダードリグの構成要素に加え、以下の要素をフレームワークへ追加できます。
・コントローラー
コントローラーは、ベーススケルトンに代わってアニメーション制作を行うためのインターフェイスとして利用するスケルトン(DAGツリー)です。
・バインドスケルトン
バインドスケルトンは、ベーススケルトンに代わってスキニングやその他のジオメトリをバインドするためのドライバーとして利用するスケルトン(DAGツリー)です。
これらの構成要素を追加することで、ベーススケルトンは最も基本的なアニメーションインターフェイスとなります。ベーススケルトンには、ユニット単位でコントローラーとバインドスケルトンがそれぞれ接続されるため、それぞれを独立した構成として設計・動作させることができます。
■拡張スタンダードリグの動作フロー
これらの構成要素を追加すると、アニメーションがレンダリング用オブジェクトへ伝わるフローは、以下のように変化します。
コントローラーが追加されている場合、アニメーションはコントローラーに作成され、コントローラーがベーススケルトンを駆動します。
バインドスケルトンが追加されている場合は、ベーススケルトンがバインドスケルトンを駆動します。レンダージオとブロックジオは、ベーススケルトンとバインドスケルトンの両方、またはいずれかによって駆動されます。
コントローラーとバインドスケルトンは手作業でも作成できますが、各ユニットにあらかじめ作成手順を記述したスクリプトを用意しておくことで、いつでも同じ構成を追加できます。
■構成要素の分離とマージ
拡張スタンダードリグでは、構成要素ごとにリグを「分離」できます。分離された構成要素は元のリグから完全に切り離されるため、それぞれを別々のファイルとして保存できます。
分離した構成要素は、必要に応じてリグへ再度組み込むことができます。この操作を「マージ」と呼びます。
構成要素を分離できることで、一部の構成要素を共通化しながら、複数のバリエーションをもつリグを構築・更新しやすくなります。また、複数人で1つのリグを作成する場合も、構成要素ごとに作業を分担できます。
例えば、体のスキニング、フェイシャルセットアップ、コントローラーの作成などを、それぞれ異なる担当者が受け持つといったスキルに応じた分業や、アウトソーシングにも対応できます。
ポリゴン・ピクチュアズ
ポリゴン・ピクチュアズは、1983年7月設立の国内最大手のデジタルアニメーションスタジオです。設立以来、「誰もやっていないことを 圧倒的なクオリティで 世界に向けて発信していく」ことをミッションとし、マレーシアとインドの制作拠点を含め300名以上のクリエイターが集結。最新技術を駆使し情熱をもって先端的なエンタテインメント映像の製作に力を注いでいます。代表作は『シドニアの騎士』『トランスフォーマー』シリーズ、『スター・ウォーズ レジスタンス』『ピングー in ザ・シティ』、映画『ヒプノシスマイク -Division Rap Battle-』など。
詳細につきましては、www.ppi.co.jp をご覧ください。
公式X(旧Twitter):@POLYGONPICTURES(日本語)/@PPI_CG_anime(英語)
公式Instagram : @polygonpicturesinc
TEXT_ポリゴン・ピクチュアズ連載企画チーム
EDIT_小村仁美 / Hitomi Komura(CGWORLD)