USDのMeshを編集する
SOLARIS で USD を扱っていると、USD のメッシュを編集したいことがあります。
しかし、SOLARIS 側では編集することができません。
なので、編集したい場合は SOLARIS から SOP に持って行って編集する必要があります。
この場合は SOPImport や SOP 側で LOP Import をするのでも良いですが、
作っと編集したい場合は「SOP Modify」を使用するのがお手軽です。
つかってみる
使用方法は簡単で、SOLARIS で sopmodify ノードを作成し、入力に編集したいステージをつなぎ
sopmodify ノードをダブルクリックします。
ダブルクリックした中身は SOP になっているので、この中でジオメトリに対する操作を行います。
何も入れてない場合は、1Prim = 1 Primitives 扱いで、いわゆる Pack された状態になっています。 そのため、ジオメトリの変形をしたい場合は、unpackusd を使用してから使用します。
特にジオメトリの編集をしない場合は、sopmodify を抜けた後も基本 Prim の構成なども変わりません。
Mesh をマージする
これだけだとあまり意味がないので、ジオメトリの編集をしていきます。
よくやりたい操作として、複数の MeshPrim を 1Mesh に結合したいケースがあると思います。
サンプルとして、このように位置をずらした Cube を 2 つ作ります。
これを 1 つの Mesh に変換したいとします。
SOP > LOP にジオメトリを持って行く場合
Primitives の「name」と「path」アトリビュート単位で Mesh が分割されます。
s@path = "/testPrim";
s@name = "testPrim";
なので、まずはすべての Primitives の name と path を上書きします。
実行すると、このようにこれまでの CubePrim がのこったまま Mesh が作成されます。
CubePrim を Hide した状態で、状況を確認すると、
1 つの Cube のみが残っている状態になります。
これはわかりにくいのですが、位置をずらしておいた Cube が同じ位置にずれてしまい
1 つの Cube だけが見えている状態になります。
わかりやすいように片方を RubberToy にしてワイヤー表示にするとこのようになります。
これはどういうことかというと、 Point のアトリビュートに usdxform というアトリビュートがあるのですが
これが、ある USD の Prim の Transform を持っていて
SOP Modify した後に TOP に戻るときに usdxform を適応している影響で
結果元の Prim の Transform 分だけ位置がずれてしまっているわけです。
元の Prim の Transform を維持したい場合はそのままでも問題ないですが
今回のように Mesh を結合したい場合は、この usdxform を消しておかないと
意図した結果になりません。
デフォルトでは、Apply Inverse USD Transform to Unpacked Geometry が ON になっているので
OFF にすることで、usdxform を切ることができます。
あるいは、SOPModify 側の attribute delete で point の usdxform を削除しておきます。
これで、マージされた Mesh が出来上がりますが、このままだと元の CubePrim も残ってしまうので
元の Prim を削除します。
どれを削除するかをわかりやすくするため、GraftStage で指定 Prim 以下の子に入れて
RestructureSceneGraph ノードを使用して、GraftStage で作成したグループを削除するようにします。