On this page |
完全なキャラクタリグは、小さいリグコンポーネントを組み合わせることで構築することができます。 Houdiniに同梱されている事前構築済みリグコンポーネントを使用したり、様々なリグで再利用できる独自のコンポーネントを作成することができます。
Houdiniの事前構築済みリグコンポーネントは、APEX Autorig Component SOPおよび
APEX Rigscript Component SOPから利用可能です。
これらのSOPには、FK、IK、ボーン変形などの機能を追加するリグコンポーネントへのインターフェースが用意されています。
さらに、APEX Rigscript Component SOPを使用すると、1回でキャラクタに適用できる“レシピ”のように機能するリグスクリプト(APEXグラフ)をプロシージャルに構築することができます。
リグスクリプトを使用して、より下位レベルのリグコンポーネントから上位レベルのリグコンポーネントを作成することができます。
このページでは、FK、ボーン変形、IKロジックを3つのジョイントのチューブジオメトリに追加しながら、Houdiniの事前構築済みリグコンポーネントについて説明します。 その後、transformdriverリグコンポーネントを使用して、チューブスケルトン上の既存のコントロールを駆動する新しいコントロールを作成します。
FK ¶
この例では、fktransformリグコンポーネントを使用して、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 パラメータを fktransform に設定します。 このFKリグコンポーネントは、チューブスケルトンをリグ階層に変換することでリググラフを作成します。 つまり、このFKリグコンポーネントは、各スケルトンジョイントを受け取り、リググラフ内にTransformObjectノードを作成します。 その後、そのTransformObjectノードは、Animateステートでユーザが操作可能なコントロールに変換することができます。
Tip
FKコンポーネントはスケルトンをリグ階層に変換するため、キャラクタのリグを構築する時は、これを最初の事前構築済みコンポーネントとすると役に立ちます。
Note
デフォルトでは、FKコンポーネントによって作成されるリグの名前は( Rig セクションの Name パラメータで指定されている)
Base.rig
です。 このリグの名前を変更しても構いませんが、他のすべての事前構築済みリグコンポーネントのリグ名もデフォルトでBase.rig
に設定されているので、ネットワーク内のAPEX Autorig Component SOPチェーン上のすべてのリグ名を更新する必要があることに注意してください。 -
ガイドスケルトンがないので、 guidesource を
tube.skel
に設定します。 -
Settings タブの outputskeleton パラメータで、出力するスケルトン(この例では
tube.skel
)を指定します。 -
Source タブの skeleton パラメータで、リグ階層を作成するのに使用するスケルトン(この例では
tube.skel
)を指定します。 -
リグ上にコントロールを作成するために、 Controls タブの *promotegroup パラメータには、コントロールに変換したいTransformObjectノードを指定します。 APEXパスパターン構文を使用すると、TransformObjectノードのグループを指定することができます。 この例では、すべてのコントロールの移動と回転をプロモートしたいので、 tpromotegroup と rpromotegroup を
*
に設定します。 -
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機能
-
ボーン変形 ¶
bonedeformリグコンポーネントを使用して、FKリググラフにボーン変形ロジックを追加します。
ボーン変形を実行するには、まずJoint Capture Biharmonic SOPを使用して、ジオメトリ上にキャプチャウェイトを作成する必要があります。
次に、この更新されたジオメトリをスケルトンと一緒にパックフォルダ構造に追加します:

他のDCCでは、ウェイトの作成はデフォーマ上で行なうことが多いです。 Houdiniでは、ウェイトの作成は変形工程から分離されているため、APEXに入ってリグロジックを作成する前に、正しいウェイトを持つ入力ジオメトリを準備することができます。
-
Pack Folder SOPはチューブジオメトリとスケルトンをパックフォルダ構造に追加します:
-
Pack Folder SOPの Source Inuputs 入力の1つ目の入力は、変形に使用されるチューブジオメトリです。このジオメトリの名前を
tube.shp
にします( Name をtube
、 Type をshp
に設定します)。 -
Pack Folder SOPの Source Inuputs 入力の2つ目の入力はチューブスケルトンです。このスケルトンの名前を
tube.skel
にします( Name をtube
、 Type をskel
に設定します)。
Note
Pack Folder SOPの Source Inuputs 入力の順番は、そのPack Folder SOPの Name パラメータと Type パラメータの順番に合わせる必要があります。 パックフォルダ構造のキャラクタ要素の命名に関する詳細は、パックキャラクタフォーマットを参照してください。
Rig Treeビューには以下のパックフォルダ階層が表示されます:
/ -- tube.shp -- tube.skel
-
-
APEX Autorig Component SOPの
bonedeform
は、上流のFKコンポーネントによって作成されたリググラフにボーン変形ロジックを追加します。bonedeform
ノードで、 Component を bonedeform に設定します。 デフォルトで、bonedeformコンポーネントは( Rig セクションの Name パラメータで設定された)Base.rig
にロジックを追加します。 -
Settings タブで、パックフォルダ構造内のジオメトリとスケルトンの名前に合わせて以下のパラメータを変更します:
-
restgeo =
tube.shp
変形したいキャプチャウェイト付きジオメトリです。 -
restskeleton =
tube.skel
キャプチャウェイトのベースとなる入力スケルトンの名前です。 restskeleton のジョイントは restgeo のキャプチャウェイトと一致する必要があります。 -
outputgeo =
tube.shp
表示したい出力ジオメトリの名前です。 これは通常、 restgeo と同じです。
-
-
bonedeformコンポーネントがFKリググラフに追加したリグロジックを確認します(紫が追加されたボーン変形ロジックです):
ボーン変形ロジック -
Animateステートでボーン変形を確認します:
IK ¶
この例では、前の例のFKリグから始め、multiikリグコンポーネントを使用してIK機能を追加します:

-
IKコントロールのみを操作したいので、FKジョイントをコントロールにプロモートする必要はありません。
fk
ノードで、 Controls タブの *promotegroup パラメータからすべてのTransformObjectノードを削除します。 -
APEX Autorig Component SOPの
ik
で、 Component パラメータを multiik に設定します。 -
guidesource をパックフォルダ構造のスケルトン
tube.skel
に設定します。 -
スケルトンにタグをセットアップしていないので、 Driven タブの segments は空っぽのままにします。
-
AnimateステートでIK機能を確認します:
トランスフォームドライバ ¶
transformdriverリグコンポーネントは、スケルトンの既存のコントロールのトランスフォーム(移動、回転、スケール)を駆動する新しいコントロールを作成するために使用されます。 既存のコントロールは基本的に、新しいコントロールに拘束されます。 transformdriverコンポーネントを使用すると、既存のジョイントに異なるピボットと向きを定義することができます。 新しいスケルトンコントロールを作成する必要がないため、下流のボーン変形に影響を与えることもありません。
APEXグラフで、transformdriverコンポーネントは新しいTransformObjectノードを作成し、新規ノードと既存ノードの間に拘束を追加します。 新しいノードはスケルトンに追加されません。単に追加コントロールとして、スケルトンジョイントを駆動するために使用されます。
この例では、前の例のFKリグに新しいコントロールを追加します:

-
APEX Autorig Component SOPの
transformdriver
で、 Component パラメータを transformdriver に設定します。 -
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
コントロールの位置です。 (新しいroot
TransformObjectノードの 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を駆動します