PrimCompositionQueryの使い方
USD の Stage で表示される Prim は、いくつかの Layer を合成した結果組み立てられたものです。 たとえば、Kitchen_set を見てみると、
ある Prim を選択し、Composition を見ると
このように、この Prim がどの Layer から作られたのか確認することができます。
この情報を Python で取得しようとすると、PCP などを使用してシーンをトラバースしなければいけなくて それなりに手間です。 その手間を簡単にできるようにしたのが、PrimCompositionQueryです。 このクラスは、その名の通り、指定した Prim の Composition の構造を取得することができます。
つかってみる
まずは基本的な使い方から。 CompositionQuery で Kitchen_1 の Prim の Composition を確認してみます。
from pxr import Usd
stage = Usd.Stage.Open(r"D:\Kitchen_set\Kitchen_set\Kitchen_set.usd")
prim = stage.GetPrimAtPath("/Kitchen_set/Arch_grp/Kitchen_1")
# CompositionQueryを使用する
compQuery = Usd.PrimCompositionQuery(prim)
for comp in compQuery.GetCompositionArcs():
print(comp.GetArcType())
print(comp.GetTargetLayer())
実行結果は
このようになります。 見ての通り、Composition タブに表示されていた内容と同じものが確認できます。
GetCompositionArcs を使用すると、Layer を強い順に並んだリストで取得します。 リストは、UsdPrimCompositionQueryArc型のリストになっているので、具体的な内容は UsdPrimCompositionQueryArc クラスを確認して、必要な情報を取得します。
サンプルの場合、ArcType は Enum 型で、指定の Layer がどのように合成されているのかが確認できます。