毎日・ざっくりOmniverse - Createを触ろう

3 min読了の目安(約3200字TECH技術記事

初日からずっとなんでリネームと階層操作できないんだ...とおもってたら
普通にできたのと、USD脳すぎて色々勘違いもしていたので
今日はちゃんとCreateを触りながら動作を確認してみます。

StageとLayout

Layerおさらい

まずCreateを起動して基本的な操作をみていきます。

NewSceneをした段階だとライトが1つ配置された状態のステージが作成されます。

Createからシーン内にPrimを作成することができます。

作成できました。

Createすると、 Authoring Layer 以下にPrimが作成されます。

Group化する+リネームする

Ctrl+Gをすると、XformのGroupを作ることができます。

作成したGroup(Xform)は、Stageタブのシーングラフ内でRenameすることができます。
USDのネームスペース操作はレイヤーでするものだという思い込みがあったのと
コンポジションまわりの構造を調べるためにLayerタブメインにつかっていたのもあり
Stage側のシーングラフにリネームがあるのに気が付きませんでした。
恥ずかしい。

Namespaceの編集

Layerタブ内で、Primをレイヤー間移動できるのはレイヤー検証をしているときに
わかりましたが
(このとき、レイヤー間移動してもNamespaceは変わらない)
PrimのNamespaceは変更できないのか...?と思ってましたが
リネーム処理に関してもStageだろうということで動作を確認してみます。

Stageは、複数のレイヤーを合成した上で出来上がっているシーングラフです。
ステージ側でPrimをDrag&Dropした場合、Layerタブを見るとわかるとおり
Stage側の編集によって、そのPrimのSpecがあるレイヤーすべてが編集されている
事がわかります。

つまり、シーングラフの木構造(USDのネームスペース)を編集する場合は
Stageを編集して、それに関連するレイヤーを同時に編集する。
編集対象のレイヤーは、LayerタブのAuthoring Layerで変更し
どのレイヤーで定義するかオーバーライドするかは、Layer側でレイヤー間Drag&Drop
することで切り替えできるということです。

今までのUSDの考え方的だと、ファイル編集を同時に実行するために
ファイルを分けて、作業者ごとに別のレイヤーを編集することで同時編集を
可能にしていたわけですが、
Omniverseの場合、同レイヤーを同時編集できる仕組みがある(LiveSync)ので
このようにStageを編集してLayerすべてを編集する...みたいな構造が
可能になってるわけですね。

なるほど。

サブレイヤーの階層に関しては
Stageを編集→レイヤー編集(レイヤー自体はLiveSyncでSync)ですが、
Referenceの場合はそうもいかないので

ReferenceしたPrim以下のPrimはStageの編集からはロックされ、
DefaultPrimの移動のみできるようになってるようです。

Layer側にあるのも、ReferenceをするためのXformPrimのみになっています。

このDefaultPrimは、リネームすることができます。
(Referenceするためのレイヤーに定義されたPrimをリネームするから)

そしてこの編集部分を調べていて気が付きましたが、
前回作成したキャラと分離したAnimationClipを扱うときに
モデルをリファレンスでロードしてリファレンスしたレイヤーに対してAnimationClipを
指定しようと思ったのですが
ReferenceしたPrim以下は編集できないので、

こんなかんじで、モーションとアニメーションをサブレイヤーで合成してから
レイアウト用レイヤーにリファレンスする必要がありそうです。

PropAnimationClipもサブレイヤー前提だったので、
レイヤーは分離したほうがいいのかもしれません。

まとめ

とりあえず、Createをちゃんと調べていくと
これ1つでもUnityやUEのようなゲームエンジンのように
アセットを配置してレイアウトしたりライティングしたりできそうだというのがわかりました。

個人的にはStageをいじってレイヤーを同時編集というのは衝撃的でした。

Omniverseのサンプルデータを今更見つけて、今日まで触ってきた知識を元にしてみると

サブレイヤーでモデルのセット(Attic_NVIDIA.usd)に

Referenceでコンポーネントを配置して、

別レイヤーの Attic_NVIDIA_Lighting_Day.usd と Attic_NVIDIA_Lighting_Night.usd
でライティングがされていて、
カメラはRootLayerに配置されています。(CameraはAttic_NVIDIA.usdでDefine、RootLayerはOver)

これで、LiveSyncで同時作業する場合
Lighting_Dayを作業する人は Attic_NVIDIA.usdとLighting_Day.usdをSyncさせ
LightingはLightingLayer、モデルのレイアウトはAttic_NVIDIA.usdをAuthoringLayerにする。
NightのひとはLighting_Night.usdと Attic_NVIDIA.usdをSyncする。
すると、モデルのレイアウトと、複数のライティングのシーンを
同時に作業することができます。
Attic_NVIDIA.usdで階層を変更したとしても、各Lightingレイヤーに反映されるわけですね。

これはなかなか夢が広がる環境。。。

もう暫く続く。