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 を追加して
s@path = "/sampleSdfPath/Cube";
path を追加します。
こうなって
結果。 この場合は、path が USD の SdfPath になり、この Path に+して数字が割り振られます。
s@name = "hogehoge";
あるいは、 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 回り?