usdviewでキッチンセットを詳しく見てみよう(2)

公開:2021/02/14
更新:2021/02/14
2 min読了の目安(約2400字TECH技術記事

前回の続きで、今回もUSDの神サンプル「キッチンセット」を細かく見ていこうと思います。

前回のおさらい

まず、前回のおさらいを軽く。

Kitchen_set.usd にはアセットのモデルは入っているわけではなく、リファレンスでモデルを
リファレンスでロードしています。

読み込まれているアセットは、
1つのファイルではなく「AssetName.usd」「AssetName_payload.usd」「AssetName_geom.usd」という
複数のレイヤーで構成されています。
これはUSD的に扱いやすいようにレイヤー構成されていて
途中にペイロードのレイヤーが入ることで、 --unloaded でロードしたときに
ファイルをアンロードできるようになっています。

レイアウトをしているレイヤーとアセットのレイヤー構成は
USDでシーンを作るときの基本になるので、参考にすると良い...というのが前回の話でした。

アセット側でレイヤーを構成することで扱いやすくする...と書きましたが、
それ以外にもアセット側に仕込んでおくと良いことが2つほどあります。
それがキッチンセットでどの様になっているかをみてみようとおもいます。

DefaultPrim

まず1つめがDefaultPrim。
DefaultPrimとはなにかというと、リファレンスでシーンをPrimにロードしようとした時
root以下のどのPrimをPrimに読み込むか指定するものがDefaultPrimです。

たとえば Layout.usd に sample.usd をリファレンスしたい場合。
USDのリファレンスは、Mayaのリファレンスのようにシーン以下をまるごと読み込むというより
リファレンスしたいレイヤーの「あるPrim」を「リファレンスしたいPrim」に接ぎ木
するような挙動になります。

イメージとしてはこんな感じ。

なので、複数PrimがRoot以下にあるのにDefaultPrimがない場合は
どのPrimを読み込んでいいのかわからないためエラーになります。
(リファレンス側がPrimを指定すれば問題なし)

そのうえで、キッチンセットのアセットはどうなっているか見てみると
root以下のアセット名のPrimはDefaultPrimになっています。

usdview上ではわからないですが、
usdcat などでアスキーでみてみると、レイヤーに対してdefaultPrimが指定されているのがわかります。

usdcat とは、指定したusdをアスキーで表示したり、
コンポジションをなくして1つのファイルにするFlattenなどをできるコマンド。
usdcat Kitchen_set/assets/Bowl/Bowl.usd
のようにすると、Bowl.usd の中身を覗くことができます。

AssetInfo

次にAssetInfoについて。
AssetInfoとは、その名の通り、アセットの情報(そのまんまである)を
USDのメタデータとして持たせることができるものです。

たとえばBowl.usdのBowlPrim(DefaultPrim)をみてみます。
そうすると、 assetInfo というメタデータに保存されています。

これは、USDのコアシステム部分が扱うものというより、
アセットそのものを識別・管理するときに任意のPrimやPropertyに対して指定できるものです。
このサンプルの場合は、アセット名とファイルのパスが保存されているのがわかります。

USDのGlossaryをみると

assetInfo authored in USD files is advisory data one supplies for client applications to use.
It is not consulted or consumed by the USD core in any way during Stage loading/composition.

とあるように、あくまでも「アドバイザリーデータ」です。
↑の画像をみると分かる通り「documentation」というメタデータも存在しているように
ですが、これを利用すれば
例えば同じフォルダ以下にjsonでメタデータを保存しておいて...みたいなことをしないでも
データの中にアセットの情報をいれることができるわけです。

Kindとかも書こうと思ったけど長くなりそうなので続く!