【maya】【绑定/动画】你必须了解的求值模式(Evaluation Mode)

 

 

该文章中的视频都在微信公众号(DanggooTD)相关图文中,感兴趣的话可以关注了解详情~

 

最近同事又碰到了绑定角色无法正确变形的问题:调整属性时变形正常,但是key了帧在时间轴上拖动时,变形不正常。其实这个问题自从maya2016推出以来就一直存在,今天就把这个问题具体说一下。

 

动画的朋友们肯定都知道一个免费的绑定Mery。如果你恰好在Maya2016以上版本用的这个rig的3.5或者3.4甚至以下版本,你肯定碰到过这个问题:

 

图1:key了帧以后的Mery手脚IK在拖动时间滑块时变形不正常

 

为了具体的描述问题,这里先放一个视频:

 

 

 

其实视频中的解决方法虽然能解决问题,但是这就不能充分发挥Parallel的性能了,后者是从Maya2016后全新推出的求值模式(也是默认求值模式)——并行求值,可以充分发挥CPU性能(从单核到多核)。你瞧人家官网介绍的多好:

 

大意为:我们已经听到你们的大声呼唤啦!跟迟钝的playback speed say 拜拜吧!!快来体验全新的求值模式啦!甚至为此出了白皮书,希望能大力普及相关知识:

http://download.autodesk.com/us/company/files/2017/UsingParallelMaya.html?_ga=2.261106187.768422484.1551455898-1022843392.1551007245

其实还可以这么来(仍然保持Parallel求值模式):

打开Windows——General Editors——Evaluation Toolkit,勾上禁用求值管理器(这个管理器用于创建并行友好的场景描述):

 

你就会发现Mery又可以正常的变形了。当然,勾上此选项只用于调试目的。所以,要想彻底解决该问题,需要跟绑定的朋友商量,请使用Parallel模式支持的变形器进行绑定。

 

那对绑定的朋友来说,究竟那些变形器求值器不受支持呢?如果你觉得白皮书太难懂(虽然我还是建议绑定的朋友们仔细研读),可以看看帮助手册中的相关内容:

http://help.autodesk.com/view/MAYAUL/2017/CHS/?guid=GUID-27845E36-B873-42EB-B06F-9FE983E1080D

其中大概列出的不受支持的变形器求值器为:

限制

  • 每个变形链均必须以没有输出连接的网格节点结尾。这意味着,若要受支持,网格不能具有 pointOnPoly 约束、毛囊或其他任何输出连接。

  • 仅支持 blendShape、skinCluster、簇、softMod 和调整节点以及特定功能。

 

除了变形器求值器,还有其他的一些求值器限制:

动力学求值器

限制

  • 在某些情况下,使用求值管理器(进而使用动力学求值器)的动力学模拟生成的结果与基于 DG 的求值不同。但是,无论动力学模拟发生在 Maya 视口中还是发生在 Maya 批处理中,这些结果均一致。

  • 动力学求值器不支持旧版动力学(例如,旧版粒子和流体)。如果在场景中找到不受支持的动画节点,则会禁用并行求值。

     

 

        还有冻结求值器和不可见求值器,详情可以查看帮助手册。

 

另外关于求值器的一个非常重要的一点,请慎重在表达式中添加getAttr和setAttr,正如白皮书中所说:

 

Tip. If your scene contains expression nodes, that use getAttr, the DG graph will be missing explicit dependencies. This will result in an incorrect EG. Expression nodes also reduce the amount of parallelism in your scenes (see Scheduling Types for details). Consider removing getAttr from expressions and/or using utility nodes.

 

译:如果你场景中包含表达式节点,使用了getAttr,此时DG图将缺少显式dependence节点。这就会导致不正确的求值图(由求值管理器创建,用于并行描述场景)。表达式节点还会减少场景中的并行度(详情请参阅白皮书中相关内容)。请考虑从表达式中移除getAttr,和/或使用替补节点。

 

总之,如果你发现角色在播放动画时无法正确变形,请暂时将求值模式更改为DG。如果你的场景经常崩溃(尤其是拖动时间轴时),请检查表达式,或者更改求值模式为DG。

 

补充:

关于DG模式和Parallel模式中你可能感兴趣的一些点:

DG模式是采用脏(dirty)传播模式来对场景进行求值的,按照节点连接顺序从上游到下游每次只对一个节点进行求值。已经求值的节点标记为“脏”,这样就可以避免重复求值:

 

 

 

而在新的并行求值中,这种脏传播机制将不复存在。使用Profiler(Windows——General Editors——Profiler)进行场景分析,分别在DG模式和Parallel模式下运行时,比较下面两种方式的差异:

 

 

单核变成了多核,速度大大提升。

 

不止如此,为了提高场景性能,变形器求值器将变形器节点链的 CPU 求值替换为了 GPU 求值。如果你勾选了GPU-override选项,maya会将变形器求值交给GPU,这会大大加快变形求值的速度。

 

本文只是本人对Maya求值的一些片面理解,感兴趣的话可以点击阅读原文去官方网站去全面了解。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值