advanceskeleton插件分身体和表情单独绑定的时候合并表情步骤
advanceskeleton插件分身体和表情单独绑定的时候合并表情使用的代码以及合并步骤
1.身体单独绑定
2.表情单独绑定
3.合并步骤
①原有adv表情文件删掉除了curve组以外所有东西 删除无用节点之后保存curve_ctrl
②原有adv表情文件curve组整个从父级到子级加个facial前缀(这个用于将来放在原地链接属性用) 单独保存整个文件为face_v02
③打开表情face_v02 导入 curve_ctrl 并去掉名词空间
④选择facial前缀的组单独显示(这时候会显示出所有表情facial前缀的控制器),然后框选所有显示出的facial前缀的控制器(注意单独取消face方块表情面板的那个主控制器的选择) 执行下面代码 做一对一链接 之后保存为facial_final
#——————————————华丽分割—————————————————————————————————————————————————————————————————————————————————
##选中facial——
import maya.cmds as mc
myAllReal_ctrl=mc.ls(sl=True)
for a in myAllReal_ctrl:
myHideAttr=a.split("facial_")[1]
myallAttr=mc.listAttr(a,k=1)
myallAttr_01=mc.listAttr(a,ud=1)
if myallAttr:
if myallAttr_01:
for b in myallAttr_01:
if b not in myallAttr:
myallAttr.append(b)
for b in myallAttr:
if mc.getAttr(a+'.'+b,l=1)==0 :
mc.connectAttr(myHideAttr+'.'+b,a+'.'+b,f=1)
if mc.getAttr(a+'.'+b,l=1)==1 :
mc.setAttr(a+'.'+b,l=0)
mc.setAttr(myHideAttr+'.'+b,l=0)
mc.connectAttr(myHideAttr+'.'+b,a+'.'+b,f=1)
mc.setAttr(a+'.'+b,l=1)
mc.setAttr(myHideAttr+'.'+b,l=1)
#————————————————————————————————————————————————————————————————————————————————————————
⑤打开身体绑定,导入facial_final文件 表情里面的模型对身体里的做blendshape融合,表情假控制器P给头部
完成
######+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++############################
###写在后面##我们在制作时候发现合并完之后眼睛follow 属性失效,如遇到请运行下面代码##
import maya.cmds as mc
#
CNNsource=mc.listConnections( 'lowerLid_L.lowerFollowY' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'lowerFollowMultiplyDivide_L.outputY', 'lowerLid_L.lowerFollowY', f=1 )
CNNsource=mc.listConnections( 'upperLid_L.upperFollowY' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'upperFollowMultiplyDivide_L.outputY', 'upperLid_L.upperFollowY', f=1 )
CNNsource=mc.listConnections( 'lowerLid_L.lowerFollowZ' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'lowerFollowMultiplyDivide_L.outputZ', 'lowerLid_L.lowerFollowZ', f=1 )
CNNsource=mc.listConnections( 'upperLid_L.upperFollowZ' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'upperFollowMultiplyDivide_L.outputZ', 'upperLid_L.upperFollowZ', f=1 )
CNNsource=mc.listConnections( 'lowerLid_R.lowerFollowY' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'lowerFollowMultiplyDivide_R.outputY', 'lowerLid_R.lowerFollowY', f=1 )
CNNsource=mc.listConnections( 'upperLid_R.upperFollowY' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'upperFollowMultiplyDivide_R.outputY', 'upperLid_R.upperFollowY', f=1 )
CNNsource=mc.listConnections( 'lowerLid_R.lowerFollowZ' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'lowerFollowMultiplyDivide_R.outputZ', 'lowerLid_R.lowerFollowZ', f=1 )
CNNsource=mc.listConnections( 'upperLid_R.upperFollowZ' ,s=1,d=0 )
if CNNsource:
pass
else:
mc.connectAttr( 'upperFollowMultiplyDivide_R.outputZ', 'upperLid_R.upperFollowZ', f=1 )
###
CNNsource=mc.listConnections( 'upperFollowMultiplyDivide_L.input1' ,s=1,d=0,p=1 )
if CNNsource:
pass
else:
mc.connectAttr( 'Eye_L.rotate', 'upperFollowMultiplyDivide_L.input1', f=1 )
CNNsource=mc.listConnections( 'lowerFollowMultiplyDivide_L.input1' ,s=1,d=0,p=1 )
if CNNsource:
pass
else:
mc.connectAttr( 'Eye_L.rotate', 'lowerFollowMultiplyDivide_L.input1', f=1 )
CNNsource=mc.listConnections( 'upperFollowMultiplyDivide_R.input1' ,s=1,d=0,p=1 )
if CNNsource:
pass
else:
mc.connectAttr( 'Eye_R.rotate', 'upperFollowMultiplyDivide_R.input1', f=1 )
CNNsource=mc.listConnections( 'lowerFollowMultiplyDivide_R.input1' ,s=1,d=0,p=1 )
if CNNsource:
pass
else:
mc.connectAttr( 'Eye_R.rotate', 'lowerFollowMultiplyDivide_R.input1', f=1 )
CNNsource=mc.listConnections( "upperLid_L.upperFollowY" ,s=1,d=0 )
if CNNsource:
CNNsource01=mc.listConnections( CNNsource[0]+'.input1' ,s=1,d=0,p=1,scn=1 )
if CNNsource01 :
pass
else:
mc.connectAttr( 'Eye_L.rotate', CNNsource[0]+'.input1', f=1 )
CNNsource=mc.listConnections( "upperLid_R.upperFollowY" ,s=1,d=0 )
if CNNsource:
CNNsource01=mc.listConnections( CNNsource[0]+'.input1' ,s=1,d=0,p=1,scn=1 )
if CNNsource01 :
pass
else:
mc.connectAttr( 'Eye_R.rotate', CNNsource[0]+'.input1', f=1 )
CNNsource=mc.listConnections( "lowerLid_L.lowerFollowY" ,s=1,d=0 )
if CNNsource:
CNNsource01=mc.listConnections( CNNsource[0]+'.input1' ,s=1,d=0,p=1,scn=1 )
if CNNsource01 :
pass
else:
mc.connectAttr( 'Eye_L.rotate', CNNsource[0]+'.input1', f=1 )
CNNsource=mc.listConnections( "lowerLid_R.lowerFollowY" ,s=1,d=0 )
if CNNsource:
CNNsource01=mc.listConnections( CNNsource[0]+'.input1' ,s=1,d=0,p=1,scn=1 )
if CNNsource01 :
pass
else:
mc.connectAttr( 'Eye_R.rotate', CNNsource[0]+'.input1', f=1 )
############+++++++++++++++++++++++++++++++++########################
欢迎交流
VX:27971533
advanceskeleton插件分身体和表情单独绑定的时候合并表情步骤的更多相关文章
- 限制UITextView的字数和字数监控,表情异常的情况和禁用表情
限制UITextView的字数和字数监控,表情异常的情况和禁用表情 3523FD80CC4350DE0AE7F89A8532B9A8.png 因为字数占一个字符,表情占两个字符.你要是限制15个字 ...
- Chrome插件Visual Event查看Dom元素绑定事件的利器
找这工具找了好久,统一找着了,开发人员不可多得的好东东,收藏做一下分享. 用Chrome插件Visual Event查看Dom绑定的事件 Visual Event简介 Visual Event是一个开 ...
- 一款jquery小插件:实现轻松获取和绑定编辑表单的值(带源码)
实现目的:通常在项目中,编辑页面在前后台需要一个一个框赋值,取值操作,小伙伴们普遍都会感觉繁琐,麻烦.: 实现思路:利用json对象化键值的思想: 好处:方便快速开发,提高开发效率,减少重复性代码: ...
- 使用maven-resources-plugin插件分环境配置
一.项目目录结构 二.pom文件中引入maven-resources-plugin插件和相关的标签 <build> <plugins> <plugin> &l ...
- [转载]Jquery Chosen 插件动态生成option或重新绑定
$(".chosen—select").find("option[value='1']").attr("selected", "s ...
- 在Eclipse上使用egit插件通过ssh协议方式上传项目代码的具体步骤
在Eclipse上使用egit插件通过ssh协议方式上传项目代码 前戏: 使用ssh方式可以不通过https协议,避免直接提供账号密码的方式上传项目到git在线服务器,如Bitbucket.GitHu ...
- Vue 表情输入组件,微信face表情组件
VUE表情包输入组件,先来张成品图看看. 年底了没事干,把以前做过的项目中的组件拿出来再复习一下, 先说说思路吧. 注意: 1. 项目是用vue-cli3.0搭建起来的项目, 参考cli3.0官网地址 ...
- textView中判断文本长度,自定义表情长度为1,emoj表情长度为1,输入限制
static const int MAX_LIMIT_NUMS = 100; /**< 输入个数限制 */ // self.inputNumberTipsLabel 控制器的view上一个用 ...
- 编写一个单独的Web Service for Delphi7(步骤)
1新建一个SOAP Server Application,在提示输入接口时输入MyHello,把所有文件保存在一个叫Ser的目录下,其中一个包含TWebModule1的文件保存为main.pas.在M ...
随机推荐
- H5样式(个人使用)
@*定义全局样式*@ <style> body, ul, li, p, h1, h2, h3, h4, h5, h6, hr, span, form, fieldset, table, t ...
- 微信公众号开发前端获取openId
参考 https://blog.csdn.net/qq_35430000/article/details/79299529
- 单链表ADT
本博客第一篇学术性博客,所以还是写点什么东西: 首先这篇博客以及以后的博客中的代码尽量百分之90是自己写过的: 可能有部分图片和代码是我认为别人更好的故摘抄下来, 本人三观正确,所以一定会表明来源: ...
- MySQL【文本处理函数】的使用方法
文本处理函数 名称 调用示例 示例结果 描述 LEFT LEFT('abc123', 3) abc 返回从左边取指定长度的子串 RIGHT RIGHT('abc123', 3) 123 返回从右边取指 ...
- jS弹出新窗口被拦截的解决方法
使用ajax处理数据,在回调中跳转到或打开新页面,这时就会被浏览器拦截 解决方案:先用window.open打开一个窗口,然后修改该窗口地址 var w = window.open('about:bl ...
- 以太坊Bootstrap和Kademlia算法实现逻辑简介(基于cpp-ethereum)
- c#线程池ThreadPool实例详解
1. 如何查看线程池的最大线程数和最小线程数 static void Main(string[] args) { Console.WriteLine("----------线程池开始,线程I ...
- nginx——配置 Nginx 防盗链
什么是防盗链:简单地说,就是某些不法网站未经许可,通过在其自身网站程序里非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,使得被盗链的那一端消耗带宽资源 (1) 根据 HTTP refer ...
- Javascript学习二---DOM元素操作
Javascript 主要包括:JS的语法,DOM和BOM操作以及ECMAScript语法. 1 获取元素的方法 获取元素方法: 通过ID:document.getElementById(); 一个 ...
- 超低质量的超低起点PYQT ------前言
由于年后要赶一个小工程,以前一直用VB6+sqL2K的做些小玩具一样的桌面项目,低级的不能再低级了,某日幡然醒悟,决定努力跟进潮流的尾巴..匆匆撸了一遍网上的PYTHON基础知识,面向对象,装饰器.. ...