maya中的sets集
前几天,同事问我maya中sets集怎么添加元素,当时脑海中第一下闪过的就是代码实现,但是maya自己究竟有没有菜单实现,这个说实在的当时还真不知道。毕竟几乎没有手动创建过sets集,都是在脚本里面创建的。后来稍微查找了下,maya自身还是有工具可以实现的,具体如下。
1. maya中的sets集的作用
自我认识,sets集可以帮助我们快速选择对象,组件等等。比如在写表情插件时,给嘴巴或眼睛用脚本创建一圈骨骼,然后用骨骼去蒙皮,我一个个选择特别麻烦,用列出所有眼睛骨骼父物体下的子骨骼这种办法又可能会将辅助骨骼添加进去,显然这两种方法都不合适,这时我们就可以为眼睛骨骼和嘴巴骨骼分别创建sets集。注意,sets集里面的元素也可以是sets集,就像列表里面的元素也可以是列表一样。在maya大纲视图中显示为“父子关系”,但这肯定不是父子关系。什么意思呢,就是在maya中不能将物体直接p给sets集,当然也不能用listRelatives这个命令列出sets的子物体。
再举一个例子,比如AdvancedSkeleton5绑定插件,就很好的利用了这个特点进行快速选择操作。上图为adv身体创建的sets集,这里值得注意的是,不管是adv的身体还是表情绑定,当你要导出文件选择导出当前选择时一定要记得选择sets,不然adv重建就会报错。还有一点,比如说项目着急,adv身体和表情绑定不是同一个人做但最终要合并成一个文件时,切记一定要处理好sets集。
有关sets集的更多内容,可参考帮助文档maya sets帮助
2. maya中的sets集的创建
选择一个或多个对象、顶点、面,直接进行创建即可。
3. maya中的sets集的编辑
打开sets集编辑器,在编辑里面可进行sets集的编辑操作。
- sets重命名(大纲视图或者sets集编辑器里双击sets名称可直接进行命名)
- sets增加元素(sets集编辑器点击Edit,然后点击add Selected items按钮,如下图)
- sets删除元素(sets集编辑器点击Edit,然后点击Remove Selected items按钮,如下图)
- 选择sets里所有元素(sets集编辑器点击Edit,然后点击Selecte Set items按钮,如下图)
用脚本实现maya中的sets集的创建与编辑
1. python脚本实现
- pymel实现
import maya.cmds as pc
#选择pSphere所有的顶点
vtx=pm.ls(sl=1)
#创建sets集
vtx_Set=pm.sets(name="pSphere_Vtx")
#列出sets集的方法
dir(vtx_Set)
#选择sets集里面的所有元素,使用asSelectionSet()方法
pm.select(vtx_Set.asSelectionSet())
#移除sets集里面的元素,使用remove()方法一次性可以移除一个元素,移除多个元素可以使用for循环
remove_vtx=("pSphere1.vtx[224]","pSphere1.vtx[225]")
for item in remove_vtx:
vtx_Set.remove(item)
#增加sets集里面的元素,使用add()方法一次性可以增加一个元素,移除多个元素可以使用for循环
for item in remove_vtx:
vtx_Set.add(item)
#重命名sets集,使用rename()方法
vtx_Set.rename("vtx_Sets")
- cmds实现
import pymel.core as pm
import maya.cmds as pc
#选择pSphere所有的顶点
vtx=pm.ls(sl=1)
#创建sets集
vtx_Set=pm.sets(name="pSphere_Vtx")
#选择sets集里面的所有元素
pm.select(pm.sets(vtx_Set,q=1),r=1)
#移除sets集里面的元素,一次性可以移除多个元素
remove_vtx=("pSphere1.vtx[224]","pSphere1.vtx[225]")
pm.select(remove_vtx,r=1)
pm.sets(vtx_Set,rm=1)
#增加sets集里面的元素,一次性可以增加多个元素
add_vtx=("pSphere1.vtx[224]","pSphere1.vtx[225]")
pm.select(remove_vtx,r=1)
pm.sets(vtx_Set,add=1)
#重命名sets集
#重命名sets集,使用rename()方法
pm.rename(vtx_Set,"vtx_Sets")
2. mel脚本实现
mel就相当于把cmds格式换下就可以了,mel写大量代码就有点浪费生命了,书写mel脚本时一定要注意变量前面的$符号以及每局后面的分号(;)。
//选择pSphere所有的顶点存到数组
string $vtx[]=`ls-sl`;
//创建sets集
string $vtx_Set=`sets -name "pSphere_Vtx"`;
//选择sets集里面的所有元素
string $member[]=`sets -q $vtx_Set`;
select -r $member;
//移除sets集里面的元素,一次性可以移除多个元素
string $remove_vtx[]={"pSphere1.vtx[224]","pSphere1.vtx[225]"};
select -r $remove_vtx;
sets -rm $vtx_Set;
//增加sets集里面的元素,一次性可以增加多个元素
string $add_vtx[]={"pSphere1.vtx[224]","pSphere1.vtx[225]"};
select -r $add_vtx;
sets -add $vtx_Set;
//重命名sets集,使用rename()方法
rename $vtx_Set "vtx_Sets";
总结
遇到问题,多动手,多思考,一切都在帮助文档里maya help