🌵

Maya2022のUSDを触ってみよう

2021/04/02に公開

待ちに待った Maya202...2 がリリースされて、USD が使えるようになったらしいので
ざっくりとなにができるか触ってみようと思います。

使ってみる

とりあえず Maya2022 を起動してみます。

MayaUSD はプラグイン扱いになっていて、
プラグインをロードすることで使用できます。
が、インストール時に USD をインストールしていれば、デフォルトで ON になっていました。
ただし、Hydra はデフォルトでは ON になっていないので、「mtoh.mll」をロードしておきます。

ロードする

プラグインろロードしたら、USD をロード・エクスポートできるようになるので
いつもの通りキッチンセットをロードしてみます。

Create -> Universal Scene Description(USD)から Stage From File... を選びます。

ロードすると、

mayaUsdProxyShape というノードが作成されて

モデルがロードできます。
キッチンセットや Zup なので向きがおかしいですが、とりあえずロードできました。

アウトライナの表示を見るとわかるのですが、USD をロードすると、
Maya の Node として展開されるわけではなく、Proxy ノードを経由して
おの Proxy 内で USD のシーングラフを構築します。

そのままだと、Proxy ノードのみが表示された状態になりますが
Shape 表示を ON にすると、USD のシーングラフを確認できるようになります。
この Proxy ノード以下が USD の世界になっていて、Maya のシーングラフとは切り離された状態になります。

レイヤーエディタ

Stage From File... でロードした場合、Proxy ノードが USD のステージとして扱われます。
とすると、このステージのレイヤー(USD ファイル)のどれを編集したり、サブレイヤーで分けたり
といったことをやりたくなります。
それをやるためのツールが、レイヤーエディタです。

レイヤーを確認したい Proxy ノードで右クリック →USD Layer Editor をクリックすると
レイヤーエディタを開くことができます。

レイヤーエディタはこんなかんじ。
青の ◎ になっている部分が、TargetLayer になります。

Proxy ノードを経由して読み込んだ USD の Prim を移動したりすることができます。
この移動をした場合の編集結果は
この TargetLayer に指定されたレイヤーに対して行われます。

レイヤーエディタのこのアイコンで、レイヤーを新しく追加します。
追加すると、anonymousLayer というレイヤーが追加されました。
これは、ファイルが作られたわけではなく、メモリー上にのみ存在する一時的なレイヤーです。

この anonymousLayer を TargetLayer に指定して、

椅子を移動してみます。

すると EditLayer に編集結果が保存されました。
ので、レイヤーの ON/OFF をしてみると、編集結果が切り替えできているのがわかります。

選択したレイヤーを USDA でプリント。
over で動かした Prim に対してのみの編集結果が反映されているのがわかります。

この anoymousLayer は、右クリック →Save As で保存することができます。

これを利用して、編集対象のレイヤーを分けたり
レイヤーの順番を組み替えたりしながら USD のオーサリングができるわけですね。

アトリビュートエディタ

Proxy ノード以下のノードを選択した場合、
アトリオビュートエディタは、Proxy ノード(いわゆるステージ)と
Prim の情報、両方がタブで表示されます。

例えば Kitchen_set の Prim。
これは Xform ノードで、移動情報と Visible Purpose などのアトリビュート情報が表示されます。

Mesh の場合はこんなかんじ。
Prim のプロパティ・アトリビュートが列挙されるようになります。

コンポジションまわり

サブレイヤーに関してはレイヤーエディタで変更できますが、他のコンポジションに関してはどうなっているのか
みてみます。

リファレンスの場合

リファレンスは、アウトライナー上でリファレンスを指定したい Prim を選び、
Add Reference...を選びます。

すると、指定した USD ファイルがロードできます。

バリアントセットの場合

作り方は見つからなかったですが、切り替える方はアウトライナーからできました。
アイコンで「v」となっているものがバリアントセット付きの Prim のようです。

Export

レイヤーエディタはわかったので、次は Export の対応状況。

まず、Export 方法。
これは FBX などと同じように  ExportSelection や Export All などを利用します。

Files of type を USD Export にして、オプションを選んで Export します。

対応状況は、Materials や Skeleton、Skin、BlendShape、Animation など
基本的なところは一通りできるようです。

Material に関しては、Usd Preview Surface が新しく追加されていて
これを利用すれば、マテリアルはそのまま出力できました。
テクスチャなども利用可能。

シーングラフ的には、トップノード以下に Looks が作られて
その下に MaterialPrim と ShaderPrim が作られます。
MaterialPrim が ShadingEngine ノードです。

なので、基本的には TopNode を作りそれを Export するようにするのが望ましいのではないかと思います。

Skel と Animation 周りの確認のため Mixamo の Fbx をロードして、ExportSelection。
Skeleton の構造の生成も問題なくできているようです。

このあたりは必要最低限揃っているようです。

ですが、これ以外は結構期待はずれで
例えば、ノードに対して AddAttr で追加しているアトリビュート類の扱い。
このあたりはすべて無視されるので出力できません。

あとは、Omniverse の Exporter でできたような Animation のみの出力(AnimationClip)といったことはできません。
とりあえず FBX と同様の全部出しのみ、このあたりはもうちょっと頑張ってほしかったですね。

HydraViewport

ここまでは USD の話で、次はビューポート周り。
最初に書いたとおり、デフォルトでは使えませんが mtoh.mll をロードすると
Hydra のビューポートが使えるようになります。

プラグインをロードすると、(Hydra)の3つが選べるようになります。

Arnold(Hydra)を選んでみた図。
注意が必要なのが、Hydra を選んだ場合 Proxy ノードの Transform で動かすと表示がバグります。
そういう仕様なのか、はたまたそうではないのかは謎。

まとめ

とりあえず Help に書いてあるあたりは一通り触ってみましたが、正直あまりにもできないことが多すぎてグンニャリしてます。
Proxy 以下のモデル編集できないじゃんとか、ライトおけないじゃんとか、Hydra 表示のときに表示バグるじゃんとか
コンポジション限定的じゃんとか、とりあえずドウシタライインダヨォ!!というのが第一の感想です。

プラグインコマンドを見ると mayaUsdEditTarget だったりのような、それっぽいコマンドがあったり
improt ufe でなんか操作できそうだったりあるのですが、
現状用意されてる情報だとモデルの Export 機能だけしかないじゃん!!!です。

というわけで、自分のリサーチが甘いだけでもっとデフォルトで色々できるのか
はたまたプラグインになっているのだから自力で頑張れなのか
ちょっとよくわからない感じになってきましたが、やる気がおきたら続きを書くかもしれません。

現状の感想だと、Omniverse でよくね???SOLARIS すごくね???です。

追記

公式の MayaHelp ではなく MayaUSD のリポジトリ側には書かれている内容を見ると
だめそうだったけど、実装すればいけそうなこともあったのでいくつか追記。

追加のアトリビュート周りの処理とか

Chaser というのを Export コマンドの引数で指定することで、Export 時に処理を挟むことができるらしい。
https://github.com/Autodesk/maya-usd/blob/dev/lib/mayaUsd/commands/Readme.md#export-chasers-advanced

リポジトリ以下のサンプルでみつけたもの。
https://github.com/Autodesk/maya-usd/blob/dev/test/lib/usd/plugin/infoImportChaser.cpp

指定の Prefix を入れて AddAttr したアトリビュートを出力する...みたいなものも
これを使えばできるし、このサンプルの場合は、USD の CustomData を Maya の Attribute として
ロードしているっぽいので、必要に応じて拡張すれば Export の問題はなくなりそう。

USD_とすれば Attribute はでるっぽいことが書いてあったけど無理だった。
のでなにか別の問題があるのかもしれない。

GitHubで編集を提案

Discussion