UsdCollectionを使おう
USD の「Collection」とは、Maya の Sets と似た機能で USD シーン内のオブジェクトを識別するためのリレーションシップ機能を提供します。 つまりは、これをつかうと Prim をグループでまとめるだけではなく Namespace に関係なくオブジェクトをコントロールできるようになります。
やってみる
まずはサンプルを用意します。
このようなシンプルなレイヤーを用意します。
# Collectionを作る
collection = stage.DefinePrim("/collectionSample")
collectionName = "sampleCollection"
api = Usd.CollectionAPI.Apply(collection,collectionName)
そして、Collection を作成したい Prim に UsdCollectionAPI を利用して Collection を適応します。
#usda 1.0
def "collectionSample" (
prepend apiSchemas = ["CollectionAPI:sampleCollection"]
)
{
}
適応できました。 ですが、これだけだとまだからの Set を用意したにすぎないので Prim を指定してみます。
api.IncludePath(Sdf.Path("/World/SamplePrims/Cube"))
#usda 1.0
def "collectionSample" (
prepend apiSchemas = ["CollectionAPI:sampleCollection"]
)
{
prepend rel collection:sampleCollection:includes = </World/SamplePrims/Cube>
}
追加されました。 指定した Prim へのリレーションに、IncludePath が追加されたのがわかります。
Collection を追加すると、追加した Prim に対して「collection」の Namespace 以下に プロパティが作成されます。 そして、このプロパティ名には Collection 名(上の例なら sampleCollection )が付き そのコレクションごとのプロパティを追加するための Namespace が提供されます。 プロパティ以下に Collection 名が入ることで、 1つの Prim に対して複数の Collection が追加できるようになるわけですね。