用maya中nCloth打造气球爆炸实例

修改
鏉ユ簮: 貌似殊途 浏览 7743 日期 2011-10-21 0

气球爆炸的炫酷效果是怎样实现的呢?朱峰社区为您揭秘,本节由朱峰社区老师为大家介绍用maya中ncloth打造气球爆炸实例 。

要建立一个球体的模型,但是我发现如果用一个简单的poly sphere并不能得到很好的动画效果,它两头各有一个极点,最好的模型是完美的四边形镶嵌。我们可以通过subdiv的sphere转成polygon得到,就是下图中间一个球体。(图01)

图01

下一步就是一点建模工作,做出一个气口,我做的很丑,大家应该整的比我好。(图02)

图02

建模完成以后,先让它结算一下,看一下大概的结果,注意,这里只是检查一下模型,在真正结算之前还有很多工作要做。(图03)

图03

这一步就是建立tearable constraint,通过选择vertex点来指定碎裂的路径。

真实的气球爆炸不是像我画的那样,但为了好看,我就多画了几道。ncloth的约束有一点不方便的地方就是所有的约束做出来都是一个名字:dynamicconstraint,所以我们最好根据不同的类型重命名一下。(图04)

图04

我将tearable constraint的glue strength打到了1,代表点之间会牢牢的粘在一起,不会分开。需要注意的是,glue属性是和场景中物体的大小关联的,如果glue值打到1,布料还是会分裂,或者相反布料无法分裂,就需要调节一下glue strength scale的值。

在glue strength的数值为1的情况下,我才能继续解算布料的initial state。

在做完这一步以后,有一点需要注意:如果需要在tearable以后进行诸如添加新的ncloth约束,绘制vertexmap等操作,必须在inputmesh上进行。

我希望气球瘪气的时候是成长条状伏在地面上 (这里的“地面”,我使用了nucleus节点下的ground plane虚拟了一个高度为0的地面),办法有很多,如果你的机器性能较好,可以使用interactive playback实时地拖拽布料直到满意,我用的方法是做一个模子,帮助布料塑形。一旦对初始状态满意,记得使用edit ncloth-> initial state -> set from current保存当前状态。(图05)

图05

这就是我解算完成的气球的初始状态。(图06)

图06

当完成tearable constraint以后,我们要考虑一件事情,什么时候tearableconstraint会发生作用。

当我们施加了t.cnstraints以后,在解算的第一帧,maya便完成模型的分割,根据gluestrength的数值来决定布料对于外界施加力的“灵敏度”,gluestrength数值为0时,布料一旦开始解算就会分裂,相反为1时,布料不会分裂(gluestrengthscale==1)。

在这里,就是气球对内部压力的“抵抗”。好在maya为我们预置了很多不同的属性组合产生不同的效果,我们可以在nclothshape节点的presets里面选择一个适合的start point,比如solid rubber (固体橡皮),把stretchres调低,或者最中性的tshirt,调高一点damp,减小摩擦就可以得到想要的效果。

下面是我的设置。(图09)

图09

至于布料的漂浮,方法不下四五种,还可以互相组合,最简单、最直接的就是将重力方向反一下,气球就会上举,根据气球充气变大的速度,加上动画即可。(图10)

图10

最后的收尾工作

在完成以上的步骤以后,反复调试数值组合,我们要收拾一下气球破裂以后的残局。

虽然气球破碎了,但是,所有的相关属性和节点都还在起作用,包括pressure,所有的constraints,还有布料本身的自碰撞,如果不关闭这些属性,那么气球破裂以后,那些碎片会上下翻飞最后扭做一团!

处理的方法也很简单,直接在一些boolean值上k动画,在爆破后关闭所有的约束和自碰撞以及preesure,只留下和地面以及其他passiveobjects的碰撞,贴上一些例子,注意这些tangents都是stepped的。(图11、图12)

图11

图12

评论

{{ username ? username.charAt(0).toUpperCase() : '?' }}
Ctrl+Enter 发布
{{ (c.username || c.author_name || '?').charAt(0).toUpperCase() }}
{{ c.username || c.author_name }} {{ Utils.formatDate(c.created_at) }}