大便失禁怎么回事

首页 » 常识 » 诊断 » 图文版C4D教程xpFluidPBD
TUhjnbcbe - 2023/4/4 21:20:00

又一段时间没有更新了,其实我并没有偷懒哦,国庆期间哪里都没有去,就宅在家里学习:

这个是老早以前我就给鹿友们推荐过的一套专门讲使用xpfluids制作流体的教程:

教程中讲了不少知识点,是套不错的教程,缺点是只有机翻的字幕,看起来非常吃力。

我其实当时也就看了个大概,过不了多久就忘记了。

国庆期间我想着干脆把这套教程翻出来再仔细看看,这一次我是一边看一边做的笔记,虽然可能会有很多内容由于是机翻字幕的原因也是一知半解,但是至少印象会深不少:

花了6天的时间把这套半生肉的教程啃完,然后我觉得可以通过自己的理解写一些内容出来,于是又花了几天的时间整理和尝试,所以截至到现在才发出来。

开始之前我们先进行一下简单的说明,XP在模拟流体方面是有三个工具的:xpFluidPBD,xpFluidFX还有xpFluidFLIP。

xpFluidPBD:通过影响粒子之间的位置来模拟流体的效果。

它的本质是一个修改器,更适合小中型的场景模拟。一般来说使用xpFluidPBD模拟流体会更简单更快速,但在物理层面上不够真实。

xpFluidFX:更适合于中大型的场景模拟,物理层面上它是一种更精准的模拟方式,因此模拟起来相对会要慢一些。

它本质上是一个解算器,在模拟流体、沙子、颗粒一类的效果可以选择xpFluidFX。

xpFluidFLIP:官方说明粒子如果存在于xpFluidFLIP的体素内,它的每一帧的速率会被xpFluidFLIP体素进行采样,计算出一个临时的速度场,然后反过来再影响粒子。

所以我的理解xpFluidFLIP是有点类似于力场,这个对象其实我从来没有用过,所以也就不做过多说明了,好像在模拟某些流体翻转水花一类的效果方面会比较不错。

因为我看的这个教程是纯粹讲使用xpFluidPBD模拟,所以其他两个对象的使用暂时不在分享范围内。

然后今天的文章我打算先通过一个比较简单常见的案例,类似巧克力或者奶酪芝士类的粘稠流体浇筑的效果来分享一下xpFluidPBD的各项参数以及运用。

好了,废话了这么多,开始我们今天的正题吧!

01

场景准备及发射器设置

打开C4D,先新建一个圆柱,适当的调整它的大小和分段。

这个圆柱我们后面只是用来与流体产生融合的,先新建一个用于方便观察以及调整流体的运动范围,并没有其他的用处:

再新建一个大大的圆盘,这个圆盘是用于和流体产生碰撞的,它的位置比圆柱的位置稍微低一点就好:

给圆盘添加XP的碰撞标签,关掉反弹,摩擦力改到最大:

新建一个发射器,调整到适当的高度,我希望流体是类似芝士那种片状的形态,所以发射器的形状是方形,适当的调整宽度,高度给一丢丢就好:

新建一个重力场,让粒子自然下落产生碰撞,参数默认,这个不用多说哈:

调整帧速率25,做10秒的动画,这个不用多说哈:

我这里给发射器添加了一个灰猩猩的Signal插件,让它每50帧完成一次X轴-45到45的位移运动,然后循环模式改为pingpong,当然你也可以手K哈:

模拟流体的时候,粒子的半径1-3都比较合适,但是最好不要低于1,所以我这里将粒子的半径改为1,然后将速度改为0,让粒子直接受到重力的影响自然下落:

在模拟流体的时候,我们发射器的类型最好选择为使用射击(无相交)、六边形或规则发射。

所以我这里选择的是射击模式并且勾选了无相交,官方的说明是如果要真正的无相交,无相交的半径应该是粒子半径的2倍。

我这里觉得给到1就挺好了,也比较好控制,让它持续发射帧,粒子的数量我们后面看情况再调整:

另外为了防止粒子滑动,我在粒子的额外数据里把摩擦力也改到了,基本上发射器的设置就是这样的了:

02

xpFluidPBD参数详解

接下来给场景添加xpFluidPBD,为了防止显示方面太卡,我这里把粒子的显示改为了点,默认参数的情况下它是这样的:

接下来我们一个一个的参数过吧,首先第一个参数是检查密度这个选项,在我们这个场景里可能看不出来。

它的作用是控制流体有一个恒定的密度,当密度大于设定的密度时会杀死多余的粒子,例如粒子在刚发射时挤压在一起可能会产生粒子炸开的情况,勾选这个选项就可以防止粒子炸开。

通常情况下模拟流体我都会勾选这个选项,然后这个场景中,我将密度设置为:

接下来是粘度,这个参数会将颗粒聚集在一起,产生粘性的感觉,使流动变稠。

但是当参数特别大的时候,粒子会变得非常不稳定,下图中我们把粘度值设置为,可以看到粒子在不停的跳动:

这个案例中我将粘度设置为20觉得比较合适:

涡度官方的解释是在场景已经存在例如湍流场来产生涡度的情况下,增加这个参数可以额外的漩涡或者湍流的运动。

由于我们这个场景中没有任何涡度来增加粒子的卷曲运动,所以可以看到我们把它调整到了也没有任何变化:

我这里测试了一下,如果将涡度值给到很大的情况下,粒子会呈现随机紊乱的效果,当然这个场景中我们并不需要,所以可以直接关掉:

吸引力这个参数会将粒子拉到一起,但容易形成较小的团块,同样场景中我们不需要,可以直接将它关掉:

排斥力可以将粒子彼此推开,可以让粒子分散得更开,并且保持一定的体积,有助于做出一些流体堆积的效果。

下面是当排斥力分别为0和的时候的效果,大家可以注意从水平方向上看一下粒子排列和分布的区别:

由于我们要制作流体浇筑的效果,所以我们这个场景中把排斥力设置到:

外部压力是模拟粘稠流体的一个关键数值,它能强制将粒子拉在一起,有点类似表面张力的效果,这里我将它设置为,可以看到流体已经产生了牵连拉丝的形态了:

但需要注意的是当你想进一步提高这种粘滞效果的时候,粒子可能会变得非常不稳定,我这里将它设置到0的时候可以看到粒子已经炸开了:

这就需要配合着阻尼来使用了,阻尼这个参数你可以理解为给粒子的模拟和运动增加阻碍,从而防止粒子炸开的情况。

在模拟粘稠流体中,通常搭配着外部压力进行使用,同样是个非常关键的参数。

我这里把阻尼给到了,可以看到能有效的缓解外部压力0的时候炸开的情况:

这个场景中我把外部压力设置为了,基本上其实是没有什么粒子炸开的情况的,当然为了防止意外,我这里阻尼值还是给了50:

混合这个参数是用于粒子颜色混合的,我们这里用不到,顺带提一下就好了:

接下来就是要进一步的提高流体的粘稠度了,我们希望的是像芝士那样一整片的流体留下来。

尝试将外部压力提高到了50W,然后阻尼10W,粘稠的感觉确实是有增加的,但是还是解决不了根本问题:

所以将外部压力和阻尼恢复到和50,我们这里要换一个方式,看一下另外几个影响流体粘稠度的重要参数。

康秋D我们调出工程设置,将XP设置里的子帧步幅提高,我这里设置到了5,可以看到流体就保持在了一起了,当然模拟方面会更慢一些:

另外我们前面提到了提高排斥力有助于保持流体的体积,我们想要制作流体堆积的效果,尝试把排斥力提高到0,发现粒子炸开了:

看来这个方法不可行,将排斥力恢复到,重新康秋D回到工程设置,我们将这个密度迭代的数值提高,可以看到粒子就堆积起来了,当然模拟速度会更慢:

除此之外,xpFluidPBD这里同样有最大最小子帧步幅以及最大最小迭代值,我们可以手动提高进一步提高粘稠度以及流体堆积的效果,当然这些设置都会增加模拟的时间:

另外我们这里看到流体落下来的时候有一些孔洞,我不希望有孔洞,所以我先尝试把粒子数量提高到了,不过好像也没有完全解决这个问题:

然后略微的提高了一下平滑半径这个数值,孔洞得到了很好的解决:

最后是这个压缩极限的值,我们这个场景中看起来并不是很明显,它控制着体积损失的百分比,较低的数值能够更好的保持体积,我这里就把它设置为了1:

03

xpFluidPBD参数总结

以上基本就是xpFluidPBD中所有参数的含义以及作用了,当然要制作粘稠流体其实是可以结合例如xpConstraints额外添加表面张力以及粘度来制作的。

这里主要是希望让大家能够更好的理解xpFluidPBD参数的作用,所以仅仅只用了xpFluidPBD来制作粘稠流体。

接下来先总结一下吧:

检查密度:控制流体有一个恒定的密度,当密度大于设定的密度时会杀死多余的粒子,防止粒子炸开的现象,通常情况下启用勾选。

密度:勾选检查密度以后,当密度值大于该设定值将会被杀死。

粘度:将颗粒聚集在一起,产生粘性的感觉,使流动变稠,数值设置太高会导致粒子不稳定。

涡度:当场景中有涡度增加粒子卷曲运动的时候,该数值会额外增加漩涡或湍流,当场景中没有涡度的情况下,高数值会让粒子呈现随机紊乱的效果。

吸引力:会将粒子拉到一起,但容易形成较小的团块。

排斥力:可以让粒子分散得更开,并且保持一定的体积,有助于做出一些流体堆积的效果。

外部压力:是模拟粘稠流体的一个关键数值,它能强制将粒子拉在一起,有点类似表面张力的效果,当外部压力很高的时候,粒子会变得非常不稳定。

混合:用于粒子颜色的混合。

平滑半径:对流体的密度进行平滑,配合粒子数量可以减少流体产生孔洞的现象。

阻尼:为给粒子的模拟和运动增加阻碍,从而防止粒子炸开的情况,通常配合外部压力进行调整。

压缩极限:控制着体积损失的百分比,较低的数值能够更好的保持体积。

子帧步幅:高子帧步幅可以让流体保持在一起,但会增加模拟的时间。

迭代次数:高迭代字数同样会让流体聚集在一起,让流体变粘稠并保持体积,有助于形成堆积的效果,但模拟时间会更长。

04

粒子缓存及网格化

基本上这样就可以将粒子进行缓存了,因为提高了子帧步幅以及迭代值,缓存的时间挺长的,一个多小时:

接下来就是将粒子网格化了,可以先将用于碰撞的圆盘复制出来一份放在圆柱的底部,删掉碰撞标签用于渲染:

新建xpOpenVDBMesher,把圆柱和发射器拖进去,点半径给到1,体素适当的缩小:

xpOpenVDBMesher里视情况可以给两个滤镜平滑一下网格:

我个人更喜欢给网格添加一个平滑变形器,提高迭代值,适当的调整硬度:

还可以给网格添加一个置换变形器,注意把它放在平滑变形器的上方,然后着色器里添加颜色,你会发现网格胖了许多:

然后在高度里改为负值,这样流体就会变成一个薄片:

基本上就可以将网格缓存了,但是这里有个坑,我们点击缓存,然后点击继续,这样就能够在已经缓存好粒子的基础上单独再缓存网格:

缓存完以后播放起来你会发现网格时有时无,会出错:

我测试了一下,这个可能是由于使用平滑环形器迭代值给得太高导致的,没关系,我们可以这么操作一下。

将置换和平滑变形器移出来,先单独缓存XP本身的网格:

缓存完毕以后再把置换和平滑重新丢给网格,然后鼠标中间全选鼠标右键烘焙为abc格式:

烘焙之前记得把没用的都关掉,我测试了一下烘焙起来会快一些:

我测试的时候是没问题的,不知道为啥写文章的时候烘焙完最后两帧会出错,无伤大雅,我们不要最后两帧就行了:

05

渲染部分

接下来就是渲染的部分了,设置渲染尺寸,新建摄像机固定视角,这个都不用说哈:

新建环境光,给一个HDRI贴图,我这里把饱和度关掉以免环境光影响到材质的颜色,然后隐藏背景,勾选透明通道:

RS默认是可以混合环境光的,所以再新建了一个环境光,直接上了一个暖一点的颜色,然后适当的降低曝光度:

然后补了三盏灯:

材质我是用的一个普通的sss材质:

然后在涂层里也给了强度,让它额外有一些反射及高光:

我希望的是地面能够有反射并且后期能自己换背景颜色,所以地面的材质我用了投影捕捉节点,适当的调整反射的强度以及粗糙度:

基本就这样了,因为场景中没有漫射,所以我没有开GI,采样方面主采样我给到,其他本地采样:

没想到的是渲染时间差不多要18个小时,估计是流体的面数比较多并且渲染方面额外添加了涂层的原因吧:

最后导出序列后期合成一下看看效果吧:

大概就这样吧,流体模拟方面虽然只用到了xpFluidPBD,但是我写的很详细,所以篇幅会比较长。

希望能够对鹿友们有帮助。

基本上就是这些吧,好啦,今天的分享就到这里,源文件以及原视频的鹿友后台撩我获取吧!

更多内容欢迎

1
查看完整版本: 图文版C4D教程xpFluidPBD