[Omniverse] Action Graphを使う – その2 : ビューポートへのオーバレイ

Action Graphではユーティリティ的なノードも豊富なため、いろいろ掘ってみました。
ノードごとの説明については
ドキュメントの「OmniGraph Node Library」が参考になりそうです。
https://docs.omniverse.nvidia.com/app_create/prod_extensions/ext_omnigraph/node-library.html

また「New OmniGraph nodes in Create 2022.3」にも新たに追加されたノードが説明されていました。
https://docs.omniverse.nvidia.com/app_create/app_create/release-notes/create_2022_3_0_new_og_nodes.html

グループ化

UI-Backdropのノードを使用することで、複数のノードをグループ化できます。

Backdropノードを配置後、ノードの右下の角をドラッグするとリサイズできます。

この上に別のノードを入れることで、グループとすることができます。

Propertyの"Description"にこのグループの説明文を指定します。

Draw Screen Space Text : ビューポートにテキストをオーバレイ

Debug – Draw Screen Space Textノードを使うと、ビューポート上にテキストを表示することができます。
この表示は、いったんPlayした後はStopしても消えないようです。

On Tickノードを配置し、TickをDraw Screen Space TextノードのInにつなぎます。
これで、ビューポートにテキストを表示する準備が整いました。
Draw Screen Space TextノードのPropertyは以下のようなパラメータがあります。

Propertyのパラメータ


このプロパティの場合は、ビューポートでは以下のように表示されます。

"Text"に表示テキストを指定。
"Background Color"は背景色を指定します。背景は角丸の長方形となります。
"Text Color"でテキストの色を指定します。
"Screen Position(%)"はビューポートの左上を(0,0)、右下を(100, 100)としたときの位置を指定します。
(50, 50)としたときはビューポートの中央からテキストが配置されます。

"Size"はフォントサイズの指定です。テキストの縦方向のピクセル数に相当します。
以下は、Sizeを20, 25, 30に変更して縦に並べました。

"Text Max Width"は、テキスト全体の幅をピクセル値で指定します。

ウィジットの配置

ウィジットの配置は少し複雑です。
ウィジットを配置すると、ビューポートの従来のマウス操作やPrimの選択(ピッキング)は無効になるようです。

開始(Play)と終了(Stop)イベント

開始(Play)と終了(Stop)を知るノードとして、Event – On Stage Eventノードがあります。

また、UI – Set Viewport ModeノードでPlay/Stop時の動きを指定します。

「開始(Play)」「終了(Stop)」のそれぞれのイベントのために、On Stage Eventノードを2つ配置。
ここからSet Viewport Modeノードをつなぎます。

On Stage Eventノードの"eventName"で"OmniGraph Start Play"を選択した場合、Play時にイベントが呼ばれます。

"OmniGraph Stop Play"を選択した場合、Stop時にイベントが呼ばれます。

Play時、Set Viewport ModeノードをつないだときのPropertyは"Mode"で"Scripted"を選択。
これにより、この先につなぐノードの処理を実行することになります。

また、"enable Picking"をOnにすると、Graphの処理でビューポート上の選択処理が使用できるようになります。
"enableViewportsMouseEvents"をOnにした場合は、Graphの処理でビューポート上のマウス操作が使用できるようになります。

Stop時、Set Viewport ModeノードをつないだときのPropertyは"Mode"で"Default"を選択。
"enable Picking"と"enableViewportsMouseEvents"をOffにします。

これで、ビューポートはPlay前の通常の状態に戻ります。
Stop時のSet Viewport Modeノードはここで完了になります。

ビューポートへのウィジットの表示

Play時のSet Viewport Modeノードの先に、ウィジットを表示するノードをつなげていきます。
UI-Placerノードで、ビューポートのどこにウィジットを表示するかを指定します。
UI-Stackノードは、複数のウィジットをまとめる役割をします。

また、Set Viewport Modeノードの"Scripted Mode"からPlacerノードの"Create"に接続。
Set Viewport Modeノードの"Widget Path"からPlacerノードの"Parent Widget Path"に接続。

Placerノードの"Created"からStackノードの"Create"に接続。
Placerノードの"Widget Path"からStackノードの"Parent Widget Path"に接続。

Placerのパラメータ

Placerノードのパラメータとして、"Position"はビューポートの左上からのピクセル位置を指定します。

"Widget Identifier"はユニーク名を与えています。
ですが、今回は使用しないため未入力でも問題ありません。

このPlacerは「ビューポート上の位置」を指定する役割だけのものになります。
この時のビューポートは"Parent Widget Path"に自動的に割り当てられています。

Set Viewport Modeノードの"viewport"の値が対象のビューポート名になります。

ここから"Widget Path"を経由して引き継いでいます。

Stackのパラメータ

Stackノードのパラメータとして、"Direction"は表示するウィジットを並べる方向を指定します。

ビューポートのスクリーンは、下側がTOP、上側がBOTTOMになります(+Y方向が上向き)。
"BOTTOM_TO_TOP"の場合は、スクリーンの上から下に配置していくことになります。

"Widget Identifier"はユニーク名を与えています。
ですが、今回は使用しないため未入力でも問題ありません。

Stackノードの"Created"と"Widght Path"に複数のウィジットのノードを追加することになります。

"Button"を追加

UI-Buttonノードを配置します。
これはプッシュボタンになります。

Stackノードの"Created"からButtonノードの"Create"に接続。
Stackノードの"Widght Path"からButtonノードの"Parent Widght Path"に接続。

パラメータの"size"でウィジット(ボタン)のサイズをピクセルで指定。
"text"で表示するテキストを指定。"Button1"としました。
"Widget Identifier"で識別のユニーク名を指定。

これまでをPlayすると、ビューポートの左上にボタンが表示されました。

Stopするとボタンは消えます。
また、Play時はマウス操作によるビューポート内のカメラ移動などが効かないのを確認します。

2つめの"Button"を追加

同様に、2つめのボタンを追加しました。

"size"はButton1と同じ。
"text"を"Button2"としました。

Playします。

Button1の下にButton2が配置されました。
接続した順に上から下に配置されるようでした。

同様に4つ繋げた場合。

Playするとビューポートでは以下のように表示されました。

それ以外のウィジットの種類

  • Combo Box
  • Slider
  • Spacer

があるようでした。

Spacerは余白のウィジット。
今回はこれらは説明しません。

ボタンのイベントを受け取るには?

ボタンのイベントを受け取るには、UI – On Widget Clickedノードを使用します。

これは今までのビューポートのUI用のウィジットとは別にノードを与えました。

このときのプロパティの"Widget Identifier"にButtonで指定した"Widget Identifier"のユニーク名を入れます。

また、On Widget ClickedノードのClickedから、Debug – Print Textノードを接続しました。
このPrint Textノードはビューポートの左上に指定のテキストを表示するデバッグ用のノードです。

パラメータの"Text"に"Clicked !"、"To Screen"チェックボックスをOnにしました。
これにより、ボタンが押されたときにスクリーンには"Clicked !"と表示されます。

以上の動作を動画にしました。
Print Textの表示がかぶらないように、ウィジットのPlacerの位置を少し下に下げました。


このときの"Print Text"ノードでのテキスト表示は、一定時間が経ったら消えます。

全体のGraphは以下のようになりました。

今回はここまでです。
まずはUIのプッシュボタンの挙動を確認しました。