因此,我知道在Mel和Python中有一堆镜像blendshapes代码,但是我想尝试自己制作一个。对于初学者来说,创建一个对象:任何对象,只要将其命名为“ faceMask”就可以了。在启动脚本之后,为您的blendshapes设置一个名称前缀(我将其命名为Test1),勾选“创建蒙版混合”,然后只需选择它并单击“加载主对象”即可加载“ faceMask”:然后单击“镜像” Blendshapes”,您应该得到一个可编辑的镜像。只需打开“ faceBlend” blendshapes类别中的blendshapes,然后尝试左形状和tada!你有第一个混合形状
但是,现在我遇到了两个问题,那就是当我想创建第二个Blendshape时:假设我将第二个Blendshape命名为“ Test2”,然后选中“ Add to Mask Blend”,它会创建其他所有东西:但是我希望它将任何将来的blendshapes添加到“ faceBlend” blendshape节点,并且无论我键入什么命名约定或代码变体,它都会失败并且不会添加Blendshapes。
我遇到的第二个问题是,我希望使用默认的0而不是1创建包装的“ maxDistance”属性,但是无论我看起来如何,都没有答案。我将在下面的代码中发布,以供任何愿意摇摆的人使用,谢谢您的帮助和时间。
我只想知道:用于将blendshapes添加到现有blendshape节点的python代码是什么,以及用于设置环绕变形器的maxDistance的代码是什么?
import maya.cmds as cmds
from functools import partial
if cmds.window("dumWin", exists =True):
cmds.deleteUI("dumWin", window=True)
myWindow = cmds.window("dumWin",t='DS Face Blendshape Builder', toolbox=True)
column = cmds.columnLayout(adj=True)
nodeNum1 = 0
nodeNum2 = 0
def nameBlend(*args):
cmds.textField('name_text', e = True)
def SetSource(*args):
global source
selection = cmds.ls(sl=True)
if len(selection) != 1:
source = ""
print( "Select one object" )
else:
source = selection[0]
cmds.textField('source_text', e=True, text = source)
def mirrorBlendShape(*args):
namePref = cmds.textField('name_text', q=True, text=True)
L_Shape = cmds.textField('source_text', q=True, text=True)
R_Shape = cmds.textField('source_text', q=True, text=True)
W_Shape = cmds.textField('source_text', q=True, text=True)
cmds.duplicate(name = 'L_' + namePref + '_Blend')
cmds.duplicate(name = 'R_' + namePref + '_Blend')
cmds.duplicate(name = namePref + '_Wrap')
cmds.blendShape ('L_' + namePref + '_Blend', namePref + '_Wrap',en=1,w=(0, 1))
cmds.scale(-1,1,1, namePref + '_Wrap')
cmds.move(-3,3,0, 'L_' + namePref + '_Blend')
cmds.move(-3,0,0, 'R_' + namePref + '_Blend')
cmds.move(-3,0,0, namePref + '_Wrap')
cmds.group('L_' + namePref + '_Blend','R_' + namePref + '_Blend',namePref + '_Wrap', n= namePref + '_Grp')
cmds.select('R_' + namePref + '_Blend', namePref + '_Wrap')
cmds.CreateWrap()
#cmds.setAttr(".maxDistance", 0.0)
if nodeNum1 ==1:
cmds.select('L_' + namePref + '_Blend','R_' + namePref + '_Blend', 'faceMask')
cmds.blendShape(n= 'faceBlend')
cmds.select('faceMask')
if nodeNum2 ==2:
cmds.select('L_' + namePref + '_Blend', 'R_' + namePref + '_Blend', 'faceMask')
indexNum = 0
cmds.blendShape(faceBlend, edit = True, target =(indexNum, faceBlend, 1))
indexNum = indexNum+1
cmds.select('faceMask')
def UI():
cmds.columnLayout
cmds.text('Set blend name prefix')
cmds.textField('name_text', editable = True)
cmds.radioCollection()
cmds.radioButton (label='Create Mask Blend', onCommand = "nodeNum1 = 1", offCommand = "nodeNum1 = 0" )
cmds.radioButton (label='Add to Mask Blend', onCommand = "nodeNum2 = 1", offCommand = "nodeNum2 = 0" )
cmds.textField('source_text', editable = False)
cmds.button( label="Load Main Object", c = SetSource)
cmds.separator ( style = 'in')
cmds.button( label='Mirror Blendshapes', c = mirrorBlendShape)
cmds.setParent('..')
UI()
selection = cmds.ls(sl=True)
cmds.showWindow(myWindow)
根据我的期望,我希望环绕变形器上的最大距离为零,并且我希望“添加到蒙版混合”复选框可以将以后创建的所有将来的混合形状添加到已创建的现有blendshape节点中在主对象上,而不只是创建一个新的blendshape节点。谢谢您的帮助。