Edit Layer
SOLARIS で USD の構造を作るときに、「どこをどのように分けて構築するか」
というのはとても重要なことです。
なのですが、ぱっと見てどのように制御するのかがとてもわかりにくかったので
手順とかをまとめてみようと思います。
SOLARIS でのレイヤー表示
SOLARIS 上でのレイヤーがどのように切り分けられているかというと、
ノードの縁の色単位で表示がわかるようになっています。
上の画像の場合は、 assetName と payload1 が同じレイヤー
cube2 が別のレイヤーとして作成されます。
レイヤーを編集する
ここでいうところの「レイヤー」というのは、いわゆる USD のファイルのことです。
つまり現状だと assetName Prim と cube2 Prim それぞれが存在する USD ファイルが
あることになります。
ただし、とくに何もしていない場合このレイヤーは「Anonymous レイヤー」という
オンメモリー上にのみ存在するレイヤー扱いになり、
途中コンポジションされている Cube2 の Prim レイヤーがオンメモリー上にしか存在しない
レイヤーになってしまうので、 USDROP ノードで Export すると
エラーアイコンが表示されてしまいます。
このあたりの問題は、 http://ikatnek.blogspot.com/2020/06/usd-rop.html こちらに詳細が書かれています
なので、各レイヤーの構造を維持したまま(Flatten しないで)
レイヤーワケした状態で Export したい場合は、 ConfigureLayer ノードを
利用して、レイヤー設定を追加します。
結果がこちら。 Cube は cube.usda メイン部分は payload.usda という形で出力され、
#usda 1.0
(
endTimeCode = 1
framesPerSecond = 24
metersPerUnit = 1
startTimeCode = 1
timeCodesPerSecond = 24
upAxis = "Y"
)
def Xform "assetName"
{
def Xform "model" (
prepend payload = @./cube.usda@
)
{
}
}
cube をペイロードした usda が出力されます。
つまり、 ConfigureLayer ノードは
接続されたレイヤーに対して設定を変更する事ができるノードというわけですね。
例えば Cube 側の ConfigureLayer をみてみます。
SavePath はそのレイヤーをどこに保存するのか、DefaultPrimitive はレイヤーの
デフォルト Prim をなににするかの設定です。
#usda 1.0
(
defaultPrim = "cube2"
framesPerSecond = 24
metersPerUnit = 1
timeCodesPerSecond = 24
upAxis = "Y"
)
def Cube "cube2"
{
float3[] extent = [(-1, -1, -1), (1, 1, 1)]
double size = 2
matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) )
uniform token[] xformOpOrder = ["xformOp:transform"]
}
その結果出力されるレイヤー。 defaultPrim として cube2 が指定されていることがわかります。
Configure Layer で DefaultPrim が指定されているので、
Payload ノードの Reference Primitive で「 Reference Dfault Primitive 」を指定して
ペイロードすることができます。
他の設定も色々いれてみると
#usda 1.0
(
"Hello World"
customLayerData = {
string testCustomData = "Test Test!!"
}
defaultPrim = "cube2"
endTimeCode = 240
framesPerSecond = 24
metersPerUnit = 1
startTimeCode = 1
timeCodesPerSecond = 24
upAxis = "Y"
)
色々仕込むことができました。
編集部分だけ別レイヤー出力
ConfigureLayer を使用すると、指定の部分のレイヤーの出力パスを編集し
レイヤーに対してメタデータを仕込んだりできることができました。
次は、編集した部分のみを別ファイルとして切り出してコンポジションしてみます。
全体図がこんな感じになります。
Cube を動かして、動かした部分だけを別レイヤー化して
そのファイルをペイロードでロードします。
なので、
- モデル部分(cube1)
- Edit 部分 それぞれをレイヤーとして保存するために、ConfigureLayer ノードで 出力先などのレイヤー設定を追加します。