碧血红天的HomePage

Maya插件教程 — 4.10 操作BlendShape

形变器可以把相同的拓扑的模型融合到一起,里面有可以分为三种类型。我们这里使用代码获取形变器中的数据。比如获取当前有哪些BlendShape对象,每个BlendShape对象有哪些目标,每个目标又有多少InBetween对象。

4.10.1 获取BlendShape对象

现在我们在形变器中添加一个简单的BlendShape对象。

我们能够使用ls函数直接过滤我们需要的对象类型,方法如下:

import pymel.core as pm
bs = pm.ls(type="blendShape")
print(bs) #[nt.BlendShape(u'blendShape1')]

ls函数获取出的对象都是数组结构,我们可以看见现在数组中有一个值,就是blendShape1,跟我们上图中的第一个层级节点名字一样。每个blendShape节点下面又能添加很多的目标,就是上面的pSphere2这个节点,我们通过BS节点的listAliases方法获取。

print(bs[0].listAliases())
#[(u'pSphere2', Attribute(u'blendShape1.weight[0]'))]

我们可以看见次方法返回的是一个元组,第一个参数代表这个target的名字,第二个参数是这个target其实就是BS节点的一个属性,我们可以用下面的方法直接获取这个Target的值:

import pymel.core as pm
c = pm.getAttr('blendShape1.weight[0]')
print(c) #0.476
pm.setAttr('blendShape1.weight[0]',0.9)

我们可以看见BS节点也存在一个值,目前图像中是1,这个值我们也能获取和设置,方法如下:

import pymel.core as pm
c = pm.getAttr('blendShape1.envelope')
print(c) #1.0
pm.setAttr('blendShape1.envelope',0.8)

在每个Target下面还能添加Inbetween节点,次节点获取稍微麻烦一点,我们可以使用BS的ibig获取当前编辑器中存在多少InBetween组:

import pymel.core as pm
c = pm.ls(type="blendShape")
print(c[0].ibig)
for k in c[0].ibig:
    print(k)
    print(k.index)
#blendShape1.inbetweenInfoGroup[0]

组的索引就是BS节点的索引,我们能够通过index 获取这个值,现在我们得到这个InBetween的目标,现在我们就获取它的名字:

import pymel.core as pm
import re
c = pm.ls(type="blendShape")
e = c[0].ibig[0].ibi
for k in e:
    print(k.attrName())
    matchObj = re.search('(?<=inbetweenInfo\[5)\d+(?=\])', k.__str__())
    value= float(matchObj.group())/1000

1 评论

  1. жас қосылып, 1 жас туған күн ән скачать
    көкөністер мен жемістер туралы тақпақтар, өрік туралы тақпақтар алпамыс
    мектепке барады, ең алғаш мектепке барады заңмен міндеттеген мемлекет спойлер марк 2
    90 купить, обвес на марк 2 90

发表评论