📖
MayaのaliasとArnold AOVs
aliasとArnoldでハマったのでメモ
aliasとは
mayaでattributeに付けられる別名のこと。
ノード毎に設定される。
aliasの設定方法
import maya.cmds as cmds
cmds.aliasAttr('myAlias', 'myNode.myAttr')
コードを実行するとノードに attributeAliasList というアトリビュートが追加される。
aliasが設定されたattributeは、cmdsコマンドなどでもalias名でアクセスできる。
エイリアスの子要素はaliasを使ってアクセスができないので注意。
例えば、以下のような場合はエラーになる。
#OK
cmds.getAttr('myNode.myAlias')
#NG
cmds.getAttr('myNode.myAlias.child')
arnold AOVs
aovsモジュールを使うと、AOVを追加することができる。
追加時に、shaderにaliasが設定される。(referenceノードでない場合)
import mtoa.aovs as aovs
aovs.AOVInterface().addAOV(aovName="test")
aliasがaiCustomAOVs[N]につく場合とaliasがaiCustomAOVs[N]の子であるAovNameにつく場合がある。何故?
(初回作成時は、aiCustomAOVs[N]が変更される。)
aliasの取得方法
aliasの取得はcmdsでは出来なそうなので、python api2.0を利用する。
getAliasList()はタプルで元の名前とエイリアス名で返す。
from typing import Dict, Tuple, Optional
import maya.api.OpenMaya as om2
def get_alias_dict(node_name) -> Dict[str, str]:
'''
エイリアスを取得する
Args:
node_name(str): ノード名
Returns:
Dict: エイリアスの辞書
{alias_name: real_name}
'''
selection_list: om2.MSelectionList = om2.MSelectionList()
selection_list.add(node_name)
node_mobject = selection_list.getDependNode(0)
dep_node: om2.MFnDependencyNode = om2.MFnDependencyNode(node_mobject)
alias_list: Tuple[Optional[Tuple[str, str]]] = dep_node.getAliasList()
if not alias_list:
return {}
return dict(filter(None, alias_list))
テーブルウィジェットでAliasと実際の名前を表示するUIを作成しました。
その他
referenceノードにはaliasが設定できない+引き継げないので、aliasを取得する際は注意が必要。
(mtoaのAOVモジュールを修正すればいける。)
aliasの取得方法わかんなくて困ってたけど、mtoaのコード見たら書いてあった。
arnoldで困ったらmtoa見れば結構何とかなるかも。
Discussion