In this case, mayabatch reported some runtime errors when loading a certain scene:
# Traceback (most recent call last): # File "C:\solidangle\mtoadeploy\2015\scripts\mtoa\callbacks.py", line 415, in deferredCallback # func(*args, **kwargs) # File "C:\solidangle\mtoadeploy\2015\scripts\mtoa\aovs.py", line 471, in createAliases # pm.aliasAttr(sg + '.ai_aov_' + name, remove=True) # File "C:\Program Files\Autodesk\maya2015\Python\lib\site-packages\pymel\internal\pmcmds.py", line 134, in wrappedCmd # res = new_cmd(*new_args, **new_kwargs) # # RuntimeError: 'aiStandardSG.ai_aov_direct_specular' is not a unique name. Cannot remove alias.
Now, even though I have the advantage of access to the MtoA source code, the problem remained: how do I fix the scene and stop these errors? To find a solution (and understand the problem) I had to resort to examining the Maya ASCII version of the scene.
The “fix” was to clear the AOV names on the shadingEngine node:
setAttr "aiStandardSG.aovs[0].aov_name" -type "string" ""; setAttr "aiStandardSG.aovs[1].aov_name" -type "string" ""; setAttr "aiStandardSG.aovs[2].aov_name" -type "string" "";
The problem is that the shadingEngine node has some named custom AOVs, but no corresponding “attribute alias” list. So the AOV name couldn’t be found in the alias list, which in the error message came out as “not a unique name”.
In the Maya ASCII version of the problem scene, I saw this:
createNode shadingEngine -n "aiStandardSG"; addAttr -ci true -h true -sn "aal" -ln "attributeAliasList" -dt "attributeAlias"; setAttr -s 4 ".aovs"; setAttr ".aovs[0].aov_name" -type "string" "direct_diffuse"; setAttr ".aovs[1].aov_name" -type "string" "direct_specular"; setAttr ".aovs[2].aov_name" -type "string" "indirect_diffuse"; setAttr ".aovs[3].aov_name" -type "string" "indirect_specular";
instead of this:
createNode shadingEngine -n "aiStandard1SG"; addAttr -ci true -h true -sn "aal" -ln "attributeAliasList" -dt "attributeAlias"; setAttr ".ihi" 0; setAttr ".ro" yes; setAttr -s 4 ".aovs"; setAttr ".aovs[0].aov_name" -type "string" "direct_diffuse"; setAttr ".aovs[1].aov_name" -type "string" "direct_specular"; setAttr ".aovs[2].aov_name" -type "string" "indirect_diffuse"; setAttr ".aovs[3].aov_name" -type "string" "indirect_specular"; setAttr ".aal" -type "attributeAlias" {"ai_aov_direct_diffuse","aiCustomAOVs[0]", "ai_aov_direct_specular","aiCustomAOVs[1]", "ai_aov_indirect_diffuse","aiCustomAOVs[2]", "ai_aov_indirect_specular","aiCustomAOVs[3]"} ;
I don’t know how the user managed to get the scene into that state ;)
