ShaderForge-水面折射

ShaderForge-水面折射

本系列开始进行ShaderForge实战案例分析,案例的参考来源自朧老师的ShaderForge教程。
附带教程链接地址:http://www.aboutcg.org/?s=shaderForge&post_type=course
文末我会提供相关使用的素材。

效果预览

ShaderForge-水面折射ShaderForge-水面折射

思路分析

折射效果,我们需要用到折射通道,折射通道是非常耗费性能的,折射的实现原理,首先物体必须是透明或者半透明的东西,折射需要实时的获取摄像机渲染的图像,然后进行像素的偏移处理,最后用屏幕UV的方式渲染在画面上。

开始制作

创建默认的自定义光照模式Shader,并且删除默认的节点。
我们首先给透明通道设置一个变量,进行全透明效果。
ShaderForge-水面折射
变量为0,输入到透明通道,并且设置混合方式,由于是全透明现在预览看不到东西。
现在我们添加折射的效果,折射的本质就是偏移,我们现在使用一个噪点图的RG通道来做为偏移的UV值,并通过一个变量来控制偏移的程度。
ShaderForge-水面折射
现在在场景中预览一下效果,调节折射参数可以看到不同的效果。
ShaderForge-水面折射
接下来我们使用自定义通道实现折射效果。
首先我们需要获取屏幕的渲染像素,需要SceneColor节点,然后通过一个变量控制偏移的方向,
然后我们需要一张噪点图来提供漂移的随机变量,通过Flow参数控制偏移的力度,最后将原本的屏幕UV和噪点图输出的UV偏移相加,输入到SceneColor节点中。屏幕UV需要选择成UV模式,这样UV坐标就变成了左下角是0,0点。
ShaderForge-水面折射
在场景中预览一下效果
ShaderForge-水面折射

接下来看另一种实现的办法,这种方法效果要高不少。
我们利用Unity的RenderTexture图片,能够实时获取摄像机渲染出的图像,关于相关的设置就不做过多解释了,可以下载场景后自行查看。大体思路就是创建一个新的摄像机添加到主摄像机的下边,让这个摄像机只渲染水面之下的物体,然后将这个子摄像机渲染的东西输出到RenderTexture上,调整好摄像机的角度。
设置的关键Game视图的窗口比例和RenderTexture2D的输出图比例保持一致,宽高比。
Shader中的ScenePos节点需要设置成UV模式。
接下来看Shader部分,我们首先需要一个Tex2D节点,载入那张RenderTexture图片。
我们使用一个噪点图作为偏移的随机变量引入,并添加一个变量控制流动幅度,将原本的UV通道稍作改造,然后将UV信息和偏移加起来,输入到Tex2D节点中。

ShaderForge-水面折射
我们在场景中,看看效果。
ShaderForge-水面折射

相关素材

链接: https://pan.baidu.com/s/1o821vGQ 密码: p42n