建筑倒塌、石块开裂和玻璃破碎这些现象,粗看上去好像都属于碎裂效果,可真到动手做的时候,实际的处理办法并不能全部搅在一起来用。在Houdini里面,刚体破碎到底应该怎么一步一步地做出来,还有那些碎块的层级关系又该怎么去把控,比较推荐的做法是,先借助材质破碎这一类的节点把基础的碎块给生成出来,然后再通过约束的强度和Cluster拼合的手段,让主体部分在初期只裂成几块较大的碎片,等到后续冲击继续加强的时候,再让它进一步散成更细小的块,这样就不至于在模拟刚一开始的时候,碎块就铺得到处都是,完全失去了控制。
一、Houdini怎么做刚体破碎
在Houdini中制作刚体破碎,大部分操作都是放在SOP这个层级里面去完成的,总的大致流程就是,先让模型在几何阶段被切开,然后再把切好的碎块、约束关系连同用来加速的代理几何,一块儿送进解算器里去跑。
1、准备封闭模型
我们得先进到Geometry节点里面,把准备拿来破碎的那个模型整理成干干净净的封闭几何体,像墙体、地面还有玻璃这类东西,最好是分开来单独处理,不要图省事就把好几个对象合并成一大块。要是模型本身存在破面、有重叠的面,或者法线的朝向不太对劲,那么在进行切割之后,就很容易冒出空洞来,后面的模拟也会受影响。
2、添加材质破碎节点
接下来创建一个叫做【RBD Material Fracture】的节点,把刚才理好的模型连接到它的第一个输入口上去,这个节点内建了几种不同的材质类型,比如Concrete对应混凝土、Glass对应玻璃、Wood对应木材,另外还有Custom这种自定义模式,选用的类型不一样,最终碎开来的形态也会跟着发生变化,通常混凝土适合用在墙体和石块上,玻璃类型就适合门窗面板,木材则可以用在木板或者梁柱上面。
3、设置碎块数量
在材质节点里面找到Primary Fracture相关的那些参数,不要一上来就把碎块的数量调得特别大,最好是先用比较低的密度去测试一下,看看切割的范围还有碎块的大致形状,是不是跟自己预想的差不多。如果只想让某些局部区域碎得更厉害一些,可以另外再补上冲击点,或者跑到上游去加一个RBD Paint节点,拿它像画画一样,把更容易碎裂的位置给标出来。按照SideFX官方的说法,RBD Paint这个节点就是通过density属性来控制在哪些地方产生出更多的碎块。
4、接入求解器
最后创建一个【RBD Bullet Solver】解算器,把破碎节点输出的那一堆几何体、约束网络还有代理几何,分别接到它对应的输入口上,这里需要留个心,RBD Bullet Solver的第二个输入是专门用来接收约束关系的,而第三个输入可以换用低精度的代理几何,靠它来提升模拟的计算效率,这样跑起来就不会太卡。
二、Houdini刚体碎块层级怎么控制
碎块的层级控制,并不只是简单地往上面堆数量,真正要花心思去管的,是那些大块和小块在什么时候还牢牢地粘在一起,又在什么条件下才继续往更散的方向去裂。
1、先控制一级碎块
一级碎块扛起来的是整个物体的主体形状,像粗壮的柱子、大片的墙体或者整块的石头,一开始就切得太细的话,模拟刚动起来就会觉得轻飘飘的,完全没有重量感,所以可以先保留住一些比较大的基础块,只挑那些局部的区域再去单独做细分处理。
2、使用Cluster组合小块
在破碎节点的后边,可以再接上一个【RBD Cluster】,它的作用就是把周围好几片小碎块临时拼合成一个较大的块,SideFX的资料里面也解释过,Clustering就是用来把碎块聚合成更大块的,同时还可以借助胶合约束的层级关系,让这些大块在镜头的前半段保持住完整的形态,等到后面再逐步地分解开来,这样就有了层次感。
3、调整约束强度
【RBD Material Fracture】这个节点会自动在每一块碎片的交界处生成Glue粘连约束,我们只需要进到节点的Constraints页面里头,去调整Primary Strength的数值就行了,让结构在没有受到外力的时候能够稳定地撑在那里,一旦遭到碰撞就会自然地断裂开。这个数值要是设得太低,模型可能还没开始模拟自己就先塌掉了,而如果数值调得太高,那么撞击上去几乎看不到什么反应,效果就会大打折扣。
4、分组设置不同强度
主体结构、边缘的碎块还有局部主动破坏的区域,完全可以使用不一样的约束强度,如果需要做得更细致一些,还可以在流程后面再加一个【RBD Constraint Properties】节点,按照不同的组去分别修改strength,约束网络其实就是由两点之间的折线和属性共同构成的,当外力超过了strength所规定的上限时,那一条粘连就会自动断开。
三、Houdini刚体碎块怎么避免一碰就全散
刚体破碎做出来的效果要是不自然,常见的原因无非就是约束的强度设置得太单一,碎块的大小尺寸没有拉开层次,再不然就是拿来参与碰撞的几何体实在过于复杂了。
1、先检查约束网络
我们可以在【RBD Material Fracture】当中,把Guide Geometry的显示模式切换到Constraint Network这一档,这样就能非常直观地看到每块碎片之间是不是都已经被连线给串起来了,到底有没有哪里的约束被漏掉,官方文档也提到过,这种显示模式能够直接查看破碎块内部的约束网络情况。
2、减少无效碰撞面
在模拟的时候,尽量优先使用代理几何去计算,不要直接把高精度的模型丢进去做碰撞,高精度的几何体可以专门留给后面的渲染环节,而低精度的代理几何则交给解算器去负责碰撞检测,这样一来,模拟的速度和稳定性一般都会得到明显的改善,不至于动不动就崩掉。
3、逐步增加复杂度
场景的搭建最好是分步来走,先拿单面墙体做破碎的测试,等调得比较稳定了,再一步一步地把地面、撞击用的物体,还有二级碎块给加进去,这样万一模拟的时候出现异常,也能很快地判断出来,问题到底是出在约束的设置上,还是碰撞的计算上,又或者是碎块的总数太多了。
总结
在Houdini里制作刚体破碎,比较顺畅的次序是,先用【RBD Material Fracture】把碎块和约束网络给生成出来,然后再接到【RBD Bullet Solver】里去跑模拟;要管好碎块的层级,就需要把Primary Fracture的设置、【RBD Cluster】的拼合方式,还有约束强度的调整这三样结合到一起来处理,让主体部分先维持住大块的形态,等到持续的冲击作用上来以后,再分解成更细小的结构。按照这样的顺序从头到尾搭下来,效果调起来会顺手很多,也不至于因为碎块的数量铺得太开,让整场模拟变得难以把控。
