Maya DG nodes笔记

写DG node前,学习了一下maya help里的文档。翻译、总结了主体内容,仅作个人笔记、加深理解用,大虾们请无视。

DG(Dependency Graph)就是DG nodes连接而成的节点网络。DG node即是接受并依据输入来创建输出的计算节点。打开maya的Hypergraph,你在场景里所做的一切在这里都能找到根源,DG就像是maya的核心,而maya就有点DG引擎的感觉。


上图的每个小方框都是一个DG node,三个连在一起就组成一个DG网络。连接小方框的箭头即是数据的流向,这里的数据可以是数字、曲线、曲面等(甚至也可以是自定义的数据类型)。因为节点不一定只是单输入输出,功能比较复杂的节点往往是是多输入输出,这种情况我们就需要指定哪些输入影响与哪些其相关的输出,这在API里是通过MPxNode::attributeAffects或者MPxNode::setDependentsDirty类方法实现的。

现在输入输出都有了,但maya如何知道什么时候该更新输入输出、重新计算数据流呢。maya有一套完善的更新机制。每当一个节点的输入参数改变时,与其相关的输出就会被mark dirty(即是做上需要重新计算的记号),如果这个输出也作为下一个节点的输入,这个输入也会被mark dirty,依此类推,直到所有需要重新计算的属性参数都被mark dirty为止。这些mark dirty的属性参数将会在maya下次刷屏或动画回放(playback)时统一重新计算,计算是通过调用nodes里的compute方法实现的。maya help里对计算和数据流有一段形象的描述,摘引如下:

The data flowing through the graph isanalogous to water flowing through pipes. The pipes themselves are theconnections but unless they have data to redirect and modify they are notactually doing anything. Extending this analogy, the nodes are like taps,showers, fountains, WCs, springs, and water piks. They all do something with the water in their own unique way but they must have water to operate.

计算将在第一个包含没有被mark dirty的输入属性的节点上停止。以curve resolve为例,下图是其DG网络:


若在场景中移动curve的cv点,1,2,3箭头所连接的输入输出都被mark dirty,在下次刷屏时,这些相关连接的属性将全部重新计算。计算会在curveshape节点处停止,因为它的输入属性没有被mark dirty。

使用DG也有一个副作用,使得你不容易直接控制场景中的物体。还拿上面curve revolve做例子,当试图移动生成surface上的cv点时,你会发现被移到新位置的cv点在下次重新计算时又回到原来的位置。这是因为所有compute方法都已预先设置好,当重新计算时,revolve节点就会undo你刚刚所做的操作。

但这在建模时是不可接受的,因为对模型个别地方的微调是需要的。maya通过pnts(对mesh)和tweat node(对nurbs surface)解决了这个问题。pnts和tweat node所实现的功能就是存储局部修改的信息,使得在重新计算时,修改的数据不会丢失或被覆盖,依然会对模型产生作用。

中心思想大约概括如上,感觉像回到了高中做语文阅读。不知道我如履薄冰的理解水平有没有消融殆尽。
秋冻春捂,阴雨绵绵,期待晴天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值