Unity Shader Graph 制作 Fade 淡入淡出效果

2022-08-29 16:23:53 浏览数 (2)

当相机与物体的距离越来越近,达到指定值时,我们让物体逐渐淡出,当相机与物体拉开距离后,再让其淡入,来处理当相机靠近物体时的穿模情况,效果图:

创建一个新的PBR Graph,命名为Fade,在Blackboard黑板中创建以下属性:

Main Texture(Texture2D 类型):用于主贴图

Min Distance(Vector1 类型):用于设定淡入淡出的最小距离

Max Distance (Vector2 类型) :用于设定淡入淡出的最大距离

新建Sample Texture 2D节点用于Main Texture,输出至PBR Master中Albedo节点:

新建一个Dither节点,关于该节点的官方文档介绍如下:

其大致含义指Dither是一种特定格式的噪波,用于随机量化误差,用于防止大幅拉伸图片时出现的异常情况,在屏幕空间抖动来确保图案的均匀分布。此节点通常作为主节点上Alpha Clip Threshold的输入,为不透明对象提供透明的外观,而且仍然可以写入深度缓冲区。

我们这里用Dither节点来实现淡入淡出(透明),将其输出至PBR Master中的Alpha节点:

创建Object节点获取物体位置信息,创建Camera节点获取相机位置信息,通过Distance节点求得二者之间的距离:

创建Remap节点,将Distance的输出值,即相机与物体的距离,通过Min Distance、Max Distance即我们设定的最小、最大淡入淡出的距离,映射到[0,1]的取值范围,以便控制Alpha Clip Threshold:

至此,通过上图发现,当相机与物体距离越近时越是淡入,与我们想要的效果是相反的,因此通过创建一个One Minus节点来调整:

0 人点赞