見出し画像

Omniverse Script Editorを使う

Script Editorとは?


Script Editorは、Pythonスクリプトを直接実行しながら、リアルタイムでシーンの操作やカスタマイズができるツールです。開発者やクリエイターが、コードを通じて3Dオブジェクトを制御したり、自動化スクリプトを作成したりする際に使用します。これを活用して独自のアプリケーションを作ることも可能です。
※著者はプログラミング初心者レベルなのでコードの内容についてはご容赦ください。

今回は、Omniverse USED composerを操作してみます。


Script Editorを開く


Windowの中にある Script Editorを開きます

開くと以下のようなEditor画面が表示されます。

もしWindowの中に Script Editorがない場合は、拡張機能からSCRIPT EDITORの機能をONにしましょう。

Optionなどで好みの文字サイズ、背景をカスタマイズ可能です。

コードを書いてみる


試しに以下のコードをコピーしてスクリプト エディター ウィンドウに貼り付けます。

from pxr import UsdPhysics, PhysxSchema, Gf, PhysicsSchemaTools, UsdGeom
import omni

stage = omni.usd.get_context().get_stage()

# Adding a Cube
path = "/World/Cube"
cubeGeom = UsdGeom.Cube.Define(stage, path)
cubePrim = stage.GetPrimAtPath(path)
size = 50
offset = Gf.Vec3f(0.5,0.2,1.0)
cubeGeom.CreateSizeAttr(size)
cubeGeom.AddTranslateOp().Set(offset)

コードを走らせるには左下のボタン「RUN Selected」を押します。

このように画面上に立方体が表示されます。

※こちらのコードは公式HPのものを元に若干変更しています。

コードの解説

1.ライブラリのインポート

from pxr import UsdPhysics, PhysxSchema, Gf, PhysicsSchemaTools, UsdGeom
import omni

こちらの部分はOmniverseで使うライブラリをインポートしています。
pxr: Omniverseで使用されるUSD(Universal Scene Description)のPythonモジュール群。
UsdPhysics: 物理シミュレーション関連のツールを提供。
PhysxSchema: NVIDIA PhysXに関連するスキーマを扱うためのモジュール。Gf: ベクトルや行列などの数学的ツールを提供。
UsdGeom: 3Dジオメトリの作成や操作をサポート。
omni: Omniverse専用のAPIで、USDシーンの管理や操作を行う。

2. USDステージの取得

stage = omni.usd.get_context().get_stage()

これにより、シーン内のオブジェクトを追加・操作できるようになります。

3. キューブの追加

path = "/World/Cube"
cubeGeom = UsdGeom.Cube.Define(stage, path)

path: キューブを配置するパス(シーン内の階層構造を指定)。ここでは/World/Cubeという名前でルート階層に追加します。UsdGeom.Cube.Define(stage, path): 指定されたパスに新しい立方体(Cube)を作成してステージに追加します。

4. 作成したキューブの取得

cubePrim = stage.GetPrimAtPath(path)

stage.GetPrimAtPath(path): 作成したキューブを「Prim」として取得。PrimはUSDでオブジェクトを表す基本単位です。この例では/World/CubeのPrimが取得されます。

このコードは、NVIDIA Omniverseのシーンに物理的な動作を含む立方体(Cube)を追加し、そのサイズや位置を設定するものです。以下にコードを詳細に解説します。


1. ライブラリのインポート

from pxr import UsdPhysics, PhysxSchema, Gf, PhysicsSchemaTools, UsdGeom import omni
  • pxr: Omniverseで使用されるUSD(Universal Scene Description)のPythonモジュール群。

    • UsdPhysics: 物理シミュレーション関連のツールを提供。

    • PhysxSchema: NVIDIA PhysXに関連するスキーマを扱うためのモジュール。

    • Gf: ベクトルや行列などの数学的ツールを提供。

    • UsdGeom: 3Dジオメトリの作成や操作をサポート。

  • omni: Omniverse専用のAPIで、USDシーンの管理や操作を行う。


2. USDステージ(シーン)の取得

stage = omni.usd.get_context().get_stage()
  • omni.usd.get_context(): 現在アクティブなOmniverseのUSDコンテキストを取得。

  • get_stage(): 現在のシーン(ステージ)オブジェクトを取得。これにより、シーン内のオブジェクトを追加・操作できるようになります。


3. キューブの追加

path = "/World/Cube" cubeGeom = UsdGeom.Cube.Define(stage, path)
  • path: キューブを配置するパス(シーン内の階層構造を指定)。ここでは/World/Cubeという名前でルート階層に追加します。

  • UsdGeom.Cube.Define(stage, path): 指定されたパスに新しい立方体(Cube)を作成してステージに追加します。


4. 作成したキューブの取得

cubePrim = stage.GetPrimAtPath(path)
  • stage.GetPrimAtPath(path): 作成したキューブを「Prim」として取得。PrimはUSDでオブジェクトを表す基本単位です。この例では/World/CubeのPrimが取得されます。


5. キューブのサイズ設定

size = 50 cubeGeom.CreateSizeAttr(size)
  • size: キューブの一辺の長さを指定(50単位)。

  • CreateSizeAttr(size): キューブのサイズを設定するアトリビュート(属性)を作成して値を指定。


6. キューブの位置設定

offset = Gf.Vec3f(0.5,0.2,1.0) 
cubeGeom.AddTranslateOp().Set(offset)
  • offset: ベクトル形式でキューブの位置を指定(x=0.5, y=0.2, z=1.0)。この位置はキューブの中心座標を示します。

  • Gf.Vec3f: 3次元ベクトルを表現するためのクラス。

  • AddTranslateOp(): キューブの位置を変更するためのTranslate操作を追加します。

  • Set(offset): 位置を設定します。この例ではoffsetの値が適用されます。

まとめ

Script Editorは、NVIDIA Omniverseの柔軟性を最大限に引き出すツールであることは間違いありません。
特に開発者やエンジニアにとって、カスタマイズした独自ツールの開発には欠かせない存在となるでしょう。
Pythonの基本を知っている方であれば、すぐに活用を始めることができると思われます。

いいなと思ったら応援しよう!