⚗️

【Maya】Alembic入出力でネームスペースが除去されてしまう(ようにみえる)問題について

2020/11/07に公開

MayaでAlembicキャッシュを出力して、それを読んでみると、キャッシュ出力時にはついていたはずのネームスペースがついてこない、という問題についてです。
Maya 2020.2 でテスト。(もっと前のバージョンからある挙動です)


手順


※キャッシュ書き出し元シーン

  • アセットA(形状はSphere。ルートノードは root)とアセットB(形状はCube。ルートノードは root)を用意
  • 新規シーンに、Aを二体、Bを一体、リファレンスする。ネームスペースはそれぞれ「a_001」「a_002」「b_001」
  • それぞれのrootを選択して、abcキャッシュを出力。Strip NamespaceはOFF
  • 書き出したキャッシュを、新規シーンにインポート
    • > ネームスペースがはがれてしまい、root、root1...みたいになってしまう。

困る。

Strip Namespace(ネームスペースを除去)はOFFなので、ネームスペースはついてきてくれるもんだとおもうんですけれど。。。

なぜ

検索してみると、2015年ごろの下記のようなissueが見つかりました。

https://github.com/vvdoogy/alembic/issues/352

引用すると、

The maya AbcImport plugin currently strips namespaces from nodes when importing, if-and-only-if the namespace does not currently exist in the scene. 

maya AbcImportプラグインは現在、名前空間がシーンに現在存在しない場合に限り、インポート時にノードから名前空間を削除します。

……ということで、ネームスペースが存在しない場合はインポート時にネームスペースを削除するらしいです。
なんでそんなことするんですか。

しかももう五年くらい経つ話題なのでもう治ってても良さそうなものですが、治ってないので仕方ない。

対応

ネームスペースを削除する、という挙動は「シーンにネームスペースが存在しない場合」に起きることがわかったので、事前にネームスペースを作成してそれからインポートします。

ネームスペース a_001 を作成して、インポート。

ネームスペース b_001 を作成して、インポート。

全部作成してインポート。

正しく所定のネームスペースに入ったようです。

やりづらい

キャッシュ書き出し側シーンと読み側シーンとでネームスペースを一致させておく、みたいな運用になりそうです。
メタデータ的なファイルを別途書き出しておくとか、Shotgunとかデータベースに送っておくなどして、キャッシュ読み込み時についでに読んで、みたいなことをしないといけないんですかね。

補足

リファレンスでは?

リファレンスでは、リファレンス時に指定したネームスペースが考慮されます。ファイル名をネームスペースにするか、指定した文字列をネームスペースにするか。

インポート時のように、事前にネームスペースを作っておいたらそれらにくっつく、みたいな動作はしません。リファレンスってそういうものといえばそうなんですが。

キャッシュの中身

一応abcファイルをエディタで開いてみたら、ネームスペースはこんな感じで普通に書かれてました。
(ほかには書き出したAlembicのバージョンとか書き出したシーン名とかも読めたので、注意といえば注意かもしれませんね)

Discussion