我是Maya的新手,我有一个无法找到答案的问题。 当我将2个对象组合在一起时,组合对象的枢轴是世界的中心,因此我正在使用Modify-> Center Pivot选项。
但是在此之后,该对象的中心与其他对象不同,例如,当我将其位置设置为(0,0,0)时,它不是世界的中心,而且很烦人。
我知道我可以将合并的对象移到世界的中心,然后使用Modify-> Center枢轴,但是它不准确且令人讨厌。
我缺少什么吗?如何使对象的轴心居中并保持相对于世界的位置?
非常感谢
这就是我的意思,因为您可以看到对象位于(0,0,0)的位置,而不是世界的中心
答案 0 :(得分:1)
发生的事情是,当您使用中心枢轴时,与其影响对象的平移值,不如使用对象的枢轴来偏移它(本地旋转枢轴属性)。因此,即使您的平移全为零,枢轴的值也会导致您的对象偏离世界原点。
尽管了解上述内容是有道理的,但Maya如何处理它仍然很烦人。
以下是一个脚本,它将尝试解决该问题。本质上,它所做的就是获取其枢轴值,将其清零,并将其添加到其转换中:
Maya 2018
import maya.cmds as cmds
sel = cmds.ls(sl=True)[0] # Get selection.
cmds.xform(sel, cpc=True) # Center its pivot. Comment this out if you don't want to force it to center and use the pivot as-is.
pivots = cmds.xform(sel, q=True, piv=True)[:3] # Get its pivot values.
temp_nul = cmds.createNode("transform") # Create a temporary transform.
cmds.matchTransform(temp_nul, sel) # Align the transform to our object.
try:
cmds.xform(sel, piv=[0, 0, 0]) # Zero-out object's pivot values.
cmds.move(-pivots[0], -pivots[1], -pivots[2], "{}.vtx[*]".format(sel), os=True, r=True) # Negate and move object via its old pivot values.
cmds.matchTransform(sel, temp_nul) # Align the object back to the temporary transform, to maintain its old position.
finally:
cmds.delete(temp_nul) # Delete temporary transform.
cmds.select(sel) # Restore old selection.
Maya 2016和<< / strong>
import maya.cmds as cmds
import maya.mel as mel
sel = cmds.ls(sl=True)[0] # Get selection.
mel.eval("CenterPivot;") # Center its pivot. Comment this out if you don't want to force it to center and use the pivot as-is.
pivots = cmds.xform(sel, q=True, piv=True)[:3] # Get its pivot values.
old_tm = cmds.xform(sel, q=True, ws=True, m=True) # Get its transform matrix.
temp_nul = cmds.createNode("transform") # Create a temporary transform.
cmds.xform(temp_nul, ws=True, m=old_tm) # Align it to the matrix.
cmds.xform(temp_nul, os=True, r=True, t=pivots) # Move it to include the pivot offsets.
new_tm = cmds.xform(temp_nul, q=True, ws=True, m=True) # Store it's transform matrix to align to later.
try:
cmds.xform(sel, piv=[0, 0, 0]) # Zero-out object's pivot values.
cmds.move(-pivots[0], -pivots[1], -pivots[2], "{}.vtx[*]".format(sel), os=True, r=True) # Negate and move object via its old pivot values.
cmds.xform(sel, ws=True, m=new_tm) # Align the object back to the temporary transform, to maintain its old position.
finally:
cmds.delete(temp_nul) # Delete temporary transform.
cmds.select(sel) # Restore old selection.
选择您的对象,然后执行脚本以运行它。我在具有随机旋转的组合对象上对其进行了测试,同时将其作为具有随机旋转的对象的父对象。似乎没有弹出就可以了。
对于使用polyMoveVertex
节点而不是脚本的节点组合,您也可以实现相同的效果。