使用ShaderGraph 实现水面效果

首先简单介绍一下什么是Shader Graph

Shader Graph:是unity提供可以用编写shader而通过连线的形式实现效果。

目录

初始阶段

 最终效果展示

准备

正式阶段

最终阶段


初始阶段

 最终效果展示

准备

话不多说直接进入正题

我使用的是unity 2021.3 urp

1.创建一个新的3d项目 可以直接选择urp 或者选择build-in 然后在改成urp(我相信大家应该都会)

2.就是准备并布置一个场景(这不是重点就不做过多介绍)

3.创建材质并添加自己创建的shaderGraph 并把材质赋给提前准备好的平面模型

正式阶段

水面效果的稍微有点复杂,所以这里分步骤介绍 

打开我们刚刚创建的shaderGraph开始连线

 首先把表面类型改为 透明类型  如果不改的化就无法显示深度,并不产生阴影。同时在urp Assest中里。改如下图

 

 和不透明物体交互产生的影响。

场景深度 - 屏幕空间位置的w向量 = 不透明物体鱼半透明物体相交的边缘

原理:场景深度节点深度包含透明元素而屏幕空间位置节点的w向量是不包含透明像素的获取边缘深度 0 表示为黑色 1 表示为白色

接下来是上色很简单 

将上面实现的效果 和 color 进行一个lerp操作。 

 

效果如下

 

让水动起来,并加上波纹

 效果图

 水下扭曲

 获得屏幕位置上的颜色在于上边实现的深度进行lerp从而实现最终效果。

 

 

 最终阶段

 这个效果的大致实现顺序就是先 根据屏幕深度做出透明物体与不透明体相交的效果,之后给各个区域附上颜色,在之后就是根据法线贴图制作那种波浪的效果,在之后就是制作波浪的流动效果,最后就是水底的折射了。

其中使用了很多的节点,有兴趣的可以上官方的shaderGraph查看各个节点的效果和具体用法。这里就介绍几个主要的节点

scene Color 获取将缓冲区的颜色(从摄像机看到的颜色)

scene Depth:获取屏幕深度

scene Position(raw):裁剪出的w向量代表的也是屏幕深度。

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值