Skip to content

usdCacheを使う_Stageをリロードする

ipynbFile UsdStageCache__usdCacheを使う_Stageをリロードする.ipynb
USDのステージを依頼たあとにアップデートする方法がようやくわかった。
ついでにCacheまわり。
開いたStageはキャッシュに入れることができる。

UsdUtils.StageCache(シングルトンのUsdCache)を取得してから、
そのStageCacheにステージを入れておくと
あとでそのStageを取得できたりするらしい。

In [1]:

1
from pxr import Usd,Pcp,UsdUtils

In [2]:

1
2
3
4
5
6
7
stage = Usd.Stage.Open(r'S:\fav\work\programming\python\JupyterUSD\pyDev\usd\root.usda')
# 一度ロードした内容を更新したい場合は、Reloadを実行する
# これを実行しないと、途中でusdをアップデートしてもロードされない
stage.Reload()
# UsdUtils.StageCache はシングルトン
cache = UsdUtils.StageCache.Get()
cacheID = cache.Insert(stage)

In [3]:

1
prim = stage.GetPrimAtPath('/sublayerReference')

In [4]:

1
2
for i in stage.Traverse():
    print(i)

Success

1
2
3
4
Usd.Prim(</subLayerB>)
Usd.Prim(</subLayerA>)
Usd.Prim(</sublayerReference>)
Usd.Prim(</Cube>)

In [5]:

1
2
3
# キャッシュに入れていたStageを確認する
for s in cache.GetAllStages():
    print(s)

Success

1
Usd.Stage.Open(rootLayer=Sdf.Find('s:/fav/work/programming/python/JupyterUSD/pyDev/usd/root.usda'), sessionLayer=Sdf.Find('anon:000002C12DA6C1B0:root-session.usda'), pathResolverContext=Ar.DefaultResolverContext(['S:\\fav\\work\\programming\\python\\JupyterUSD\\pyDev\\usd\\']))

In [6]:

1
2
# キャッシュからStageを探して取得
stage = cache.Find(cacheID)

In [7]:

1
2
3
# Stage内のPrimを確認
for i in stage.Traverse():
    print(i)

Success

1
2
3
4
Usd.Prim(</subLayerB>)
Usd.Prim(</subLayerA>)
Usd.Prim(</sublayerReference>)
Usd.Prim(</Cube>)

In [8]:

1
2
# キャッシュをクリア
cache.Clear()