Plugin Metadataを使おう
Plugin Metadataとは、PrimやLayer、Attributeなどに対してMetadataを
指定できるようにする機能です。
Pluginで特に指定がない場合、
| prim.SetMetadata('metadata_name',100)
|
このようにMetadataを指定しようとしても、エラーになります。
(自由に指定をしたい場合は、CustomDataを使う)
Plugin Metadataを使用すれば、指定の名前・型のMetadataを定義して
使用できるようになります。
plugInfo.json
Plugin Metadataは、 plugInfo.json で定義します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | {
"Plugins": [
{
"Name": "MetadataPlugin",
"Type": "resource",
"Info": {
"SdfMetadata": {
"sample_metadata": {
"type": "string",
"appliesTo": "prims",
"default": "hello world!!"
},
"layer_metadata": {
"type": "string",
"appliesTo": "layers",
"default": "layer sample!!"
},
"attr_metadata": {
"type": "int",
"appliesTo": ["properties", "attributes"],
"default": 100
}
}
}
}
]
}
|
基本構造はこんな感じになります。
https://graphics.pixar.com/usd/docs/api/sdf_page_front.html#sdf_metadata_types
使える型一覧はこのページにまとめてあります。
"type" value で型を指定して、appliesTo で、適応する対象を指定します。
plugInfo.jsonを保存する

作成した plugInfo.jsonは、PXR_PLUGINPATH_NAME で指定したフォルダ以下の
pluginDirName/resources/plugInfo.json
に保存します。
In [2]:
| from pxr import Usd,Sdf
stage = Usd.Stage.CreateInMemory()
prim = stage.DefinePrim('/samplePrim')
# Metadataを指定する
prim.SetMetadata('sample_metadata','hogehoge')
print(stage.GetRootLayer().ExportToString())
|
Success
| #usda 1.0
def "samplePrim" (
sample_metadata = "hogehoge"
)
{
}
|
custom_metadata.ipynb
まずはPrimを指定する場合。
appliesTo で、 prims を指定することでPrimにMetadataを追加できます。
In [3]:
| stage = Usd.Stage.CreateInMemory()
layer = stage.GetRootLayer()
# Layerに対してMetadataを追加する
pseudoRoot = stage.GetPseudoRoot()
pseudoRoot.SetMetadata('layer_metadata','hoge')
print(layer.ExportToString())
|
Success
| #usda 1.0
(
layer_metadata = "hoge"
)
|
custom_metadata.ipynb
次にLayerの場合。
SdfLayerには SetMetadataはありません。
Layerに対してLayerを指定したい場合は、GetPseudoRoot で RootPrimを取得して
そのPrimに対してMetadataを指定すると、Layerに対してMetadataを指定できます。
In [1]:
| from pxr import Usd,Sdf
stage = Usd.Stage.CreateInMemory()
prim = stage.DefinePrim('/samplePrim')
attr = prim.CreateAttribute('sampleAttr',Sdf.ValueTypeNames.Int)
attr.Set(100)
attr.SetMetadata('attr_metadata',123)
# Metadataを指定する
prim.SetMetadata('sample_metadata','hogehoge')
print(stage.GetRootLayer().ExportToString())
|
Success
| #usda 1.0
def "samplePrim" (
sample_metadata = "hogehoge"
)
{
custom int sampleAttr = 100 (
attr_metadata = 123
)
}
|
custom_metadata.ipynb
Attribute/Propertisに対しての場合。
appliesToは複数指定することができて、複数の場合は配列で渡せばOKです。
最終更新日:
2021-05-29 18:53:27