合并后以世界中心为中心的对象轴

时间:2018-12-04 12:33:22

标签: pivot maya centering

我是Maya的新手,我有一个无法找到答案的问题。 当我将2个对象组合在一起时,组合对象的枢轴是世界的中心,因此我正在使用Modify-> Center Pivot选项。

但是在此之后,该对象的中心与其他对象不同,例如,当我将其位置设置为(0,0,0)时,它不是世界的中心,而且很烦人。

我知道我可以将合并的对象移到世界的中心,然后使用Modify-> Center枢轴,但是它不准确且令人讨厌。

我缺少什么吗?如何使对象的轴心居中并保持相对于世界的位置?

非常感谢

这就是我的意思,因为您可以看到对象位于(0,0,0)的位置,而不是世界的中心

This is what I mean, as you can see the object is in (0,0,0) location but not the world's center

1 个答案:

答案 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节点而不是脚本的节点组合,您也可以实现相同的效果。