こちらは、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シーンを作成する(動画)
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)
コード不足なのか?理由は分かりませんが、Pythonで読み込む際にDefaultPrimitiveをしっかり指定しておかないと、MayaにScriptで読み込んだ際に def
だけになってしまいました・・・。(GUIで読み込む際はちゃんと読めるので、もしかしたら何か定義が足りていないのかも?)