筆者環境
・Bifrost2.5.0.0
・Maya2020.2
今回はノードポートについて見ていきましょう。
(当ブログで[]でくくっているものはBifrostGraphEditor内のノード名です)
ポートカラー
一般的なノードエディタと同じくBifrostもポートのカラーでデータタイプを判別できるようになっています。例えば整数は水色、boolはオレンジ、vectorは黄緑、matrixはピンクです。
その他のカラーは公式のドキュメントを参照してください。
ポートアイコン
オートタイプポート
ポートにハロ(ヘイロー)と呼ばれる線がついている場合は、複数のデータタイプをサポートしていることを意味します。どのタイプをサポートしているかはノードによって異なり、処理が実行できるタイプであれば入力は有効になります。例えばベクトルの長さを計算する[length]ではvectorタイプの入力は有効になりますが、matrixやbool、geometryタイプを入力するとエラーになります。
ポートのデータタイプを指定したい場合は、ハロのついたポート上の右クリックメニュー > ValueTypesのリストからタイプを選びます。データタイプを確定したオートポートからはハロがなくなります。
ノードによっては下図のように灰色になっているオートポートがあります。これはユーザーによるタイプ指定を待っている状態なのでこのままではノードは動作しません。データタイプを明示化することでノードが有効になります。
.
フィードバックポート
この設定を施した出力ポートのデータは、グラフの次回の実行時に入力データとして再利用されるようになります。
例えば以下のグラフは[input]の値にMayaシーンのカレントフレームを加算して[output]に出力するグラフです。[input]の値(0.0)に対して加算するだけなので[output]の値は常にカレントフレームと同数になります。
出力値の算出は「0.0+現在のフレーム」の状態ですが、フィードバックポートを使ってフレーム数を加算し続けるグラフに変更してみましょう。
ポートの右クリックメニュー>SetPortFeedbackからリンクしたいポートを選択します。
フィードバックを設定したポートには円画像のポートアイコンが付きます。
これによって[output]の値はキャッシュされ[input]のポートに返されます。ウォッチポイントで値を確認してみると前回の[output]の値(8)が[input]に返っていますね。
処理は「前回の結果+現在のフレーム」となります。
この機能は永続的な加算・減算などの処理以外にも様々な使い道があります。例えば初期化を行ったソルバーをキャッシュする、算出コストの高いデータをキャッシュしておくなどパフォーマンスの最適化を行う上で重要な機能です。
配列データポート
配列(array)データを扱うポートはハットアイコンと呼ばれる形状をしています。
例えば下図はキューブメッシュを入力し、[get_point_position]を接続したグラフです。[get_point_position]はメッシュの全ての頂点位置を取得するノードなので、出力ポートは黄緑色(Vector3タイプ)のハットアイコン(配列データ)になっていますね。念のためウォッチポイントで確認してみると、配列数はキューブの頂点数と同じ”8”になっています。
配列を扱う基本的なノードは以下の通りです。
配列からデータを1つ抜き出す
- [get_from_array]
- [first_in_array]
- [last_in_array]
配列にデータをセットする
- [set_in_array]
配列データの要素数を取得する
- [array_size]
配列データの要素数を変更する
- [resize_array]
新規で配列データを構築する
- [build_array]
[build_array]には単体の値だけでなく配列データも入力することが可能で、接続された順番に自動的に単一の配列データとして解釈されます。
Fan-in
Mayaのノードように入力ポート上で配列データを作成する方法もあります。
配列ポートの右クリックメニューからFan-inをONにすると[…]のポートアイコンが付き、ポート上で配列データの構築が可能な状態になります。
[build_array]と同じくFan-inへの接続順番が配列要素の並び順になります。
★注意点
ハロのついた(=オートタイプの)状態ではデータタイプが確定していないためFan-inに出来ません。データタイプの指定を行いハロを外すことでFan-inが設定可能になります。
ポートアイコンという面白い機能の理解が進むと、これがグラフの可読性の向上に大きく寄与していることに気付いてくると思います。
配列データの扱い方がわかったので、次は配列の各要素に順番に処理を行いたくなりますよね。
次回「ループの作り方 【前半】オートループ」ではノードエディタの鬼門であるループ処理について見ていきます。

高島 正規
テクニカルアーティスト
長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。