On this page |
APEX(All-Purpose EXecution)は、グラフ評価フレームワークで、グラフを構築および実行し、その結果を出力します。KineFXでは、キャラクタリグの表現にAPEXグラフが使用されます。
グラフはロジックのピースであり、評価時に特定のタスクを実行します。グラフを構築して、より複雑な機能を実行することもできます。例えば、キャラクタ全体の挙動を決めたり、スケルトンのFK階層を組み上げたり、ジオメトリ変形のロジックを組むことが可能です。グラフは、入力パラメータの形式でデータを取り込み、そのデータに対して演算を実行し、データを出力として使用できるようにします。グラフ内では、ジオメトリと他のタイプを一緒に制御することができます。例えば、スケルトンジョイントのトランスフォームに対して、数値演算を1つのグラフ内で行なうことができます:

SOPコンテキストでは、APEXグラフはジオメトリのピースになっています。APEXグラフで表現されるリグロジックは、SOPネットワーク内で構築され、そのAPEXグラフがSOPノードからSOPノードへ渡されると、ロジックの一部がAPEXグラフに追加、変更されていきます。APEXグラフの構築が完了すると、(APEX Invoke Graph SOPまたはPython SOPを使用して)あなたが選択したネットワーク上の場所で、または、ビューポートで特定のアクションを介して、リグロジックが評価されます。
このリグロジックの 遅延評価 という考え方により、リグロジックピースをプロシージャルに構築し、それらのピースを組み立てることができます。リグを何度も評価したり計算する必要がないため、パフォーマンスが大幅に向上します。いつ、どこでリグロジックを評価するかを選択することができるのも遅延評価の特長です。以下の例は、リグロジックをキャラクタに追加する2通りの方法を示しています。どちらのケースも、リグロジックとリグ評価が明確に区別されています:

APEXは、SOP下のレイヤーに居座り、どのネットワークコンテキストにも縛られていません。Python API、他のAPEXグラフ、SOPを使用して、APEXグラフグラフを構築、操作、実行することができます。将来的には、APEXグラフにアクセスしてそれを利用できる他のコンテキストが登場する可能性があります。

Note
VOPやVEXを使い慣れたユーザにとって、APEXはVEXより上位で、SOPより下位の、中レベルのビジュアルプログラミングフレームワークです。VOPで使える型は、VEXが理解できる型に制限されています。APEXは、実質的には(拡張可能なタイプシステムを介して)より多くの型に対応したプロシージャルなVOPです。
APEXグラフが出力できるデータのタイプは、そのAPEXグラフが実行されているコンテキストによってのみ制限されます。APEXグラフをSOPで実行する場合、そのAPEXグラフはジオメトリ、さらには、そのジオメトリ上の辞書アトリビュートに格納可能などんなデータも出力することができます。APEXグラフをPythonで実行する場合、そのAPEXグラフはPythonの型にキャスト(型変換)可能なデータを出力することができます。
グラフの視覚化 ¶
APEXネットワークビューは、APEXグラフの視覚化に使用するUIです。APEXネットワークビューを開くには、ペインの上部にある New Tabアイコンをクリックし、 New Pane Tab Type ▸ Animation ▸ APEX Network View を選択します。
APEX Edit Graph SOPにいたまま、APEXネットワークビューで手動でグラフを構築することもできます。数値演算用のグラフでいくつか例を紹介しています。
グラフ構造はジオメトリとして表現され、そのグラフノードはビューポートではポイントとして表現され、ノード間の接続はポイント間のラインとして表現されます。以下の例では、グラフノードとその接続の位置とカラーがそのままビューポート内のポイントおよびラインに関連付けられています:


グラフノードの位置やカラーが変化すると、ビューポートのジオメトリに反映されます:


グラフとジオメトリのコンポーネントには、次のような相関関係があります:
グラフ(APEXネットワークビューで視覚化) |
ジオメトリ(ビューポートで視覚化) |
---|---|
ポイント |
|
ワイヤー |
ラインプリミティブ |
接続したノードの入出力ポート |
頂点 |
グラフinputノードの入力パラメータ |
ジオメトリ上に格納されたパラメータ |
グラフノード、サブグラフ、サブネット ¶
グラフノードは特定の演算を実行し、そのグラフノードはAPEX関数、Verb(動詞)、サブグラフ、サブネットのどれかで表現することができます。
APEX関数
APEX関数は、入力ポートに接続されているものに対して特定の演算を実行します。
Verb
VerbはOPノードの基本演算部分です。これは、キャッシュ化、入力の読み込み、パラメータの評価といったノードに関係する他の処理を含んでいません。例えば、Joint Deform SOPはbonedeform VerbのHDAラッパーなので、APEXグラフ内ではJoint Deformを使用できませんが、bonedeformは使用できます。
サブグラフ
サブグラフはロックされたグラフで、HDAと同様に、サブグラフを修正すれば、そのサブグラフのすべてのインスタンスが修正されます。サブグラフの例を挙げると、SmoothIKノードがそうです。
サブグラフは、.bgeo
ジオメトリファイル形式で サブグラフライブラリ として保存します。そのサブグラフライブラリは、以下の構造を持ちます:
-
単一のアンパックAPEXグラフで、そのサブグラフ名は
name
Detail アトリビュートで定義されています。または
-
いくつかのパックジオメトリプリミティブで、それぞれのパックプリミティブにAPEXグラフが含まれています。パックプリミティブ毎に、そのサブグラフ名がトップレベルの
name
Primitive アトリビュートで定義されています。
サブグラフの.bgeo
ファイルは、@/apexgraph
ディレクトリから読み込まれます。@
はHOUDINI_PATH内のディレクトリに展開されます。
サブネット
サブネットは、複数のグラフノードを単一ノード内にカプセル化したコンテナです。これによって、サブネット内部に含まれているグラフが簡素化され可読性が良くなります。同じ中身を持つサブネットをいくつも作成した場合、それらのサブネットの1つを更新しても他のサブネットには影響しません。
To... | Do this |
---|---|
アンパックグラフをサブグラフライブラリファイルに保存する |
アンパックAPEXグラフをサブグラフライブラリファイルに保存するとき、そのグラフ上に必ず ![]()
その保存されたサブグラフを読み込むには:
|
パックグラフをサブグラフライブラリファイルに保存する |
![]()
その保存されたサブグラフを読み込むには:
|
すべてのサブグラフインスタンスを更新する |
サブグラフに変更を加えた後は、以下の操作によって、すべてのサブグラフインスタンスが更新されます:
|
サブネットを作成する |
|
サブネットのポート名を変更する |
サブネットの中に入って、グラフinputノードまたはoutputノードのポート名を変更します。ポート名を Note 名前を変更できるのはサブポートのみです。“標準”ポートの名前は変更できません。接続を Variadic Port(可変長ポート) に作成すると、サブポートが作成されます。詳細は、ポートを参照してください。 |
ポート ¶
APEXネットワークビューでは、ノードの ポート 間にワイヤーを作成することで、それらのノードを接続することができます。ポート値は、ポート接続、ノードパラメータウィンドウで設定された値、特定のデフォルト値のどれかで決まります。ノードパラメータウィンドウは、ポートの値を編集するのに使用します。ノードパラメータウィンドウを開くには、グラフノードを選択して P を押します。
ポート |
値 |
---|---|
接続されたポート |
接続からの値は、ノードパラメータウィンドウで設定された値を上書きします。 |
未接続のポート |
未接続のポート値は、ノードパラメータウィンドウで設定された値、それに呼応するSOP Verbノード、APEX内部で設定されたデフォルト値のどれかで決まります。 ![]() ノードパラメータウィンドウで表示されたポートのうち、その値フィールドの背景が黒いポートは、Geometry Spreadsheet内の
ノードパラメータウィンドウで表示されたポートのうち、その値フィールドの背景が灰色のポートは、
Note ノードパラメータウィンドウに表示されている値は、必ずしもそのポートで使用される値とは限りません。ポートがGeometry Spreadsheet内の |
異なるポートカラーは、そのポートの異なるデータタイプを表しています。また、ポートには、Variadic Port(可変長ポート)とIn-Place Port(インプレースポート)の2つの特別なタイプが存在します:
Variadic Port(可変長ポート)
可変長ポートには複数の接続を作成することができ、ノード上に サブポート が作成されます。いくつかのノード上に存在する next ポートがこの可変長ポートの例です。他にも特定のノード上に別の可変長ポートがあります。例えば、Addノードの b ポート、skel::GetPointTransformsノードやskel::SetPointTransformsノードの transforms ポートがそうです。
Note
名前を変更できるのはサブポートのみです。“標準”ポートの名前は変更できません。サブポート名をクリックすることで、そのサブポートの名前を変更することができます。
In-Place Port(インプレースポート)
インプレースポートの値は、コピーを作成せずに更新されます。インプレースポートは正方形のマークで識別できます:

How-to ¶
To... | Do this |
---|---|
グラフノードのパラメータ値を変更する |
グラフノードを選択し、Pを押すとAPEXノードパラメータウィンドウが表示されます。 |
グラフノードのサブポート名を変更する |
サブポート名を |
APEXネットワークビュー内で特定のグラフを可視のままにする |
APEXネットワークビュー内の上部にあるツールバーの ネットワークエディタ内で選択されているSOPノードのグラフをAPEXネットワークビューに表示したいのであれば、そのグラフのピン留めを解除してください。 |
グラフノードをレイアウトする |
グラフ(例えば、 |
グラフのワイヤーを削除する |
Yを押しながらワイヤー上を または ワイヤーを選択してDeleteを押します。 |