乐于分享
好东西不私藏

ASE插件示例——燃烧

ASE插件示例——燃烧

燃烧溶解效果

上节推文我们学习了 ASE 的大部分的节点用法,这节内容我们正式投入使用训练一下。先看看本次效果

已关注

关注

重播 分享

我们可以看到大致会做到旗帜的滚动,燃烧的效果,这将会分为两个模块讲述

1 – 旗帜滚动效果

先看效果节点:

起效果就是让旗帜的顶点都发生偏移,做到类似风吹动的效果,而做到风吹动的效果则是通过噪音节点,生成一个随机滚动的噪音,而噪音的白色部分将会作为数组进行相乘,盛出来的部分则是使得顶点发送偏移

首先分析噪音节点左侧部分

噪音左侧也分为上下两块,上册那块是传递 uv 信息,通过乘法计算得出 uv 的密度,再导到噪音的左侧 uv,直观的变化就是噪音的变得更多了,更多的凸起凹陷了,

下半块则是时间的变化时间乘两个变量,y 变量为 0,所以只有横向变动

噪声生成好后传递到一个乘法计算,计算的变量包含了震幅、顶点法线(虽说图上用的是 xyz 信息,实则我们旗帜是一个平面,自取 y 信息即可),计算完毕后我们此时可以直接输出了,但是旗帜通常是有一端接在了横杠上(通常是上面),所以我们又用一套 uv,计算出一个上黑下白的 uv,再乘到输出里面,就像这样

此时就是一个浮动效果了

2 – 燃烧效果

我们可以看到,这一套效果也是非常复杂,但是我们可以用一个自定义代码块简化他
那我们还是先按照纯 ase 自带的节点做的分析一下

先从此处讲起,我们可以看到,最上方是使用 uv 将贴图贴在了物体表面输出,中间则是套了一层 clip 函数以做溶解的核心功能(clip 函数就是将数值减去某个数值,低于则直接消失)

而在 ase 中。clip 函数还需要我们提供 alpha 的信息,我们可以使用噪音 + 一个世界顶点(只取 y 坐标)做出一个 alpha 图,也就是看到的

我们可以看到,先是用 uv+scale 生成了一个噪音图,再与世界顶点的 y 轴做减法,就得到了一个自下而上的消融,后面可以使用 value 那个变量做参数,改变消融的进度,将这些输出结合到 clip 的 alpha 通道中,便得到了一个溶解效果

但是这个时候他是没有边缘燃烧的光效的,接下来我们讲解这个光效

我们可以看到这个溶解发光是由两种关混合而来的,分别是靠近边缘的极细的光条,和后面逐渐变弱的泛光,所以我们大概有这么多数据

  • weight
  • color
  • burnweight
  • burncolor

刚刚我们求出的 alpha 信息不要丢,此时还有大用!

我们将得出的 alpha 图分为两条,一个是给上面我们说的极细的光条,另外一个给泛光使用

极细的光条要就十分简单了,一个 if+weight 搞定,只要 alpha 图数值低于我们设置的 weight 值,就 return 这个 color 的颜色就好了。

另外一个就是泛光,我们可以使用一个叫做 smoothsetp 的节点,它可以做到一个颜色的渐变效果,我们可以看到官网的解释

所以我们在这里将 alpha 图导入进去后,min、max 分别填入 burnweight(泛光范围)与 0,就能做到一个距离长为 burnweight 的长度了,之后导出的 alpha 再乘上颜色,就是一个泛光效果。

将两者叠加,输出的 Emisson,就能做到一个自发光的输出了,因为是自发光,clip 掉的颜色也将不发光。

我们可以将 color 都调整为 hdr,那样效果会更加好看。

接下来讲讲如何用一个自定义的模块来完成

核心就是这个 burning 节点,这个需要我们自行编写代码,输入变量计算,代码如下

floattest
 = posy-noise-value;
clip(test);
if
 (test<width)
return
 color;
return
 smoothstep(burnwight,0,test)*burncolor;

同时我们也要设定好 7 个输入的节点,便能一步到位。