当前位置:   article > 正文

用Matrix在Maya2020里实现对offsetParentMatrix约束的切换_maya矩阵代替约束

maya矩阵代替约束

在Maya2020里有了offset parent matrix 属性,这样用matrix对物体做约束的时候就可以少很多节点,且结构更清晰简洁,那么下面就实现下这个功能。

首先创建两个locator,一个小球,用来模拟这个小球收到这两个locator的约束,而且是可以切换约束,即可以受locator1约束,也可以受locator2约束。

在这里插入图片描述

既然是用matrix来做约束,那么就再创建两个multMatrix节点,用这两个matrix节点的主要目的是做带有便宜值的matrix约束,就类似于Maya的parentConstraintkeep offset功能,首先我们要求出这两个locator和小球的分别的初始偏移值,可以用下面的代码来获得:

import maya.api.OpenMaya as OpenMaya

node = 'pSphere1'
driver = 'locator1'
offset = (
        OpenMaya.MMatrix(cmds.getAttr("{}.worldMatrix[0]".format(node)))
        * OpenMaya.MMatrix(cmds.getAttr("{}.matrix".format(node))).inverse()
        * OpenMaya.MMatrix(cmds.getAttr("{}.worldInverseMatrix[0]".format(driver)))
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

分别获取完他们的初始值,然后需要把这个初始值复值给multMatrix的matrixIn[0]

cmds.setAttr("{}.matrixIn[0]".format(mult), list(offset), type="matrix")

  • 1
  • 2

然后再把locator1的初始值链接到multMatrix节点上的matrixIn[1]上面

在这里插入图片描述
locator2也做如此操作,也就是让locator的自身矩阵和偏移的矩阵相乘,得到新的矩阵

要想让这两个矩阵进行切换,那就需要另一个节点,blendMatrix
用下面的代码将小球的offset parent matrix值设置给blendMatrix的input matrix里

m = OpenMaya.MMatrix(cmds.getAttr("{}.offsetParentMatrix".format('pSphere1')))
blend = 'blendMatrix1'
cmds.setAttr("{}.inputMatrix".format(blend), list(m), type="matrix")
  • 1
  • 2
  • 3

再分别将multMatrixmatrix sum属性和blendMatrixtarget Matrix相连,节点图如下
在这里插入图片描述
做到这一步需要我们对小球也就是被约束的物体做些设置,首先给小球加个切换属性,Enum类型的,分别设置成foot,root,然后再添加两个属性

cmds.addAttr('pSphere1', ln="spaceUseRotate", at="bool", defaultValue=True, keyable=True)
cmds.addAttr('pSphere1', ln="spaceUseTranslate", at="bool", defaultValue=True, keyable=True)
  • 1
  • 2

在这里插入图片描述
然后将blendMatrix的output matrix和小球的offset Parent Matrix相连

在这里插入图片描述
接下来就是实现他们的属性相互切换了,用到condition节点,用小球的space属性和两个condition节点的first term相连,然后再用out color R去分别连blendMatrix的weight

在这里插入图片描述
在这里插入图片描述
condition1和2分别这样设置的

在这里插入图片描述
在这里插入图片描述
再把小球的space use rotate和blendMatrix节点的target[0]的use rotate相连,space use translate和blendMatrix节点的targe[1]的use translate相连,这两个属性主要控制locator对小球的translate生效还是rotate生效,还是两者都生效。

在这里插入图片描述

到此整个网络就连好了,如下图:

在这里插入图片描述
在这里插入图片描述

欲听更多此和尚念得经,可以直奔TDMonk大堂

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/418573
推荐阅读
相关标签
  

闽ICP备14008679号