0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

USDの実践メモ 01 : Xformable なノードの作成

Last updated at Posted at 2024-07-02

USD の自己学習が進みましたので,私個人の専門分野への応用を念頭におきながら実践編へと移ってまいります。

Xformable なノードの作成

Xformable なノードが定義されたステージファイルを作成してみます。ステージに /World という名のノードがひとつあるだけのごくシンプルなファイルです。

from pxr import Usd, UsdGeom

def create_stage():
    stage = Usd.Stage.CreateInMemory()
    return stage

def create_node(stage, path):
    node = UsdGeom.Xform.Define(stage, path)
    return node


if __name__ == '__main__':
    # ステージ作成
    stage = create_stage() 
    
    # ルートノード作成
    rootNode = create_node(stage, '/World')
    
    # USDファイルにエクスポート
    stage.GetRootLayer().Export('./World.usda')

上記プログラムを実行すると,USDファイル「World.usda」が無事に生成されます。
念のために,usdchecker に掛けてみましょう。

$ usdchecker ./World.usda

Stage does not specify an upAxis. (fails 'StageMetadataChecker')
Stage does not specify its linear scale in metersPerUnit. (fails 'StageMetadataChecker')
Stage has missing or invalid defaultPrim. (fails 'StageMetadataChecker')
Failed!

警告が 3 つ表示されてしまいました。
「upAxis」と「metersPerUnit」は指定が無くともデフォルト値が入るので,その範囲内で使用する分には問題ないはずですが,正確性を期して指定することにしましょう。「defaultPrim」も同様に明確化しておきます。
修正版は次のようになります。

from pxr import Usd, UsdGeom

def create_stage():
    stage = Usd.Stage.CreateInMemory()
    UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.y)
    UsdGeom.SetStageMetersPerUnit(stage, 0.01)
    return stage

def create_node(stage, path, is_defaultPrim=False):
    node = UsdGeom.Xform.Define(stage, path)
    if is_defaultPrim is True:
        stage.SetDefaultPrim(node.GetPrim())
    return node


if __name__ == '__main__':
    # ステージ作成
    stage = create_stage() 
    
    # ルートノード作成
    rootNode = create_node(stage, '/World', is_defaultPrim=True)
    
    # USDファイルにエクスポート
    stage.GetRootLayer().Export('./World.usda')

できあがった USD ファイルは次のようなものです。

#usda 1.0
(
    defaultPrim = "World"
    metersPerUnit = 0.01
    upAxis = "Y"
)

def Xform "World"
{
}

usdchecker を起動すると,こんどは「Success!」となりました。

まとめ

Python で Xformable なノードが定義されたステージファイルを作成しました。
「defaultPrim」,「metersPerUnit」,「upAxis」は明示しておいた方がよさそうです。

参考資料

ft-lab (Yutaka Yoshisaka) さん,あんどうめぐみさん による以下のサイトが理解の助けになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?