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の基本を知っている方であれば、すぐに活用を始めることができると思われます。