メインコンテンツまでスキップ

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 すれば
サブレイヤーは残して編集することができます。

すでにレイアウト済のアセットを調整するような場合は、注意が必要です。

基本レイヤー構造

ここまでの流れを踏まえたうえでの、Maya の基本的なレイヤー構成はこのようにします。
ルートレイヤーは、あくまでも

  • レイヤーを合成するための構成
  • メタデータ(FPS や StartFrame・EndFrame、SceneScale など)保存用

として、移動や追加などの直接の編集は行わないようにします。 実際の編集は、ルートレイヤーの子レイヤーとして作成します。
複数レイヤーがある場合は上にあるレイヤーのほうが強いので、元(Kitchen_set.usd)と
そのレイヤーに対して編集を行うためのレイヤーを、上に追加します。

サブレイヤーは、複数階層を作ることもできますが
まずはこれを基本として、あまり深くなりすぎないようにしたほうがいいかなと思います。

まとめ

ここまでで、MayaUSD でのレイヤーについてを解説してきました。
最初の MayaUSD についてと合わせて、
この LayerEditor の概念は Maya で USD を扱う上では非常に重要な概念であり 操作になります。

この基本部分を理解していないと、Maya での USD は全く理解不能になってしまいますので
しっかり押さえておくのが重要です。