On this page |
このページでは、2つの値を加算したり、複数の結果を取得したり、ジオメトリからの情報を取得するといった数値演算のためにAPEXグラフを作成して実行する方法について、段階を追って説明します。このページの例では、以下の基本的な構造を見ていきます:
-
グラフロジックを作成する方法
-
グラフを評価(実行)する方法
2つの値を加算する ¶
この例では、2つの値を加算するグラフの作成方法を紹介しています。データをグラフに入力し、そのグラフの出力を表示する基本的なワークフローについて説明します。
グラフロジックを作成する ¶
2つの値(a
とb
)を加算するロジックを作成します。
グラフを手動で作成する ¶
-
ジオメトリレベルで、ネットワークエディタに
APEX Edit Graph SOPを配置します。
-
APEX Edit Graph SOPを選択したまま、APEXネットワークビューを開きます。APEXネットワークビューでは、APEX Edit Graph SOPにグラフを直接書き込むことができます。
-
APEXネットワークビュー内で、簡単な数値演算を実行するグラフを作成します:
-
グラフ入力ノードと出力ノードを追加します:
-
入力パラメータを受け取るノードを追加します。TABを押してタブメニューを開き、 Input 選択します。すると
__parms__
グラフ入力ノードがグラフに追加されます。 -
タブメニューで Output を選択し、グラフ出力ノードを追加します。
-
-
単純な加算演算を実行するAdd<Float>ノードを追加します。
-
それらのノードを以下のように接続します。
add
ノードの b は可変長ポートなので、複数の接続が可能であり、 b<x> という名前のサブポートが作成されます:APEXネットワークビューでノードを接続
-
この時点では、グラフは、ジオメトリとして表現されたロジックの一部(ピース)でしかありません。グラフの入力は定義されておらず、グラフは評価も計算もされていないため、何の出力も結果もありません。
APEX Scriptを使用してグラフを作成する ¶
-
ジオメトリレベルで、ネットワークエディタにAPEX Script SOPを配置します。
-
以下のスニペットを、APEX Script SOPの Snippet パラメータに追加します:
a = BindInput(Float()) b = BindInput(Float()) result = a + b BindOutput(result)
-
グラフとして表現されたAPEX Scriptスニペットを確認するには、APEXネットワークビューを開きます。ペインの上部で、
New Tabアイコンをクリックして、 New Pane Tab Type ▸ Animation ▸ APEX Network View を選択します。
-
APEX Script SOPの Visualizer セクションで、 Show を Component Script に設定します。
APEX Scriptはグラフ入力の後にNullノードを挿入して、入力タイプが明確に定義されるようにします。値は、未変更のままNullノードを通過します:
グラフとして兵家されたAPEX Scriptコード
入力を定義する ¶
加算演算の入力のa
とb
を定義します。数値入力は辞書形式で格納する必要があるため、基本的に辞書が入力データのコンテナとなります。辞書にはキーと値のペアを格納し、この場合だとa
とb
がキーです。Attribute Adjust Dictionary SOPを使用して、入力パラメータの辞書を作成します:
-
Attribute Adjust Dictionary SOPの Set Values セクションで、 Number of Entries の横にある
をクリックし、2個のエントリを作成します。
-
1つ目のエントリを以下のように設定します:
-
Key :
a
-
Type : Float (float値を加算します)
-
Value : 値を
a
に割り当てます。
-
-
2つ目のエントリを以下のように設定します:
-
Key :
b
-
Type : Float
-
Value : 値を
b
に割り当てます。
-
デフォルトでは、 Attribute Name がparms
、 Attribute Class が Detail に設定されているため、parms
という名前のDetailアトリビュートが作成されます。この新しいparms
アトリビュートは、Geometry Spreadsheetで確認することができます:
-
ペインの上部で、
New Tabアイコンをクリックして、 New Pane Tab Type ▸ Inspectors ▸ Geometry Spreadsheet を選択します。
-
上部のツールバーから
Detailを選択します。
グラフロジックを評価する ¶
これでグラフロジックとグラフ入力が定義されました。グラフを呼び出す(評価する)には、APEX Invoke Graph SOPを使用します。
-
追加したノードを接続します:
-
APEX Invoke Graph SOPの1番目の入力はAPEXグラフを受け取ります。ネットワークエディタで、(APEXグラフを含んでいる)APEX Script SOPの2番目の出力をAPEX Invoke Graph SOPの1番目の入力に接続します。グラフロジックを手動で作成している場合、APEX Script SOPをAPEX Edit Graph SOPに置き換えます。
-
APEX Invoke Graph SOPの2番目の入力は、入力として使用したいデータを受け取ります。辞書形式の数値でも、通常のジオメトリでも構いません。Attribute Adjust Dictionary SOPをAPEX Invoke Graph SOPの2番目の入力に接続します。
グラフを使用して2つの数値を加算するネットワーク -
-
APEX Invoke Graph SOPで、入力を指定します:
-
Input Bindings の横にある
をクリックして、入力を追加します。
-
デフォルトで、 Dictionary To Bind はオンで、
parms
に設定されています。Attribute Adjust Dictionary SOPを使用してparms
という名前の入力を辞書として定義しているので、これは既に望ましい設定になっています。
-
-
APEX Invoke Graph SOPで、取得する出力を指定します:
ここでは(ジオメトリではなく)数値を取得したいので、 Output Dictionary Bindings の横にある
をクリックして、取得したい出力を指定します。出力は辞書形式で格納されます。
-
Apex Outputs Group は、グラフ内の出力ノードの名前です。ここでは、
output
です。 -
Output Attrib には、出力される辞書の名前(
output_parms
)を設定します。
この新しい
output_parms
辞書に計算結果が格納されます。Geometry Spreadsheetの上部のツールバーからDetailを選択することで、これを確認することができます。
output_parms
辞書では、result
(グラフのoutput
ノードのポート名)キーの値にa
+b
が設定されています。APEX Invoke Graph SOPはAPEXグラフのロジックを評価し、その結果を返します。Attribute Adjust Dictionary SOPで
a
やb
の値を変更すると、そのAPEX Invoke Graph SOPで計算された出力の辞書が新しい合計値に更新されます。 -
2つの結果を取得する ¶
これから、前の例のグラフロジックを使用し、元の結果に対して別の演算を実行して2つの結果を取得したいと思います。
グラフロジックを作成する ¶
グラフを手動で作成する ¶
-
APEXネットワークビューで、以下のグラフを作成します。
divide
ノードとoutput
ノードのサブポート名は変更しています。divide
ノードの b ポートは可変長入力です:2つの結果を出力するグラフロジック -
divide
ノードで値を設定します:-
divide
ノードを選択し、Pを押してノードパラメータウィンドウを表示します。 -
divide
は a を b で除算します。ノードパラメータウィンドウで、 a の値を1.0
などに設定します。denominator
は前の加算演算からの値です。
-
APEX Scriptを使用してグラフを作成する ¶
-
以下のスニペットを、APEX Script SOPの Snippet パラメータに追加します:
a = BindInput(Float()) b = BindInput(Float()) add_result = a + b add_divide_result = 1.0/add_result # 複数の結果を出力します BindOutput(add_result, add_divide_result)
-
APEXネットワークビューで、グラフとしてAPEX Scriptスニペットを表示します(赤のノードが新たに追加したノードです)。これで、
output
ノードの2つのポートが接続されました:2つの結果を出力するグラフロジック
グラフロジックを評価する ¶
グラフ入力は変わっていないため、Attribute Adjust Dictionary SOPでは何も変更する必要はありません。
グラフ出力に関しては、APEX Invoke Graph SOPは前と同じようにグラフのoutput
ノードから取得します。違いは、1つの結果( add_result の2つの入力の合計値)だけでなく、2つ目の結果( add_divide_result の除算結果)も取得することです。SOPで、両方の結果が1つの辞書に格納されます。
Geometry Spreadsheetで、グラフのoutput
ノードから取得された値を確認します:
-
ネットワークエディタでAPEX Invoke Graph SOPを選択します。
-
Geometry Spreadsheetで、上部のツールバーから
Detailを選択します。
-
output
ノードから、 add_result と add_divide_result の2つの値が取得されています。
Note
出力される辞書には、APEX Invoke Graph SOPの Apex Outputs Group パラメータで指定したグラフ出力ノードの すべて の結果が含まれます。
部分評価 ¶
この例では、 部分評価 という考え方を紹介します。要求された出力のみを取得します。そしてその出力のみを計算して、残りのグラフロジックは無視します。
グラフロジックを作成する ¶
前の例の加算と除算のグラフから開始し、もう1つ出力ノードを追加し、元の出力ノードと違う名前を付けます:
-
以下のスニペットを、APEX Script SOPの Snippet パラメータに追加します:
a = BindInput(Float()) b = BindInput(Float()) add_result = a + b add_divide_result = 1.0/add_result multiply_result = 2.0 * add_divide_result BindOutput(add_result, add_divide_result, __name='output') BindOutput(multiply_result, __name='output2')
__name
は、ノードに名前を付けるのに使用する特殊関数の引数です。 -
APEXネットワークビューで、グラフとしてAPEX Scriptスニペットを表示します(赤のノードが新たに追加したノードです):
グラフロジックの部分評価
グラフロジックを評価する ¶
取得された結果を確認します:
-
ネットワークエディタでAPEX Invoke Graph SOPを選択します。
-
Geometry Spreadsheetで、上部のツールバーから
Detailを選択します。
グラフ内に別の出力ノードがあっても、output
ノードからの値のみが取得されます。ここでは部分評価が起きています。グラフロジックを介してoutput
ノードへのパスのみが実行されます。output2
の値を計算するロジックは無視されます。
新しい出力ノードのoutput2
からも値を取得するには:
-
APEX Invoke Graph SOPで、 Output Dictionary Bindings の横にある
をクリックし、取得する出力ノードをもう1つ追加します。
-
新しい Output Dictionary Bindings エントリで:
-
Apex Outputs Group を
output2
に設定します。ドロップダウンボックスからoutput2
を選択することができます。 -
Output Attrib には、出力される辞書の名前(
output2_parms
)を設定します。
-
-
取得された値を確認します:
-
ネットワークエディタでAPEX Invoke Graph SOPを選択します。
-
Geometry Spreadsheetで、上部のツールバーから
Detailを選択します。
2個の出力ノードの
output
とoutput2
からの値が計算され、取得され、それらの結果がoutput_parms
とoutput2_parms
という2つの辞書に格納されています。 -
数値演算に基づいてジオメトリを変更する ¶
この例では、加算演算の結果に基づいてボックスジオメトリのサイズを変更する方法を説明します。
グラフロジックを作成する ¶
-
以下のスニペットを、APEX Script SOPの Snippet パラメータに追加します:
a = BindInput(Float()) b = BindInput(Float()) result = a + b # add_resultはボックスのサイズに影響を与えます geo = apex.sop.box(scale=result) BindOutput(result, geo)
-
APEXネットワークビューで、グラフとしてAPEX Scriptスニペットを表示します。加算演算の合計値はボックスのサイズに影響します:
ボックスジオメトリのサイズに影響する数値演算
グラフロジックを評価する ¶
今回は、数値ではなくジオメトリを取得します。ボックスを表示するには、output
ノードでボックスジオメトリを取得する必要があります:
-
APEX Invoke Graph SOPで、 Bind Output Geometry をオンにし、その値を
output:geo
(<name_of_output_node>:<geometry_on_output_node>
)に設定します。 -
APEX Invoke Graph SOPのDisplayフラグをオンにし、ビューポートにボックスを表示します。
-
Attribute Adjust Dictionary SOPを選択し、パラメータエディタにグラフ入力パラメータの
a
とb
を表示します。ただし、APEX Invoke Graph SOPのDisplayフラグはオンのままにします。Attribute Adjust Dictionary SOPでa
とb
の値を調整すると、ビューポートでボックスのサイズが変わります。入力パラメータを調整し、ジオメトリを表示するネットワーク
ジオメトリから情報を取得して使用する ¶
ジオメトリから情報を取得し、その情報を使用して追加で演算を実行することができます。この例では、ボックスのコーナーに球を配置します。入力パラメータを変更すると、ボックスと球体の両方のサイズが変化します。
グラフロジックを作成する ¶
前の例からボックスジオメトリのグラフを追加します。
-
以下のスニペットを、APEX Script SOPの Snippet パラメータに追加します:
a = BindInput(Float()) b = BindInput(Float()) # add_resultはボックスのサイズに影響を与えます add_result = a + b box_geo = apex.sop.box(scale=add_result) # box_pointをボックス上のポイント0(コーナーの1つ)の # 位置(アトリビュート'P')に設定します box_point = box_geo.pointAttribValue(0, 'P', valuetype=Vector3) # multiply_resultは球のサイズに影響を与えます multiply_result = 0.5 * add_result # 球のトランスフォーム(t)はbox_pointに設定されているため # 球の中心はbox_pointになります sphere_geo = apex.sop.sphere(t=box_point, scale=multiply_result) # ボックスと球のジオメトリを結合します box_sphere_geo = apex.geo.mergePacked(box_geo, sphere_geo) BindOutput(add_result, box_geo, box_point, box_sphere_geo)
-
APEXネットワークビューで、グラフとしてAPEX Scriptスニペットを表示します(赤のノードが新たに追加したノードです)。球はボックスジオメトリ内の特定のコーナーに配置され、球とボックスは1ジオメトリとして結合さ、出力されます:
ボックスジオメトリから情報を取得し、追加の演算を実行
グラフロジックを評価する ¶
ボックスと球を一緒に表示するには、output
ノードからボックスと球が結合されたジオメトリを取得する必要があります:
-
APEX Invoke Graph SOPで、 Bind Output Geometry をオンにし、その値を
output:box_sphere_geo
(<name_of_output_node>:<merged_geometry_on_output_node>
)に設定します。 -
APEX Invoke Graph SOPのDisplayフラグをオンにし、ビューポートにボックスと球を表示します。
-
Attribute Adjust Dictionary SOPを選択し、パラメータエディタにグラフ入力パラメータの
a
とb
を表示します。ただし、APEX Invoke Graph SOPのDisplayフラグはオンのままにします。Attribute Adjust Dictionary SOPでa
とb
の値を調整すると、ビューポートでボックスと球のサイズが変わります。ボックスのポイント上に留まる球
How-to ¶
To... | Do this |
---|---|
グラフから数値を取得する |
APEX Invoke Graph SOPで、取得する値を指定します:
上部のツールバーから 2つの値を加算する例を参照してください。 |
グラフからジオメトリを表示する |
ジオメトリを変更する例を参照してください。 |