Mayaアドカレ 3日目が空いておりましたので書いてみます。
先日、xgenが起動しないという症状に出会いました。
とある方面からの相談だったのですが、いわく、いろいろ試してみたけどわからないとのこと。
なにしろ同じ症状がこちらには起きない(普通にxgen使える)ので、どう探ったものか困りました。
ある意味タイトルが全てなのですが、報告させていただく次第です。
事前情報
xgen
XGen は、ポリゴン メッシュのサーフェスに任意の数のプリミティブを
ランダムまたは均一に設定するためのジオメトリ インスタンサです。
Disneyが開発し、5年前くらいからMayaに同梱されています
OneDrive
先日時価総額でAppleを抜いたMicrosoft様のクラウドストレージサービスです
主訴
xgenが起動しません
ここまでの試行
以下は試したとのこと
- プリファレンス削除
- Mayaアンインストール、再インストール
- 過去版を試す
確認
melコマンドxgen
実行時に止まっているようでした。
さらに確認してみると、python関数_getXgProject
だかそういう名前のがこけている模様
パスに日本語は含まれてない
プロジェクトのパスを取得する関数でこけているので、
パスの中に文字列が含まれているのだろう、と思いました。
しかし確認してみると、プロジェクトフォルダの名前など含め、
日本語フォルダは含まれていないようでした。
あれ、思ったのと違う……
置き場所トリック
プロジェクトは ドキュメント以下 に置かれていましたが、
Explorer上で「ドキュメント」に見えてもローカライズ表示されているだけで
パスとしては実際は「Documents」な はずなので 問題にしませんでした。
なんと相談者より
「このドキュメントはOneDrive以下です」
と伺っていたにも関わらずです。
同じ挙動をすると思っていました
これによって、一旦保留して持ち帰るなどちょっと時間がかかってしまいました。
解決
原因
もうネタを明かしてしまったも同然ですが、
OneDrive以下のドキュメントフォルダは
ユーザフォルダ以下のドキュメント(=Documents)フォルダのようにはなっていません。
具体的には、
(Explorer上では「ドキュメント」、パスをみたら「Documents」、かと思っていたのですが)
OneDrive以下のドキュメントは本当に「~¥ドキュメント¥~」だったのです。
トリック2
…というか、
そもそも2バイト文字をパスに含んでいると set project できません。
なのになぜ「そもそもそこに set project できてしまっていたのか」
という点が、事態をややこしくしていました。
原因はおそらくこれです。
Windows 10 は既定で OneDrive にファイルを保存する
ファイルを作成すると、第 1 候補は [OneDrive] の下の
[デスクトップ]、[ドキュメント]、または [画像] フォルダーになります
という設定があるのですが、これが入っていたのかなぁと。
(そのうち手元でも試したいところです(解決しちゃったことですしやらずに忘れそう))
対応1
別のフォルダにプロジェクトセットしてもらうことで解決しました。
「『ドキュメント』はパス的には Documents だから大丈夫」という思い込みが
対応を長引かせる結果となりました。
こうした思い込みには常々気をつけないとなと思いました…。
対応2
そもそもAutodesk様ともあろう開発力のある会社が
2バイト文字対応していないだなんて、いやいやそんなまさか
return str( projectpath.encode('cp932') )
C:\Program Files\Autodesk\Maya{ver}\plug-ins\xgen\scripts\xgenm
にあるxgGlobal.py
の 183行目を直せばいけるのではと思います。
まとめ
というわけで、xgenそのものは関係ない内容ではありましたが……
autodeskさん対応お願いします、またはpy3化お願いします、
またはMicrosoftさん凝ったことしないで!
明日は、 執筆時点ではどなたも登録されてませんが、
ひとネタあるという方は是非どうぞー
@chiyama さんの「Mayaのノードで数学の演算を実現する」 が投稿されていました。
その後(?)
この辺とか関係あるのかもしれないーと思いました。
ちょっと訳あって Windows 10 のレジストリの状態調べてるんだけど、Microsoft が自分でめっちゃくちゃ間違ったキーを作りまくってて激しく治安が悪い。これは OneDrive が 上位キーの "Software" をつけ忘れたと見られるもの。こんなのがあちこち見つかる。 pic.twitter.com/cUEJgOTIML
— Unagi (@unagix) December 28, 2019