こちらは、Qiita USD Advent Calendar 2024 28日目の記事になります。今回で最終回です。

Created : 2024/12/31 Yamagishi

Updated : 2024/12/31 Yamagishi

<aside>

目次:

</aside>

<aside> 💡

MayaシーンにUSDのStageを作成し、USDアセットをリファレンスしてみる。

</aside>

FlowPTからショットで使うアセット情報を取得し、MayaにUSDシーンを作成する(動画)

2023-10-12_05h01_15.mp4

Examples

USDファイルをリファレンスで読み込み(Create stage from file)

※ コードは検証中のもの

#-----------------------------------#
# """ Import Maya Python """
#-----------------------------------#
import maya.cmds as cmds

#-----------------------------------#
# """ Import Maya USD Modules """
#-----------------------------------#
import mayaUsd.ufe
import mayaUsd.lib
import mayaUsd_createStageWithNewLayer

import ufe

from pxr import Usd, UsdGeom, Gf

#-----------------------------------#
# Settings
#-----------------------------------#
MAYA_USD_STAGE_NAME = '|stage1|typ_stage'

#-----------------------------------#
# Main
#-----------------------------------#  
""" get maya stage """
maya_stage = None
if cmds.objExists(MAYA_USD_STAGE_NAME):
    maya_stage = MAYA_USD_STAGE_NAME
else:
    maya_stage = mayaUsd_createStageWithNewLayer.createStageWithNewLayer()
    cmds.rename(maya_stage, 'typ_stage')

""" get usd stage from maya obj """
# ps_path = ufe.PathString.path(MAYA_USD_STAGE_NAME)
# ps = ufe.Hierarchy.createItem(ps_path)

print(f'TYP | stage = {MAYA_USD_STAGE_NAME}')
# print(f'TYP | ps_path = {ps_path}')
# print(f'TYP | ps = {ps}')

""" reference usd file """
asset_name = 'MyAsset'
usd_file = 'my_usd_v0003.usd'

stage = mayaUsd.lib.GetPrim(MAYA_USD_STAGE_NAME).GetStage()
my_prim = stage.DefinePrim(f'/{asset_name}')
my_prim.GetReferences().AddReference(usd_file)

Untitled

コード不足なのか?理由は分かりませんが、Pythonで読み込む際にDefaultPrimitiveをしっかり指定しておかないと、MayaにScriptで読み込んだ際に def だけになってしまいました・・・。(GUIで読み込む際はちゃんと読めるので、もしかしたら何か定義が足りていないのかも?)

image.png