Mayaで理解するレイヤー合成
前回で、Maya での大まかな USD の扱われ方を見ていきました。
USD は、Maya の世界 とは別扱いで存在していて
USD を編集した場合は、Maya シーンではなく USD に対して編集が加えられています。
「別世界」であることを理解できていれば、あとは USD の操作に集中すれば(たぶん)問題ないはずです。
これまでであれば、「別のシーンに保存されている」だけで十分でしたが
USD の場合はこれだけだと不十分です。
それが 「レイヤー」と「ステージ」 の概念です。
レイヤーとステージ
詳細は、こちらのページに書かれているので詳細は省きますが
USD は 1 つのファイルによって構成されているわけではなく
複数の USD ファイルを合成することによって1つのシーングラフを構成しています。
そのため、USD を編集する場合は編集対象は 1 つではなく
複数存在することになります。
Maya では、この編集対象の USD ファイルを扱うのが「LayerEditor」です。
LayerEditor
LayerEditor は 、 Window > USD Layer Editor または
UsdProxyShape を右クリックすることで開くことができます。
この LayerEditor で表示されるのが、レイヤー(= USD ファイル)で、
サブレイヤーで合成されたファイルが表示されています。
レイヤーは、PhotoShop のレイヤーなどと同じように重ねられていて
上にあるレイヤーほど強いです。
LayerEditor を見た時に、この〇アイコンが青くなっている場所が
現在の編集対象になっているレイヤーです。
この例の場合、Kitchen_set_edit.usd が編集対象になっていています。
この状態で、Kitchen_set を編集すると、
このレイヤーには、今変更した情報だけが追記されました。
まさに、PhotoShop のレイヤーを選択>絵を描く という操作と同じように
選択されたレイヤーに、USD に対する編集が追記されたのがわかります。
このレイ ヤーは、自由に追加・編集・削除することができるので
作業に応じてファイルを分けたり
担当者ごとにファイルを分割したりすることで
USD 的なワークフローを構築することができます。
SessionLayer
LayerEditor で、自由に編集レイヤーを追加できることがわかりましたが、
それ以外に「SessionLayer」と呼ばれる特別なレイヤーが存在しています。
SessionLayer とは、
https://openusd.org/release/glossary.html#id432
詳細は用語集を参照ですが、要約すると USD ステージのルートスタックの「最も強いレイヤー」として
独自のサブレイヤーとして読み込まれる「実験用のレイヤー」です。
このレイヤーは、アセットのデータとしてではなく
アプリケーションの一部として保存されるもので、基本的に保存されません。
Maya 上での USDStage とは、MayaUsdProxyShape であり
この ProxyShape ごとに 1 つのセッションレイヤーが作成されています。
デフォルトでは非表示になっていますが、Auto-Hide Session Layer を OFF にすると SessionLayer を
表示することができます。
どのようなことに使うかというと、あくまでも一時的な編集をしたい場合。
例として、あるアセットを作っているときのバリアントセットの確認のために
一時的にアセットを書き換えたい場合
セッションレイヤーに書きたい場合は、LayerEditor で SessionLayer を選択したうえで
編集すれば OK ですが、説明の通り「あくまでも一時的なもの」なので
このレイヤーを選択した状態のまま変更をした場合、
保存されません。
セッションレイヤーの情報は、「アプリケーションの一部として扱われる」の通り、
例外的に Maya シーン内に保存されます。
USD 編集を編集する
LayerEditor が理解できたら、あとは USD を編集していくだけです。
「今どのレイヤーを編集しているのか」を、LayerEditor を使用しながらコントロールして
現在の UsdProxyShape 以下に表示されているステージに対して編集を加えていきます。
基本操作は簡単で、基本は Maya と同じ感覚で操作可能です。
例として、Ctrl + G でグループ(XformPrim)作成であったり
中ボタンで階層の移動。
指定の Prim 以下で右クリックをして「Add New Prim」から、指定のスキーマタイプで
Prim を作ることが可能です。
試しに、Xform を新しく追加しました。
追加した情報は、LayerEditor で編集対象にしたレイヤーに対して書き込まれます。
作成した Prim は、中ボタンで階層を変更することもできます。
編集の罠
しかし、ここで Kitchen_set にもともとはいっていた Prim を移動しようとすると
見ての通り、移動しようとしても移動できずエラーになってしまいます。
これは USD の罠のようなもので、
USD は複数のレイヤーを合成することで 1 つのシーングラフを作っているわけですが
「現在編集対象のレイヤーに、記述がないもの(Opinion がない)は
編集ができません。
なので、Kitchen_set 側の階層を変更したい場合は
編集レイヤーを「Kitchen_set.usd」側にしなければいけません。
この、LayerEditor というのは、サブレイヤー () を編集するためのツールです。
サブレイヤーなので、それぞれのレイヤーの階層構造はそのまま同じ階層にあれば上書きされ
別の階層にあれば、(def の場合は)Prim が作成されます。
この辺りは、USD 的な考え型をしないとかなり扱いにくいポイントだと思います。
(何とかならないんですかね...)
何はともあれ「選択したレイヤーに書かれている内容を変更 あるいは、選択したレイヤーに新規追加・削除」
というのを強く意識して作業をしましょう。
クリア(Clear)・無効化(Mute)
レイヤーの選択や編集をしたならば、今度はこの変更を「一時的に無効化」したり
無かったことにしたくなるはずです。
そういった操作も LayerEditor からできます...が、いくつか罠があったので
それを説明しつつ手順を確認します。
RootLayer
まず、Maya の場合「ルートレイヤー」というのが非常に特別な扱いになります。
ルートレイヤーは、UsdProxyMesh で開くときに指定した USD ファイルのことです。
このルートレイヤーは、Maya のノードで指定する都合なのか
他のレイヤーに比べて制限があります。
具体的には、このルートレイヤーより上の階層にレイヤーを追加するというのができません。
これをやりたい場合は ProxyMesh で指定するレイヤーを
別のレイヤーに変更したうえで、子にしたいレイヤーをサブレイヤーを追加する必要があります。
また、このルートレイヤーを Mute したり Remove したりもできません。
レイヤーを一時的に無効化したい場合は Mute します。
この場合はあくまでも「一時的」なので、UnMute すれば再度有効化することができます。
対して、完全にクリアする場合は Clear を実行します。
ただし、これにも罠があって
サブレイヤーの情報なども含めて「完全にレイヤーをクリア」してしまいます。
なので、例えばこのようなレイヤーの Kitchen_set.usd をクリアすると
キッチンセット自体も消えてなくなります。
単純にレイヤーの編集分だけを戻したければ、一度サブレイヤーを別の階層に移動してから Clear すれば
サブレイヤーは残して編集することができます。
すでにレイアウト済のアセットを調整するような場合は、注意が必要です。