Houdini17全新破碎系统初探(二)

Houdini17全新破碎系统初探(二)

首先更正昨天文章里的一处错误哈,就是这篇文章:

Houdini17全新破碎系统初探(一)

里面说到glass的时候,只支持面片不支持多边形物体是不对的。glass只支持有一定厚度的物体。在这里举个极端化的例子,如果你的输入物体是一个长宽高相等的正方体或是一个面片,由于无法计算厚度信息,因此产生的破碎将会改变原始物体的形状,如下图:

当我将它压扁,一切就都正常了:

因此,glass目前只支持具有明确厚度的物体。这样说大家理解了把~

OK。我们今天继续来聊新刚体系统的破碎流程。

▌H17破碎工作流程初探

通常,在刚体解算中,物体是由于一些外力的碰撞或力场的影响产生破碎。举个例子,地震摧毁房屋,混凝土墙、木制门、玻璃窗户等等不同材质的物体都会破碎。或者你直接拿一个“球”去撞击墙面,同样产生破碎的效果。

我们都知道,Houdini中的破碎流程是预破碎(pre-fracturing)。也就是进入DOP解算前,先在SOP中,将物体切割成小碎块,并在碎块之间生成约束(constraint)将它们相连。预破碎流程给予用户最大化的对破碎艺术形态的控制(比如你可以生成大块的碎块并夹杂一些细小形态的碎块等等)。当遇到外力,超过了约束(constraint)所能承受的范围,预破碎物体就会产生碎裂。或者你可以手动打破约束(比如K帧),控制物体什么时候碎掉。

现在,预破碎迎来了新的工具——RBD Material Fracture节点。

也就是昨天我们讲的。这个工具有着诸多的参数控制预破碎形态。当然了,这个节点是“高层级”的(其实就是很多节点封装成的HDA,可以理解为节点大集合),如果你想要更多的控制,可以使用SOP里较低层级的其他节点。

有别于预破碎,你还可以在DOP里实现动态破碎。使用Make Breakable工具,不过不推荐。这种方法进行大型破碎的时候会非常难受。

▌新流程的实现方法

RBD Material Fracture节点有三种不同的预设形态,它可以像PS图层一样进行层级化的破碎;可以模拟低精度的代理物体,模拟完成后传递动画到高精度原始模型上;可以自动生成glue约束;可以在现有约束网络上生成新约束;可以输出一些有关破碎的属性或组,有利于用户进一步的控制。

使用RBD Material Fracture节点在SOP中预破碎你的模型。

该节点自动生成glue约束。你可以在Constraint选项卡里面的Primary strength参数设置约束强度。

当进入到DOP解算后,你可以退回到RBD Material Fracture节点来调整约束强度,从而控制破碎形态。

约束值的大小取决于碎块的大小,也取决于你想实现什么样的效果。约束值设为1通常会直接断掉。

如果你想让模型在被其他物体碰撞之前保持“粘连”,就需要调整约束值,让它处于一个合适的大小,从而在没有外力影响下不会被打断,碰到外力后又可以碎掉。

完成RBD Material Fracture节点后,可以直接点工具架上的RBD Objects,回到物体层级选择你的预破碎模型,然后回车,就可以一键生成DOP解算。

➤使用Group节点来给不同材质的物体打组。例如,门、玻璃窗、墙。这样你可以分别对它们进行破碎。

➤如果在解算时看到有碎块乱晃,可以使用POP节点的drag来让它们变稳定一些。

▌预破碎约束

如果你已经有了一些物体,你可以选择(不是必须的步骤)在进入RBD Material Fracture节点之前,使用Connect Adjacent Pieces节点设置glue约束。

比如,破碎一栋房子,需要先将门、窗户和墙约束到一起。

由于RBD Material Fracture节点对物体进行了破碎,因此会基于原有约束生成新的约束。例如,一扇窗户与窗框约束在一起,当进入RBD Material Fracture节点进行破碎并生成约束后,原先窗户与窗框的约束仍然存在。

▌输入与输出

RBD Material Fracture节点与其他SOP中的破碎节点都有一套几乎一样的输入与输出,就像毛发节点网络一样,可以让数据顺畅的自上往下传递。

第一个输入/输出口连接原始物体。

第二个有颜色的输入/输出口连接的是约束。

第三个输入/输出口连接的是代理物体(低精度物体)。

▌约束网络

Houdini的约束网络是由一些含有属性的线(polywire)组成,它们代表碎块之间的约束关系。它们在进入DOP解算中时会被相应DOP中处理约束的节点(Constraint Network)继承。

每一条约束都是两个点组成的直线(polywire)。

每条线含有一个constraint_type属性(面属性)代表约束的类型。常见的约束类型有glue和soft。

Glue约束在外力没有超过约束强度前,始终保持两个碎块粘连在一起。

soft约束有点像弹簧,不过没有弹力,在被打断前会变弯。

约束线可以有其他面属性,比如strength代表glue约束的强度,stiffness和dampening代表soft约束的强度。

约束线上的两个点含有一个name属性,代表它们连接的碎块的名称。

就像上面所说,可以使用Connect Adjacent Pieces节点来设置初始约束网络,然后使用RBD Material Fracture节点来进一步生成约束。

▌低精度代理物体

RBD Material Fracture节点处理低精度物体非常快。你需要让高精度和低精度物体的name属性保持一致(比如,将高精度物体进行预破碎,每个碎块生成一个name属性,然后通过复制并减面来创建代理物体)。

▌Cluster

Cluster意为簇,指将小碎块结合成大碎块。有下面两种工作流程:

如果你只是想让一些小碎块永久性“粘合”,只要给它们相同的name属性即可。

对于一些要求较高的场景,比如刚开始的镜头只有大碎块破碎,之后的镜头大碎块进一步碎成小碎块,可以用多层级的约束网络,然后控制不同层级的约束断裂时间。

RBD Material Fracture节点下的wood预设里包含cluster的设置。你也可以使用RBD Cluster节点手动设置cluster。

▌将预破碎物体导入DOP解算

Rigid bodies工具架包含诸多工具来导入预破碎物体到DOP。

RBD Objects:使用这个工具架来将预破碎导入DOP。它会分析name属性识别不同的碎块,并将约束导入Bullet约束网络。

RBD Hero objects:用来导入单一的、不会破碎的刚体。不要用它导入预破碎物体。

RBD Glued Objects:导入不带约束的碎块并自动添加约束。这是一个过时的工具架,所以不要用它导入RBD Material Fracture节点预破碎后的物体,否则会引起约束冲突。

Make Breakable:让物体变成动态破碎物体,在解算时自动计算破碎(不推荐这种方式)。

Debris 工具架:在碎块边缘生成粒子,你可以使用这些粒子进一步生成烟雾、灰尘、碎屑等二次效果。

▌RBD SOP支持的节点

以下这些节点支持RBD Material Fracture。它们与RBD Material Fracture节点拥有一样的输入和输出端口。

RBD Paint:可以让你在原始模型上绘制属性,比如绘制碎块密集区域。有以下几点注意:将这个节点放置于RBD Material Fracture之前;使用它绘制density属性来控制碎块密集区域;在RBD Material Fracture里,设置Scatter from为Attribute。

RBD Constraint Properties:编辑约束网络。与RBD Material Fracture节点里的Constraints选项卡很像。你可以使用它来编辑约束网络以实现更复杂的控制。

RBD Interior Detail:给内部破碎面增加noise。与RBD Material Fracture节点里的Detail选项卡很像。

RBD Cluster:簇。与RBD Material Fracture节点里的Cluster选项卡很像(只有wood模式才有)。

RBD Pack:合并三个输入(几何体、约束、代理物体)为一个输出。

RBD Unpack:与上面的正好相反,将几何体、约束、代理物体分离为不同的输出。

▌相关的SOP节点

RBD Material Fracture节点内部是由下面这些节点组成,你可以手动使用它们:Boolean Fracture(Boolean升级版)、Voronoi Fracture、Exploded View。

还有一些更低层级的节点运用在RBD Material Fracture中,同样可以手动使用:Connect Adjacent Pieces、Assemble、Voronoi Fracture Points、Voronoi Split。