問題の概要
デザイナーさんからとあるツールでエラーが起きると報告を受けて調べてみると、fileノードを作る処理がコケていることがわかりました。
from maya import cmds cmds.shadingNode("file", asTexture=True, isColorManaged=True, name="test") # Error: RuntimeError: file <maya console> line 2: Maya command error #
???
さらに調べてみると、問題のシーンを一回でも開くと、以降開いた全てのシーンで同じ問題が発生することがわかりました。つらい。
ちなみにこのとき既に存在するfileノードはハイパーシェードに追加されますが、追加で作成したものは表示されません。
調べてみる
これ系は大概Mayaが自動的につくるノードが悪い気がするので、そこに焦点を絞ってまずは正常なシーンでfileノードへの接続をノードエディタで見てみます。
こういった調査のときは補助ノードも有効にしておきます。(Show Auxiliary Nodes)
detaultTextureList1というやつがあやしいですね。
というわけでmaファイルを読んでみると…。
select -ne :defaultTextureList1; setAttr -av -cb on ".cch"; setAttr -k on ".fzn"; setAttr -cb on ".ihi"; setAttr -av -cb on ".nds"; setAttr -cb on ".bnm"; setAttr -s 26 ".tx"; lockNode -l 0 -lu 1;
はい。なんか見覚えありますね。
問題のノードのlockUnpublishedフラグが有効になっているようです。
initialShadingGroupが同じ状態になっているとメッシュが表示されないみたいな問題が発生するやつを思い出します。
復旧処理を書く
というわけでこんな感じの処理をしてやればおっけーです。
from maya import cmds def fix_invalid_default_texture_ist(): default_texture_list = cmds.ls(type="defaultTextureList") if not default_texture_list: return default_texture_list = default_texture_list[0] if not cmds.lockNode(default_texture_list, q=True, lu=True)[0]: return cmds.lockNode(default_texture_list, l=False, lu=False) fix_invalid_default_texture_ist()
原因は謎なので気持ち悪いんですが、シーンオープンとかにフックしてこの処理を実行するようにしておけば基本的に困ることはなさそうです。