Skip to main content

这个文件还挺火的,作者好像是香港人?研究了一下工程不复杂,但是很精妙,学到了好多,整理如下。因此这篇笔记还是需要最好了解完工程后再来看。

工程链接如下:

链接:https://pan.baidu.com/s/1_Gh5A0HhESQOh5v9UM7RDQ
提取码:6e7f

噪波自我扰乱

假如给地面上的一个片添加噪波,然后给它Y轴添加偏移,那么就能看到噪波在自我扰乱,如果给到X轴或者Z轴偏移动画,那肯定就是单纯的偏移了。

但是如果是一个立体的模型,怎样做出来噪波的自我扰乱呢?这里使用了一个vectohvec的节点,可以将一个vector类型转为vector4的类型,相比传统的vector多了一个通道,官方文档说可以作为齐次坐标或者RGBA中的A通道。齐次坐标我自然不懂…RGBA通道也没有用过。

但是在这个工程中,通过这个P和Time组成的vector4给到antinoise的pos中,就可以实现噪波在任意模型表面自我扰乱的效果。要注意的是,普通的turbulence noise是不能这样做的。

CurlNoise的Collision SDF

没有看懂官方文档中对Collision SDF的用途,在网上也没有搜到关于这个的解释。但是通过查看volume中的数据,能看到围绕着模型的表面,有一个很明显的贴合模型表面切线方向的场。如果现在这个场是速度场,用这个速度场去影响粒子,那么很明显粒子在运动过程中不会穿插进模型内部,而是会贴合模型表面移动。这个也是这个工程中效果的核心技术点。

工程中大体实现思路是,拿模型的boundingbox创建出一个叫做vel的速度场,但是此时的速度场是没有任何数据的,只是创建了一个盒子,但是没有没有装东西。

接下来就在volume vop使用curl noise创建上面的速度场了,记得接入的模型是SDF状态。

pop network中的advect by volume模式是update position。

给粒子上颜色的方法

本质上来说都是使用@nage属性来控制粒子的颜色,@nage就是粒子从出生到死亡的一个0到1的过渡。

首先做了一个黑白色,同样的是使用vector4的方式创建curl noise,将结果给到颜色上。做出了一个黑白两色的区分,之后用来控制两种颜色的混合。两种颜色又分别都是渐变色,就会让颜色很丰富,但是又因为使用noise纹理做混合控制,又不会像纯的random color那样杂乱无章。

粒子的大小也使用@nage来控制了下,细啊。

分出支线再做材质上的变化

最后再提取出一些粒子,赋予发光材质,为整个渲染效果添加亮点。这样又从材质方面加了一些细节。

首先通过sort给粒子号排序,排序的依据是density属性,其实是最开始的自我扰乱的颜色属性,那么黑的地方序号会相近,白的地方会跟白的地方相近。再选取出一些点,导出去做渲染。

导出的粒子使用相同的上色方式又上了另一套颜色,这样颜色就又丰富了一层。

很精妙不是吗?

(完)

Leave a Reply