九月maya绑定记录(maya2020)

1.模型迭代

#1.模型迭代,融合变形重新添加太麻烦了。
写一个自动识别连接,并且批量生成到新模型的玩意
-------模型佬迭代模型基本不会保持相同拓扑,但是只要大致形态一样还可以用包裹救一下。用包裹真的好卡好绝望,后面看看学api能不能找到快点的方法--------
如果包裹会崩溃的话那就是模型佬做得面数太多了,把头切出来吧,不然人真的好崩溃
头切出来之后记得做一个和自己身体模型点序一样的备份模型
##(1)查找blendShape连接对象来获取weight。这里还要进一步筛选掉不要的部分。之前看了大佬SSDR的教程,可以直接获取weight对象没有连接,好痛苦,怎么才能这样获取 第九点已解决该问题

cmds.listConnections(aim,source=True, plugs=True, skipConversionNodes=True)

这里获得aim_list列表,这里列表第一个不是所需要的output节点,只需要 aim_list[1:]【获得控制节点,方便后面disconnect和connect】
2024.9.9::果然暴力取output节点不行,有些节点直接连的属性,不会返回output的组。还是返回可是列表手动筛选比较靠谱
##(2)找到连接节点之后根据节点返回blendShape.wehght对象,返回两个对象,前面是driver,后面是driven。这里取第一个,把所有融合变形for循环取出来

weight=cmds.listConnections("nodName",destination=True, plugs=True, skipConversionNodes=True)[1]
### result:['face_bs.openJaw', 'jaw_ctrl.rx']
### 这里的顺序可能会不一样,还没有测试是为啥

这里for循环获得 blendAttr_weight列表【获得融合变形的weight名,方便后面disconnect和connect】
for循环中顺便把模型duplicate出来,重命名

mod = cmds.duplicate(bsMod, name=aim.repalece("{}.".format(bsName), ""))

获得 mod_list列表 【添加新的融合变形后直接删掉】
重新连接控制的话,zip(aim_list[1:],blendAttr_weight)

2.清理场景插件信息

#2.清理场景插件信息
模型佬用一大堆插件不清理,打开慢得要命
(1)查找上下两条信息,删掉中间插件并保存

3.头发总控

#3.动画佬想要头发总控
(1)头发的骨骼轴向一致,创建总控制器直接对层级进行连接
(2)头发比较凌乱,但是想以一个点转,那就在头发上层创建旋转位置完全和总控制器相同的组,用总控制器连接

4.修形驱动

#4.甲方爸爸想要和参考一样的修形驱动,但是没有插件,只能自己扒下来
这里需要大量的断开约束并储存当前约束状态,还需要把驱动关键帧导出来【考虑用json文件储存数据,上面blendShape连接也可以存一下】
(1)被控制物体分为两种状态:多约束,单约束。防止数据太多了,多约束要单独处理
(2)用listConnections查找选中被约束物体的连接,过滤掉重复,获得约束节点。约束节点再listConnections查找到上下两端的对象

QUESTION:这里查找骨骼约束对象还是有点毛病,返回的数据不对,这个项目暂时还不需要,先放着吧,下次再说
:::::因为inverseScale连着的,咋去掉???!!::
写了个pyside窗口,save方法也有点毛病,也记一下,下次再说吧(9.4

  • 这个得用再try过滤一遍,列表里面不需要的东西太多了。东西多了就报错。file_path昨天试过了,不能带中文路径,也报错,好崩溃(9.5
  • 太坑爹了,需要加一个检查场景中是否存在driver目标,如果没有的话要跳过还是要替换成别的
constant_list = []
a = cmds.listConnections(i, skipConversionNodes=True)
                [constant_list.append(i) for i in a if i not in constant_list]
                get_list = []
                for end in constant_list:
                    b = cmds.listConnections(end, skipConversionNodes=True)
                    [get_list.append(ii) for ii in b if ii not in get_list]
                FrName = str(get_list[0])
                data[FrName] = get_list
        with open(file_path, "w") as file:
            json.dump(data, file)
            print("you save file at :{}".format(file_path))
##返回列表示例[u'null4', u'joint2', u'null4_parentConstraint1']
### 5.warp有个bug
### 6.adv不生成手掌的driver驱动[Fingers_R/L]
### 7.adv表情生成的七七四十九中报错

5.warp有个bug,有些模型导出obj进不去。

不知道是否是在下孤陋寡闻,百度了一下maya模型点变红了,结合另外一个模型再分离之后导出,诡异地好了**

6.如果你的adv不生成手掌的driver驱动[Fingers_R/L],应该是你的FitSkeleton里面手指的属性掉了,要么重新换个新的FitSkeleton,要么把keep custom stored buildPose关掉再生成**

*无语!TD写了个插件,完全没有想到会因为没生成出来手掌的driver控制器,出现了找不到这个就用不了的情况,崩溃!!!!找了一个下午。好报错真的很重要

7.adv表情生成的七七四十九种报错。

今天也是被模型佬无语到的一天,当adv做表情定位出现诡异的事情的时候,你就应该知道,这个模型有问题**
(1)6.10往上的面部生成对模型好像比较有要求,如果你的模型嘴角反向了,不妨看看,模型佬的模型是不是有数值,它不干净!
(2)别看有的模型能对称找到对应两边的点,mirror过去完全重叠,但是,模型佬特意把中间线放在了不是中间的位置,所以你怎么生成唇边线都不在中间!!!!!
模型佬为了锻炼绑定佬检查模型的能力真是煞费苦心,真是防不胜防啊
(3)哦,上次还遇到一个嘴唇除了外围有环线,里面环线是完全连接口腔的模型,作为一个绑定佬,当然不能麻烦模型佬改线,可以直接自己画一个环线,所谓是遇山挖山遇海填土,再烂的模型也得给我生成出来!!
adv表情无语的点就是太不灵活了,最新在写表情的插件,才写到眉毛,十分痛苦。会代码到底是什么感觉啊!!!!!!

8.驱动关键帧获取

a = cmds.setDrivenKeyframe( 'MiddleFinger1_R_F_Ctrl.tx', q=True, driven=True )
cmds.keyframe(a, q=True, valueChange=True)
# 删除通道属性动画
cmds.delete(a, channels=True)

去掉中括号

a = ["pCube2.rotateY"]
b = ["pCube2.rotateZ"]
a = ''.join(map(str, a))
b = ''.join(map(str, b))

9.关于获取属性

获取列表属性
listAttr:
multi【列出多属性的每个当前存在的元素。 list each currently existing element of a multi-attribute

##获取融合变形名称
cmds.listAttr("face_BS.weight",leaf=True,multi=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值