Unity2018 Shader Graph 学习笔记(四) 利用ShaderGraph制作溶解(Dissolve)效果...
Shader Graphunity图文教程技术文章技术文库
显示全部 12
1386 1
实名

通过了实名认证的内容创造者

发布于 2021-11-2 20:41:39

您需要 登录 才可以下载或查看,没有账号?注册

x
这篇文章主要讲述在ShaderGraph中常见的游戏特效“溶解”的实现方法。

溶解效果是一种比较常见的游戏中的效果。通常用来表现一些过场动画,或者游戏角色死亡的消融。


1.jpg

完全没有溶解

2.png

溶解度为0.5


溶解度为0.6

溶解度为0.75
消融效果主体的实现
这个消融效果的主体是非常容易实现的。


1、创建一个噪声贴图(此处可以给定一个指定的噪声纹理来实现某些特殊效果),将噪声贴图的输出连接到masternode的Alph通道上。我们通过alpha测试来实现溶解。
2、创建一个DissolveAmount浮点型属性,这个属性的波动范围将在0-1之间,将这个属性赋予AlphaThreshold以进行Alpha测试,这样我们通过调整溶解值,即可实现逐渐溶解/逆向溶解的效果了。
3、将MasterNode的Two Sided勾选上,在这里由于我们Alpha测试的缘故可以会剔除某些正面的像素,这样就可能会导致部分面向背面的片段被暴露出来,如果不进行绘制可能会导致看起来比较奇怪。
溶解边界的过度
只使用Alpha测试产生的溶解效果是不很理想的,我们很难分清楚溶解的边缘在哪里,所以我们希望给溶解增加边缘颜色加以区分。


不带边缘颜色的溶解


带溶解边缘的溶解
那么如何实现这个溶解的边缘呢?

1、找到边缘,我们定义一个边缘的宽度,实际上代表贴图在dissoveAmount ~ dissolveAmount + width 的地方,就是我们想要的边缘,因为噪声贴图里面实际上是连续的。
2、对颜色值进行三段划分,小于dissoveAmount的直接被Alpha测试干掉了,在dissoveAmount~dissolveAmount+width区间内的值映射到0-1,用映射后的值作为uv输入对一张梯度贴图(RampMap)进行采样,就得到了边界的颜色值。
3、最后,将梯度贴图的颜色值和原图像的颜色值进行一个线性差值,依然利用了dissoveAmount~dissolveAmount+width区间内的值映射到0-1这个值。这个值越小,越靠近边缘,混合的梯度贴图的颜色值就应该更高,越大,混合的原图的颜色值就应该更高。

获得0-1范围内的边缘过度差值

利用差值混合梯度贴图以及原来的颜色贴图

为了能够更好的控制边缘发光的值,我们可以给他再乘上一个颜色属性进行控制。这里我们采取HDR颜色,可以配合后处理得到更好的边缘效果。




实际场景中配合Bloom后处理的使用




本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
ABC05  发表于 2021-11-4 08:51:08  
2#
谢谢分享
回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表