PackedPrimitivesとUSDExport
普段はLOPを使用してUSDを扱っていましたが、
SOPからもUSDの出力ができるというのと、HoudiniのPackedPrimitivesについて教えてもらったので
SOPの勉強とデータの構造を理解するのを兼ねて
SOPのUSDExportを試してみようと思います。
基本¶
まず、SOPには「usdexport」ノードがあります。
ので、このノードに接続するとUSDを出力することができます。
シンプルなキューブをOutputFileのみを指定して出力すると、
Relative Path Prefixの指定(この場合、usdexportのノード名)のXform+mesh_0という名前のMesh
が出力されました。
SOPのGeometry以下は、Mayaでいうところ1つのMeshノードのような扱いなので
出力されるUSDファイルは、1つのUSDファイルに対して Xform + Mesh の組み合わせで
出力されました。
確認のため、このようにDuplicateを使用してモデルを複製したのち、出力しても
1つのXform+Meshにまとめられた形で出力されます。
PackedPrimitives¶
次はPackPrimitiveがあった場合。
https://www.sidefx.com/ja/docs/houdini/model/packed.html
PackPrimitiveは、
パックプリミティブをコピーすると、ジオメトリ自身がコピーされるのではなく、
参照 がコピーされます
とある通り、いわゆるインスタンスです。
BoxをPackしてGeometrySpreadSheetを見ると、
↓
Point等はパックしたジオメトリの位置情報をPointに持つようになります。
PackしたジオメトリをDuplicateして、Exportをしてみます。
結果。
青になっているのは、USDのインスタンスになっているからで
そのインスタンスの元Meshが、 Prototypes/obj_0 として出力されているのがわかります。
デフォルトではインスタンスになっていますが、USDExportの Packed Primitivesを
変更することで、実体のMeshにすることも、Point Instancerにすることも、Unpackすることも可能です。
実体化した場合は、 Relative Path Prefix 以下に obj_### で出力されます。
最後に、Unpackした場合。
Packed Primitivesがある状態で、ExportUSDでUnpackすると
Xformが作成されずに、Primitivesが個別のMeshPrimとして出力されます。
Path/Nameの指定¶
PackedPrimitive を使用して複製したデータを出力した場合でも
各Primitiveに名前を付けて出力したい...というケースがあると思いおます。
その場合は、指定のAttributeをつけることで
個別のPathを指定することができます。
まずは Attribute Wrangleを追加して
1 |
|
path を追加します。
こうなって
結果。
この場合は、pathがUSDのSdfPathになり、このPathに+して数字が割り振られます。
1 |
|
あるいは、 nameを指定すると、
Relative Path Prefix で指定したPath以下に name のXformが作成されます。
Mergeした場合¶
最後にMergeした場合を確認します。
ノードはこんな感じで、それぞれのBoxに hogehoge と fugafugaという名前を付けます。
その2つをMergeします。
SpreadSheetはこんな感じです。
結果。
それぞれのジオメトリが、別のXform+Meshの構造で出力できました。
つまりは、SOP側だけでも
pathアトリビュートあるいはnameアトリビュートを使用して USDのシーングラフを
作ることができるのがわかりました。
(それが使いやすいかは別問題として)
まとめ¶
もともとはSOPで使われているPackedPrimitivesとはなんぞ???
追加するとどういう意味があるんだろう???という疑問から調べ始めましたが
その挙動や、GeometrySpreadSheetを確認したときの変化
その意味するところなどが理解できました。
次はAttribute回り?