[Omniverse] Script Node : OmniGraphでPythonスクリプトを埋め込む

OmniGraphではノードとして独自のPythonスクリプトを埋め込むことができます。
デフォルトではこのノードは使用できず、Extensionの「Script Node」をOnにする必要があります。
この機能により足りないノードは追加することができるようになり、大部分のプログラムをOmniGraphだけで実装してしまうことができるようになります。

USD Composer 2023.2.3で確認しました。

Script Nodeを有効にする

[Window]-[Extensions]を選択し、SCRIPT NODEを検索してOnにします。

このScript Nodeを使用して、単純な整数値の加算のノードを作ってみましょう。

Action Graphを作成

Stageウィンドウで右クリックしポップアップメニューを表示。
Create – Visual Scripting – Action Graphを選択します。

Stageウィンドウ上で作成されたActionGraphを選択し、右クリップポップアップメニューからOpen Graphを選択してAction Graphウィンドウを表示します。

Script Nodeを作成

Action Graphウィンドウ左端のNodesの一覧を見ると、Script – Script Nodeが追加されているのを確認できました。

このScript Nodeをグラフにドラッグ&ドロップします。
Script Nodeをグラフで選択すると、PropertyウィンドウでPythonコードを入力できるUIが表示されています。

初期値のコードは以下のように記載されています。

def setup(db: og.Database):
    pass

def cleanup(db: og.Database):
    pass

def compute(db: og.Database):
    return True

ここのcomputeに処理を記載することで、カスタムノードとして使用できるようになります。

このノードはint型の加算を行うものとし、以下のinput/outputを持たせるようにしました。

名前 用途
a input int
b input int
result output int

inputを指定

Script Nodeの入力を指定します。
グラフでScript Nodeを選択し、PropertyウィンドウのAdd Attributeボタンを押します。

ここでinput/outputのノード名、型を指定できます。

ここで、a(int型)、b(int型)の2つのinputを追加しました。
これでノードではinputとしてA,Bが表示されました。

outputを指定

inputのときと同様にAdd Attributeボタンを押して、result(int型)をoutputとして追加しました。
これでノードではoutputとしてResultが表示されました。

コードを記述

Script Nodeを選択したときのPropertyウィンドウで、
コードのcomputeに処理をPythonで記載します。

引数のdbは「db.inputs.属性名」、「db.outputs.属性名」としてそれぞれのinputとoutputにアクセスできます。
以下のように記載すれば加算になります。

def compute(db: og.Database):
    db.outputs.result = db.inputs.a + db.inputs.b
    return True

動作確認

定数の数値を与えるためにConstant intノードを2つ配置します。
それぞれに値を入れています。
これをScript Nodeのinputのaとbにつなぎました。

aに12、bに7を入れてみました。

Propertyウィンドウでは以下のように表示されています。

OnTickをつないでPlay

このOmniGraphはAction Graphですので、実行のトリガーをOn Tickノードで与えます。

これでPlayすると、Script NodeのPropertyのoutputsに結果が入りました。

これで、カスタムノードを配置できるようになりました。
なお、このノードはすべて1つのusdファイルに保存されます。
別途Extensionを用意する必要はないため可搬性に優れていますね。