Unity版本:2022.3.45fc1

第一步,创建一个2D的URP项目

图片



第二步,Global Volume

辉光效果是一个后处理效果,为了实现它,需要创造一个全局体积(Global Volume)。

图片



然后,在Global Volume的inspector面板new一个新的Volue Profile。

添加Override,选择Post-processing(后处理),选择Bloom(辉光或者说泛光),并设置为All。

图片



着重介绍前三个属性:

Threshold是一个阈值,只有HDR颜色的强度超过这个阈值,才会对该部分进行后处理

Intensity是强度,这个会影响到全局的泛光强度。

Scatter是散射,影响的是泛光的发光范围。

第三步,创造Shader Graph和用于演示的物体

创建了一个2DSprite物体,图片资源大家可以选择自己喜欢的。

图片



右键Create->Shader Graph->URP->Unlit Shader Graph

创造一个ShaderGraph,这里命名为Dissolve,并用其创建一个material,命名为matDissolve。

溶解效果的原理

c#
1
2
3
4
溶解效果的实现原理其实是通过一个平滑的噪声来作为片元的alpha值(此处的alpha值并非透明度,而是一个参数)
不同的片元会有不同的alpha值,而相邻片元的alpha值是平滑的。
在外部定义一个01之间的溶解值,只要片元的alpha值高于这个值,就将其裁剪。
这样的话只要平滑地修改溶解值,着色器就会平滑地裁剪掉相应的片元,于是就达到了溶解的效果。

首先进行主纹理的采样,创建一个主纹理外部变量,将其默认值设置为你想要的图片,经过采样节点后链接到片元着色器。

图片



创建一个simple noise节点,为了减小噪声的变化速度,我们将scale设置为20

图片



与此同时,在Graph Inspector界面中,将Surface Type设置为Opaque,并勾选Alpha Clipping

图片



添加外部float变量:溶解值,为了方便起见,设置Mode为slider(滑动条),最大值和最小值分别设置为0和1,值得注意的是,Reference不能设置为中文,需要手动设置成英文。

将溶解值链接到Alpha Clip Threshold上。

图片



于是,我们可以看到阶段性的成果
图片



完整的Shader Graph如下
图片



下一期我们会介绍如何实现泛光效果。