Maya六种方法将物体吸附在模型上
Maya 六种方法将物体吸附在模型上
好久没写教程分享经验了,因为出来工作后一直没有电脑(都腐败到摄影器材去了,==!),也很忙就一直没时间整理。今天和大家分享下这段时间积累的一些关于将物体吸附在模型表面上的方法。以下多数方法我都在实际项目中测试和使用过。
rivet
rivet 脚本可以说是实现面吸附的最经典做法,并且在此基础上发展出了其它更成熟的插件。主要由curveFromMeshEdge 、loft 、pointOnSurfaceInfo 几个节点来实现。
用法:选polygon 上任意两边,执行rivet ,在两边之间会创建一个locator ,用此locator 去约束任意你想吸附的物体。
缺点:1、只能用在polygon 上。
经常出现模型变形时会翻转的情况,解决起来需要用到复杂的方法。
模型smooth 后会飞掉,因为smooth 后模型上原有边的ID 号变了,curveFromMeshEdge 节点里记录的值就失效了。
.
rivetEX
rivet 的增强版,可实现单边创建吸附,还可以在nurbs 面上选Isoparm 线、在nurbs 线上选点来吸附。
用法:选模型一条或两条边,或者nurbs 线上的点,执行rivet 即可。创建出来的locator 还有属性可调节位置,原理是通过改变UV 值的方式。
缺点:除了可以用在polygon 之外的物体上以外,其它缺点和rivet 一样。 .
hyperRealMeshParent
来自当年Alias 超写实绑定系列里的插件,含金量相当高,核心上还是rivet ,它利用closestPointOnMesh 节点(现已经改为nearestPointOnMesh )来计算被吸附物离模型的最近距离位置,实现同时对多个物体做吸附。此外还有算法来查找最佳对边来杜绝模型变形时发生翻转的情况。真不愧是大师写的插件。
用法:先在插件管理器里开启decomposeMatrix 和nearestPointOnMesh 两个插件,选择吸附物,往后选择的全部是被吸附物,执行hyperRealMeshParent ;
缺点:1、依然不能smooth 模型。
2、会在模型上产生太多节点,影响性能。
P.S :提供我修改过的hyperRealMeshParent 下载,原先版本仅适用与Maya7或更早版本,hyperRealMeshParent.zip
.
djRivet
应该说是hyperRealMeshParent 的改良版,但核心技术上用的是hair 里的毛囊节点,此法彻底解决了模型smooth 后飞掉和变形翻转的问题,此外还可同时对多个物体做吸附。
用法:选择一个或多个被吸附物体,最后选吸附体,执行djRivet 即可。操作和hyperRealMeshParent 相反。
缺点:毛囊法和UV 有关,UV 变了毛囊也发生位移了,在模型未分好UV 前别用!
.
粒子发射器
此法跟毛囊法类似,就是选面在面上创建粒子发射器,发生率打零即可。此法缺点也是相当明显的,首先还是smooth 的问题,然后就是创建出的发射器不会随着面的形变有角度上的改变,若用发射器对被吸附体做父子约束,模型发生形变时对被吸附的影响仅是位移上的,旋转始终为零。当然可以在模型中心或什么地方放一个locator 对发射器做目标约束修正这个问题,但显然太麻烦了,我从来没有在项目中使用此法。
.
SurfaceAttach
来自肌肉系统里的SurfaceAttach 可以说是最成熟的技术,算是提取了hyperRealMeshParent 和rivetEX 的精华改良而来,针对模型smooth 和变形翻转它都提供了解决方案,被整合进Maya 当之无愧!这是我目前在项目中稳定使用的技术,还利用它写了一个批量将骨骼钉在选定模型面上的插件。
用法:选择polygon 的两边或面,或者选择nurbs 进入surfacepoint 模式,在面上选一个位置,执行Muscle –>BonusRigging–>SurfaceAttach。创建出来的cMuscleSurfAttach 吸附物有一个FixPolyFlip 属性,默认为off ,若在模型变形时出现翻转的情况,打为on 即可。模型smooth 后飞掉,选择所有cMuscleSurfAttach 物体,执行BonusRigging 菜单里的FixSurfaceAttachtoallowforPolySmooth 即可还原正确位置。
以上是我目前所知道的所有方法,此外我还看到一些商业插件可实现吸附(没搞到手),但原理上应该离不开以上这些,尤其是经典的rivet 。