| On this page |
完全なキャラクタリグは、小さいリグコンポーネントを組み合わせることで構築することができます。Houdiniに同梱されている事前構築済みリグコンポーネントを使用したり、様々なリグで再利用できる独自のコンポーネントを作成することができます。Houdiniの事前構築済みリグコンポーネントは、APEX Autorig Component SOPから利用可能です。これらのSOPには、FK、IK、ボーン変形などの機能を追加するリグコンポーネントへのインターフェースが用意されています。
このページでは、FK、ボーン変形、IKロジックを3つのジョイントのチューブジオメトリに追加しながら、Houdiniの事前構築済みリグコンポーネントについて説明します。その後、トランスフォームドライバリグコンポーネントを使用して、チューブスケルトン上の既存のコントロールを駆動する新しいコントロールを作成します。
FK ¶
この例では、FKトランスフォームリグコンポーネントを使用して、3つのジョイントのチューブジオメトリにFKリグロジックを追加します:
-
まずチューブジオメトリに対してスケルトンを描画します(スケルトンの作成に関する詳細は、スケルトンの扱い方を参照してください):
チューブジオメトリにスケルトンを作成 -
Tube SOPで、 Rows を
3に設定し、他のパラメータを調整してチューブのサイズを変更します。 -
3つのジョイント(
point_0、point_1、point_2)があるスケルトンを描画します。point_0はpoint_1の親で、point_1はpoint_2の親です。
チューブスケルトン
-
-
以下のネットワークを接続して、キャラクタにFKリグロジックを追加します(この例では、リグロジックにボーン変形を追加しないため、チューブジオメトリは必要ありません):
チューブジオメトリにFKリグロジックを追加 -
Pack Folder SOPは、チューブスケルトングをパックキャラクタフォルダ構造に追加します。このスケルトンの名前を
tube.skelにしたいので、そのPack Folder SOPで Name をtube、 Type をskelに設定します。 -
パックキャラクタフォルダ構造の中身は、Rig Treeビューで確認することができます:
-
ネットワークエディタでPack Folder SOPを選択します。
-
ペインの上部で
New Tabアイコンをクリックし、 New Pane Tab Type ▸ Animation ▸ Rig Tree を選択します。
-
Rig Treeビューで、ノード名(ここでは
add_to_packed_folder)の横にあるドロップダウンボックスを“Output 1”に設定します。 -
Type を Packed Folders に設定します。すると、以下のパックフォルダ構造が表示されます:
/ -- tube.skel
-
-
APEX Autorig Component SOPで、 Component Source パラメータを FK Transform に設定します。このFKリグコンポーネントは、チューブスケルトンをリグ階層に変換することでリググラフを作成します。つまり、このFKリグコンポーネントは、各スケルトンジョイントを受け取り、リググラフ内に
TransformObjectノードノードを作成します。その後、TransformObjectノードは、Animateステートでユーザが操作可能なコントロールに変換することができます。
デフォルトで、FKコンポーネントは、すべての作成されたTransformObjectノードに“
bind”タグを追加しますこのタグは、 Tags パラメータで指定されます。その後、bindタグは下流の他のリグコンポーネントによって取得され、リグ内のすべての“ジョイント”(TransformObjectノード)に機能を追加します。Tip
FKコンポーネントはスケルトンをリグ階層に変換するため、キャラクタのリグを構築する時は、これを最初の事前構築済みコンポーネントとすると役に立ちます。
Note
デフォルトでは、FKコンポーネントによって作成されるリグの名前は( Rig セクションの Name パラメータで指定されている)
Base.rigです。このリグの名前を変更しても構いませんが、他のすべての事前構築済みリグコンポーネントのリグ名もデフォルトでBase.rigに設定されているので、ネットワーク内のAPEX Autorig Component SOPチェーン上のすべてのリグ名を更新する必要があることに注意してください。 -
ガイドスケルトンがないので、 Guide Source を
tube.skelに設定します。 -
Settings タブの Output Skeleton パラメータで、出力するスケルトン(この例では
tube.skel)を指定します。 -
Source タブの Skeleton パラメータで、リグ階層を作成するのに使用するスケルトン(この例では
tube.skel)を指定します。 -
リグ上にコントロールを作成するために、 Controls タブの Promote* パラメータには、コントロールに変換したいTransformObjectノードを指定します。APEXパスパターン構文を使用すると、TransformObjectノードのグループを指定することができます。この例では、すべてのコントロールの移動と回転をプロモートしたいので、 Promote T と Promote R を
*に設定します。 -
FKコンポーネントは、リググラフをパックキャラクタフォルダ構造に追加します。Rig Treeビューには以下のパックフォルダ構造が表示されます:
/ -- Base.rig -- tube.skel
以下のAPEXネットワークビューで、FKコンポーネントによって生成されたリググラフを確認することができます(わかりやすくするために、ノードの配置を変更し、色を追加しています)。TransformObjectノードはスケルトンジョイントを表現していて、そのスケルトンジョイント階層に基づいて接続されています。各TransformObjectノードの移動パラメータと回転パラメータはプロモートされています:
FKリグコンポーネントによって生成されたリググラフ TransformObjectノードと
skel::SetPointTransformsノードに関する詳細は、ジオメトリ変形を参照してください。
-
AnimateステートでFK機能を確認します:
-
APEX Autorig Component SOPを選択し、そのDisplayフラグをオンにします。
-
左側のツールバーにある
Animateをクリックするか、ビューポート内でEnterを押します。
AnimateステートでのFK機能
-
ボーン変形 ¶
ボーン変形リグコンポーネントを使用して、FKリググラフにボーン変形ロジックを追加します。ボーン変形を実行するには、まずJoint Capture Biharmonic SOPを使用して、ジオメトリ上にキャプチャウェイトを作成する必要があります。次に、この更新されたジオメトリをスケルトンと一緒にパックキャラクタフォルダ構造に追加します:
他のDCCでは、ウェイトの作成はデフォーマ上で行なうことが多いです。Houdiniでは、ウェイトの作成は変形工程から分離されているため、APEXに入ってリグロジックを作成する前に、正しいウェイトを持つ入力ジオメトリを準備することができます。
-
Pack Folder SOPはチューブジオメトリとスケルトンをパックキャラクタフォルダ構造に追加します:
-
Pack Folder SOPのSource Inputs入力の1つ目の入力は、変形に使用されるチューブジオメトリです。このジオメトリの名前を
tube.shpにします( Name をtube、 Type をshpに設定します)。 -
Pack Folder SOPのSource Inputs入力の2つ目の入力はチューブスケルトンです。このスケルトンの名前を
tube.skelにします( Name をtube、 Type をskelに設定します)。
Note
Pack Folder SOPのSource Inputs入力の順番は、そのPack Folder SOPの Name と Type パラメータの順番に合わせる必要があります。パックキャラクタフォルダ構造のキャラクタ要素の命名に関する詳細は、アニメーション用データを組み立てるを参照してください。
Rig Treeビューには以下のパックフォルダ構造が表示されます:
/ -- tube.shp -- tube.skel
-
-
APEX Autorig Component SOPの
bonedeformは、上流のFKコンポーネントによって作成されたリググラフにボーン変形ロジックを追加します。bonedeformノードで、 Component Source を Bone Deform に設定します。デフォルトで、ボーン変形コンポーネントは( Rig セクションの Name パラメータで設定された)Base.rigにロジックを追加します。 -
Settings タブで、パックキャラクタフォルダ構造内のジオメトリとスケルトンの名前に合わせて以下のパラメータを変更します:
-
Rest Geo =
tube.shp。変形したいキャプチャウェイト付きジオメトリです。 -
Rest Skeleton =
tube.skel。キャプチャウェイトのベースとなる入力スケルトンの名前です。 Rest Skeleton のジョイントは Rest Geo のキャプチャウェイトと一致する必要があります。 -
Output Geo =
tube.shp。表示したい出力ジオメトリの名前です。これは通常、 Rest Geo と同じです。
-
-
ボーン変形コンポーネントがFKリググラフに追加したリグロジックを確認します(紫が追加されたボーン変形ロジックです):
ボーン変形ロジック -
Animateステートでボーン変形を確認します:
IK ¶
この例では、前の例のFKリグから始め、マルチIKリグコンポーネントを使用してIK機能を追加します:
-
IKコントロールのみを操作したいので、FKジョイントをコントロールにプロモートする必要はありません。
fkノードで、 Controls タブの Promote* パラメータからすべてのTransformObjectノードを削除します。 -
APEX Autorig Component SOPの
ikで、 Component Source パラメータを Multi IK に設定します。 -
Guide Source をパックキャラクタフォルダ構造のスケルトン
tube.skelに設定します。 -
Driven タブの Segments を
bindに設定します。ドロップダウンメニューから bind を選択しても構いません。bindは、FKトランスフォームリグコンポーネントによって作成されたTransformObjectノードに事前に追加されたタグです。 Segments パラメータでbindを指定することで、マルチIKコンポーネントはリグ階層内の適切なTransformObjectノードを取得し、それにIK機能を追加します。 -
AnimateステートでIK機能を確認します:
トランスフォームドライバ ¶
トランスフォームドライバリグコンポーネントは、スケルトンの既存のコントロールのトランスフォーム(移動、回転、スケール)を駆動する新しいコントロールを作成するために使用されます。既存のコントロールは基本的に、新しいコントロールに拘束されます。トランスフォームドライバコンポーネントを使用すると、既存のジョイントに異なるピボットと向きを定義することができます。新しいスケルトンコントロールを作成する必要がないため、下流のボーン変形に影響を与えることもありません。
APEXグラフで、トランスフォームドライバコンポーネントは新しいTransformObjectノードを作成し、新規ノードと既存ノードの間に拘束を追加します。新しいノードはスケルトンに追加されません。単に追加コントロールとして、スケルトンジョイントを駆動するために使用されます。
Note
FKトランスフォームコンポーネントはガイドスケルトン上の既存のジョイントからのみコントロールを作成できるのに対し、トランスフォームドライバコンポーネントは新しいコントロールを追加したり、既存のコントロールを変更することができます。また、トランスフォームドライバコンポーネントを使用して、TransformObjectノードを親子化したり拘束することも可能です。例えば、特定のコンポーネントの親子化セットアップを変更したい場合は、トランスフォームドライバを使用して親子化の階層を編集することができます。
この例では、前の例のFKリグに新しいコントロールを追加します:
-
APEX Autorig Component SOPの
transformdriverで、 Component Source パラメータを Transform Driver に設定します。 -
guidesource をパックキャラクタフォルダ構造のスケルトン
tube.skelに設定します。 -
point_0の位置に留まり、point_0の移動と回転を駆動する、トランスフォームドライバコントロールのrootを追加します:-
Settings タブで、 use_t 、 use_r 、 use_s をオンにします。
-
Driven タブで、 driventransforms を
point_0に設定します。これはコントロールによって駆動されるジョイントです。 -
Control タブの driver パラメータで、新しいコントロールの名前を指定します。 driver を
rootに設定します。 -
driverguide を
point_0に設定します。これは新しいrootコントロールの位置です。(新しいrootTransformObjectノードの restlocal パラメータは、point_0の位置に設定されます。) driverguide に何も設定しない場合、新しいコントロールは原点に作成されます。 -
コントロールによって駆動されるトランスフォームコンポーネントを指定します。 makecontrol 、 promotet (移動)、 promoter (回転)をオンにします。
-
Shape タブでコントロールシェイプを設定します。
トランスフォームドライバコントロールがジョイントチェーンのルートに留まります
-
-
point_2の位置に留まり、point_2の移動と回転を駆動する、2つ目のトランスフォームドライバコントロールのtipを追加します。rootトランスフォームドライバコントロールを移動または回転しても、point_2はtipコントロールに拘束されているため、もはや移動しません:-
setups マルチパラメータの隣にある
をクリックして、
tipコントロールに新しいパラメータセットを追加します。 -
Settings タブで、 use_t 、 use_r 、 use_s をオンにします。
-
Driven タブで、 driventransforms を
point_2に設定します。 -
Control タブで、 driver を
tip、 driverguide をpoint_2に設定します。 -
makecontrol 、 promotet 、 promoter をオンにします。
-
Shape タブでコントロールシェイプを設定します。
ジョイントチェーンのrootとtipにあるトランスフォームドライバコントロール -
-
トランスフォームドライバコントロールが、それが駆動しているジョイントとは異なる位置に留まっている場合、そのトランスフォームドライバコントロールは親拘束のように動作します。トランスフォームドライバコントロールを回転させると、駆動されるTransformObjectとそのすべての子がトランスフォームドライバコントロールを中心に回転します。
トランスフォームドライバコントロールがpoint_0に留まり、point_1を駆動します トランスフォームドライバコントロールがpoint_0に留まり、point_2を駆動します トランスフォームドライバコントロールがpoint_2に留まり、point_1を駆動します