Unity ShaderGraph实现发光溶解效果(二)
上一节我们提到,Alpha小于溶解值的片元会被裁剪,而要让溶解部分的边缘发出泛光,我们需要找到所有裁剪部分的片元,然后加上HDR颜色来发出泛光。
边缘泛光原理
为了让边缘泛光,我们首先需要找到溶解处边缘的片元,然后对其添加HDR颜色,就可以得到边缘泛光效果。
目前,图片被分为了被裁剪和未裁剪两个部分,对于被裁剪部分,就算加上再亮的泛光,也不会被渲染,所以我们需要对被裁剪部分的边缘做一个扩展的处理,这样看起来就是未裁剪的边缘发光。
获得被裁剪部分的扩展
对噪声做一个OneMinus(一减)处理,这样我们最终得到的就是未被裁剪的部分。
我们导入一个float的外部变量:泛光宽度,并与噪声相加,这样在最终效果上,就实现了边缘的扩展。
然后就是进行一个手动的裁剪。Step节点会根据传进的Edge值将In值进行二分,大于Edge的变成1,小于Edge的变成0。
因为噪声已经经过OneMinus了,为了得到正确的结果,需要将溶解值也进行OneMinus。
将处理过的噪声和溶解值链接到Step节点,我们就得到了边缘扩展后的被裁减部分。现在的边缘部分是在未裁剪之中的,因此加入HDR颜色后可以被渲染发出辉光。
添加HDR颜色
创造一个外部Color变量:泛光颜色。
注意:必须将其设置为HDR颜色。
将其与扩展后的被裁剪部分相乘,我们就得到了发光的边缘。
发光边缘和主纹理颜色相加,传给片元着色器,我们就得到了最终的结果。
最终效果
如果Scene视图有效果而Game视图没有效果,可能是你的Camera没有勾选后处理效果,将其勾选上即可。
下载链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Europa Superman 's blog!