上一节我们提到,Alpha小于溶解值的片元会被裁剪,而要让溶解部分的边缘发出泛光,我们需要找到所有裁剪部分的片元,然后加上HDR颜色来发出泛光。

边缘泛光原理

为了让边缘泛光,我们首先需要找到溶解处边缘的片元,然后对其添加HDR颜色,就可以得到边缘泛光效果。

目前,图片被分为了被裁剪和未裁剪两个部分,对于被裁剪部分,就算加上再亮的泛光,也不会被渲染,所以我们需要对被裁剪部分的边缘做一个扩展的处理,这样看起来就是未裁剪的边缘发光。

获得被裁剪部分的扩展

对噪声做一个OneMinus(一减)处理,这样我们最终得到的就是未被裁剪的部分。

我们导入一个float的外部变量:泛光宽度,并与噪声相加,这样在最终效果上,就实现了边缘的扩展。

图片



然后就是进行一个手动的裁剪。Step节点会根据传进的Edge值将In值进行二分,大于Edge的变成1,小于Edge的变成0。

因为噪声已经经过OneMinus了,为了得到正确的结果,需要将溶解值也进行OneMinus。

将处理过的噪声和溶解值链接到Step节点,我们就得到了边缘扩展后的被裁减部分。现在的边缘部分是在未裁剪之中的,因此加入HDR颜色后可以被渲染发出辉光。

图片


添加HDR颜色

创造一个外部Color变量:泛光颜色。

注意:必须将其设置为HDR颜色。

图片


将其与扩展后的被裁剪部分相乘,我们就得到了发光的边缘。

图片


发光边缘和主纹理颜色相加,传给片元着色器,我们就得到了最终的结果。

图片


最终效果

图片


如果Scene视图有效果而Game视图没有效果,可能是你的Camera没有勾选后处理效果,将其勾选上即可。

图片


下载链接

Dissolve.shadergraph