HumanIKを使ったリターゲットをわざわざ手動でぽちぽちやるのが面倒なのでいざ自動化!
と思ったら一箇所詰まったので覚書です。
「scripts/others/hikGlobalUtils.mel」あたりにHumanIK関連のスクリプトがあり、どうやらSourceの指定は「hikSetCurrentSourceFromCharacter」というコマンドでできそうなんですが、実行しても微動だにしません。
Sourceは枠で囲った部分で、ようはoptionMenuをスクリプトで変えちゃえば動きそうです。
というわけでちょっと調べてみると、フォーラムに同じような内容の投稿がありました。
forums.autodesk.com
というわけで以下のようにしてとりあえず解決。
from maya import cmds
from maya import mel
_HUMAN_IK_SOURCE_MENU = "hikSourceList"
_HUMAN_IK_SOURCE_MENU_OPTION = _HUMAN_IK_SOURCE_MENU + "|OptionMenu"
def retarget(source, target):
u"""リターゲットを実行
Args:
source (unicode): ソースのキャラクター
target (unicode): リターゲット先のキャラクター
"""
mel.eval('hikSetCurrentCharacter("{0}")'.format(target))
items = cmds.optionMenuGrp(_HUMAN_IK_SOURCE_MENU, q=True, ill=True)
for i in xrange(0, len(items)):
label = cmds.menuItem(items[i], q=True, l=True)
if label.lstrip() == source:
cmds.optionMenu(_HUMAN_IK_SOURCE_MENU_OPTION, e=True, sl=i + 1)
mel.eval('hikUpdateCurrentSourceFromUI()')
mel.eval('hikUpdateContextualUI()')
mel.eval('hikControlRigSelectionChangedCallback')
break
つらみ。