breake效果——houdini浅尝&备忘
自用
首先整理一下思路,这次要做的是一个破碎的动画,首先是工作流:
预计首先用ZB取得一个精度比较高的模型,然后把模型丢到Houdini中进行破碎模拟,再导入C4d做镜头动画,最后用rs渲染pr稍作修改出片。
模型准备——ZB
细分拉高,但受限于渣机,最终只能折中27W面。
ZB可以与c4d通过默认插件goz互通,所以我一般喜欢先导入c4d看下模型效果;再导出模型。


效果制作——Houdini
首先整理思路,首先就算是houdini面对大量面的同时也会产生卡顿,甚至崩溃。所以在制作的过程中需要就行多次优化(optimize)和缓存(cache)。首先需要产生破碎的块,产生块以后用动力学(dop network)进行约束。
首先需要对模型进行减面(polyreduce),这能极大的加快模拟(sim)的速度,如图我缩小了10倍。

碎片的生成使用的是booleanfracture 它可以用两个物体相切的形式用B将A切割。
先制作用于切割的B,可以手操但是也可以用更程序化的操作来生成,我属于后者,
生长一些点,然后通过copytopoint将刀片(grid)放置到点的位置上。
首先scatter在模型表面撒点(亦可以用pointfromvolume在体积上撒点,效果会更好),我通过delete对撒点的位置进行了比较细致的调整,以让破碎更为细致。

用attribute randomize可以对点的属性进行随机的修改,如图修改点的法线为随机方向

然后是负责切割的面,新建一个grid,添加mountain

可以切割出凹凸不平的感觉
然后copytopoint,前面提的attitude randomize 十分必要,不然grid将以平行的方式copy

然后就可以把模型和刀片(grid)接入booleanfracture
再外接一个explodedview可以查看碎裂情况


为了后期上材质方便可以将碎块分组(group),分组可以在c4d中继承,以选集方式。
对象破碎就到此为止。
然后为了后面结算的速度,将破碎后的模型缓存一下,新建file cache

$HIP表示houdini文件的位置
$HIPNAME表示houdini文件的名字
$OS表示节点的名字
如,以上缓存的文件名字如下

接下来是最重要的数据整理和优化!!!
首先用assemble将所有破碎的方块重新排序

然后用null 作为一个阶段的记录,到此为止就是高模的完成

convex decomposition 可以在保持物体体积形态的情况下(需手调),给对象减面。


效果还是非常明显的
然后在这个基础上,进一步进行减面
通过for each name primitive 可以按照块的序号来单独调整每块

再次减面,这里比较复杂,首先是a,b两个减面条件不一样
a在原有基础上保留百分之3

b仅保留4个面
然后是switch

nprims(0)指每块对象的面数
nprimis(0)小于4结合switch及当通过a以后面数小于4的即返回,重新通过b,即以4个面的结果往下传递。
接着可以新建一个null作为低模 ,可以看出经过二次减面,目前面数已经下降到10K级别

利用assemble把面打包,即同一个物体的面打包在一起算作一个对象,简化动力学运算


可以看到打包后面数已经来到k级别了,优化到此
动力学部分
千辛万苦,终于到动力学部分了,
首先明确,要做破碎,那肯定是用刚体动力学(rbd dopnetwrok),
刚体动力学也有细分,首先是整体的刚体动力学(rbd object、rbd solver)

用于一整个刚体解算
然后是不知道如何翻译的(rbdpackedobjet、rigidbodysolver)

用于打包物体解算
rbd不需要source,只需要将输出对象的节点放到object

然后给一个重力(gravity)就可以看见破碎效果了。
然后返回模型geo,在LOW 下方接入dopimport可以将动力学效果引入,然后用houdini非常牛批的一个节点transformpieces,可以将低模(LOW)的运动同步给高模(HIGH)。如图A的运动会继承B,及可以只运算低模的动力学就可以实现高模的动力学,从而节省大量的解算时间。

回到动力学
现在破碎的效果是不可控的,它会整体的在重力下掉落。
constraint network 约束条件 类似于一个base,可以把动力学(约束条件)加到已有的network里。
glueconrel 字面意思,胶水,将方块黏在一起。stength 相当于多少强度的力会让物体“断开”

glueconrel 粘合需要顺序,即粘连的对象,不像c4d会自动选择周围的对象,houdini中需要手动生成一条序列,作为粘合的顺序
这里用connect adjacent pieces 将各个方块连接起来,search radius可以调整连接范围,max connections可以调整连接的最大数量。


接下来需要为创建的序列命名
返回glue 会发现这里面有生成一个用于连接的属性 data name——ConRelGlue

我们把这个连接属性赋予constraint network 这里的做法是用attribute create 将ConRelGlue赋予constraint_name

再将constraint_name 输入到constraint network

这样子所有碎片就粘合起来了,
最后则需要让物体按照喜欢的方式破碎了,
这里想让它沿着一条曲线的顺序破碎
新建curvel 打开追踪,沿着模型画出自己想要的破碎顺序


用resample在curvel上撒点,细分,平滑

然后用ray追踪对象,将点贴合到模型表面,方向是A追踪到B上


用smooth平滑一下
通过pointvop将点的pscale属性通过ramp调整

新建carve 可以实现首位的变化

然后用delete选择最前面的点

再用copy to point 将包含pscale属性的sphere复制到点上

note:
force
popmetaballforce
switch 可以实现帧数取余等于2且帧数小于72时为右


















































































