Skip to content

USDAssetsの作り方、基本構造メモ

ipynbFile makefileVariant__USDAssetsの作り方、基本構造メモ.ipynb
USDのサンプル examples/usdMakeFileVariantModelAsset/usdMakeFIleVarinatModelAsset.py
の中身を確認する。

このサンプルはコマンドラインで実行できる。

python usdMakeFileVariantModelAsset\usdMakeFileVariantModelAsset.py --kind model -i D:/test.usda -v cube sphere testProps D:\USDsample\modelAsset\cube.usda D:\USDsample\modelAsset\sphere.usda

基本構造は

RootPrim - Variant - Payload -
- __class_assetName

VariantとPayloadとInheritsの組み合わせ。

以下はサンプルの気になる部分の実行テスト。

In [1]:

1
from pxr import Tf, Kind, Sdf, Usd 

In [2]:

1
Tf.IsValidIdentifier('sample')

Success

1
True

In [3]:

1
assetName = "sampleData"

In [4]:

1
filename = f"D:/{assetName}.usd"

In [5]:

1
layer = Sdf.Layer.CreateNew(filename,args= {'format':'usda'})

In [6]:

1
stage = Usd.Stage.Open(layer)

In [9]:

1
print(rootPath.AppendChild(assetName))

Success

1
/sampleData

In [10]:

1
2
rootPath = Sdf.Path.absoluteRootPath
modelRootPrim = stage.DefinePrim(rootPath.AppendChild(assetName))

In [27]:

1
modelAPI = Usd.ModelAPI(modelRootPrim)

In [28]:

1
2
3
4
5
6
7
# Option用のResolvePathをセットする
# (あくまでもOptionとして使用されるもの?もの?)
modelAPI.SetAssetIdentifier('D:/test.usda')
# AssetPathで取得できる
print(modelAPI.GetAssetIdentifier())

modelAPI.SetAssetName(assetName)

In [39]:

1
2
# 引数で指定したKindかどうかを判定
modelAPI.IsKind('model')

Success

1
True

In [40]:

1
2
classPrim = stage.CreateClassPrim(rootPath.AppendChild("_class_"+assetName))
modelRootPrim.GetInherits().AddInherit(classPrim.GetPath())

Success

1
True

In [42]:

1
print(stage.GetRootLayer().ExportToString())

Success

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#usda 1.0
(
    defaultPrim = "sampleData"
)

def "sampleData" (
    assetInfo = {
        asset identifier = @D:/test.usda@
    }
    prepend inherits = </_class_sampleData>
    kind = "model"
)
{
}

class "_class_sampleData"
{
}