On this page
この機能はまだ開発中です。現在の機能は未完成で変更される予定であり、 ドキュメントが手薄だったり、なかったりします。 これを使用するときは、そのことに我慢してください。

APEX(All-Purpose EXecution)は、グラフ評価フレームワークで、グラフを構築および実行し、その結果を出力します。KineFXでは、キャラクタリグの表現にAPEXグラフが使用されます。

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

APEXグラフでの数値演算とジオメトリ

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ネットワークビューのグラフ
ビューポートに表現されたAPEXグラフ

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

APEXネットワークビューのグラフ
ビューポートに表現されたAPEXグラフ

グラフとジオメトリのコンポーネントには、次のような相関関係があります:

グラフ(APEXネットワークビューで視覚化)

ジオメトリ(ビューポートで視覚化)

Nodes

ポイント

ワイヤー

ラインプリミティブ

接続したノードの入出力ポート

頂点

グラフ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グラフをサブグラフライブラリファイルに保存するとき、そのグラフ上に必ずname Detailアトリビュートを作成してください。APEXネットワークビューで作成されているサブグラフノードは、このnameアトリビュートで定義されます。

アンパックグラフをサブグラフライブラリに保存する
  1. Attribute Create SOPを使用してnameアトリビュートを作成します:

    • Namenameに設定します。

    • ClassDetail に設定します。

    • String パラメータには、サブグラフに付けたい名前を指定します。これが、APEXネットワークビューのTABメニューでサブグラフを検索するときに表示される名前です。

  2. ROP Geometry Output SOPを使用して、サブグラフをサブグラフライブラリファイルに保存します:

    • Output File パラメータに、そのサブグラフライブラリ(.bgeo)ファイルのパスとファイル名を設定します。このサブグラフライブラリファイルは、必ずHOUDINI_PATH内のapexgraphディレクトリ(例えば、$HIP/apexgraph/test.bgeo)に保存してください。

    • Save to Disk をクリックします。

その保存されたサブグラフを読み込むには:

  1. Pythonシェルを開き( Windows ▸ Python Shell )、以下のコマンドを実行します:

    import apex
    apex.Registry().reloadSubgraphs()
    
  2. ネットワークエディタ内でAPEX Edit Graph SOPを選択するか、新しくAPEX Edit Graph SOPを配置します。これで、APEXネットワークビュー内でTABメニューを使用して、そのサブグラフが検索できるようになります。

パックグラフをサブグラフライブラリファイルに保存する

Pack Folder SOPを使用して、グラフをパックフォルダ構造に追加します。このPack Folder SOPは、グラフ毎にname Primitiveアトリビュートを作成します:

パックグラフをサブグラフライブラリに保存する
  1. Pack Folder SOPで:

    • Pack Output トグルを有効にして、接続されたサブグラフをパック化します。

    • 既にパックされているサブグラフにさらにパックレベルが追加されないように、 Only Pack Unpacked トグルを有効にします。

    • Pack Folder SOPに入力が接続されると、自動的に Name パラメータに値が入力されます。このPack Folder SOPの入力の順番が Name パラメータにリストされている順番に呼応しています。

      Name パラメータには、各サブグラフに付けたい名前を設定します。これは、APEXネットワークビューのTABメニューでサブグラフを検索するときに表示される名前です。 Type パラメータを空っぽのままにすると、そのサブグラフノード名には拡張子が何も追加されません。

  2. ROP Geometry Output SOPを使用して、サブグラフをサブグラフライブラリファイルに保存します:

    • Output File パラメータに、そのサブグラフライブラリ(.bgeo)ファイルのパスとファイル名を設定します。このサブグラフライブラリファイルは、必ずHOUDINI_PATH内のapexgraphディレクトリ(例えば、$HIP/apexgraph/test.bgeo)に保存してください。

    • Save to Disk をクリックします。

その保存されたサブグラフを読み込むには:

  1. Pythonシェルを開き( Windows ▸ Python Shell )、以下のコマンドを実行します:

    import apex
    apex.Registry().reloadSubgraphs()
    
  2. ネットワークエディタ内でAPEX Edit Graph SOPを選択するか、新しくAPEX Edit Graph SOPを配置します。これで、APEXネットワークビュー内でTABメニューを使用して、そのサブグラフが検索できるようになります。

すべてのサブグラフインスタンスを更新する

サブグラフに変更を加えた後は、以下の操作によって、すべてのサブグラフインスタンスが更新されます:

  1. サブグラフをサブグラフライブラリ(.bgeo)ファイルに保存します。ROP Geometry Output SOPで、 Save to Disk をクリックします。

  2. Pythonシェルを開き( Windows ▸ Python Shell )、以下のコマンドを実行します:

    import apex
    apex.Registry().reloadSubgraphs()
    

サブネットを作成する

  1. APEXネットワークビュー内でサブネットに格納したいグラフノードをボックス選択します。

  2. 選択されたノードをクリックして、 ▸ Collapse to Subnet を選択します。

サブネットのポート名を変更する

サブネットの中に入って、グラフinputノードまたはoutputノードのポート名を変更します。ポート名をクリックすることで、そのポートの名前を変更することができます。

Note

名前を変更できるのはサブポートのみです。“標準”ポートの名前は変更できません。接続を Variadic Port(可変長ポート) に作成すると、サブポートが作成されます。詳細は、ポートを参照してください。

ポート

APEXネットワークビューでは、ノードの ポート 間にワイヤーを作成することで、それらのノードを接続することができます。ポート値は、ポート接続、ノードパラメータウィンドウで設定された値、特定のデフォルト値のどれかで決まります。ノードパラメータウィンドウは、ポートの値を編集するのに使用します。ノードパラメータウィンドウを開くには、グラフノードを選択して P を押します。

ポート

接続されたポート

接続からの値は、ノードパラメータウィンドウで設定された値を上書きします。

未接続のポート

未接続のポート値は、ノードパラメータウィンドウで設定された値、それに呼応するSOP Verbノード、APEX内部で設定されたデフォルト値のどれかで決まります。

ノードパラメータウィンドウ

ノードパラメータウィンドウで表示されたポートのうち、その値フィールドの背景が黒いポートは、Geometry Spreadsheet内のparms辞書Pointアトリビュートに存在します。以下の場合に、ポートがparms辞書Pointアトリビュートに出現します:

  • ノードパラメータウィンドウでポート値を直接設定した場合。

  • (例えば、APEX Edit Graph SOPImport SOP Nodes ボタンを使用して)SOPノードをAPEXグラフにインポートし、(パラメータエディタで)そのSOPノードにデフォルトでないSOPパラメータ値が指定された場合。

ノードパラメータウィンドウで表示されたポートのうち、その値フィールドの背景が灰色のポートは、parms辞書Pointアトリビュートには存在しません。これらのポート値は、以下に基づいて設定されます:

  • SOP Verbノードの場合、そのポートには、そのSOP Verbノードのデフォルトパラメータ値が設定されます。

  • 非SOP Verbノードの場合、そのポートは、APEX内部で定義されているデフォルト値に初期化されます。

Note

ノードパラメータウィンドウに表示されている値は、必ずしもそのポートで使用される値とは限りません。ポートがGeometry Spreadsheet内のparms辞書Pointアトリビュートに存在しなかった場合、ノードパラメータウィンドウのそれに呼応する値は使用されません。

異なるポートカラーは、そのポートの異なるデータタイプを表しています。また、ポートには、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ネットワークビューに表示したいのであれば、そのグラフのピン留めを解除してください。

グラフノードをレイアウトする

グラフ(例えば、APEX Edit Graph SOP)をAPEX Layout Graph SOPに接続します。

グラフのワイヤーを削除する

Yを押しながらワイヤー上をドラッグします。

または

ワイヤーを選択してDeleteを押します。

KineFX

概要

キャラクタ要素の準備

APEXグラフを使用したリギング

APEXスクリプトを使用したリググラフの構築

リグコンポーネントを使用したリギング

ビューポート内でアニメーションを付ける

SOPベースのアニメーション

変形

アニメーションのリターゲット

H20以前

ペイン

別表