欢迎光临散文网 会员登陆 & 注册

企业级游戏开发笔记,URP卡通水体复盘

2023-03-19 04:12 作者:YONCE1999  | 我要投稿


懒得去找合适点的法线纹理和噪声图,效果比较简陋,这里主要是复盘一下实现过程。


VS部分:

  1. 噪声扰动

模拟水波纹效果,要对UV进行一个偏移,同时给顶点加上适当的偏移让水面不那么平增加一点真实感

这里用一个vector4来表示相关的UV缩放,流速,以及扰动强度等等

然后混合扰动1和扰动2在法线图上取值,根据取得的结果偏移顶点

光照部分由bilingphong+fresnel+lambert组成,这里不多讲。

主要说一下深度图应用部分,为了模拟海水随深度颜色变深,以及漂浮物周围的泡沫,我们需要获取到深度图。一般来说要把tag设置成transparent来避免水体被写入深度图。获取深度图前需要保证URP设置中打开了Depth texture和Opque texture或者在相机中设置也可以,这里提一嘴unity2021.3.1.6f1c1不知道为什么深度图的设置有点问题怎么都获取不了,切换版本之后就正常了。

这里有个坑,齐次裁切必须要frag里面才可以,否则的话深度图的获取也会有问题。区别如下,具体原因也不知道为什么。

然后我们可以通过_CameraDepthTexutrue获取深度图,添加

可以省略_CameraDepthTexture和sampler_CameraDepthTexture的声明。

这个获取到的值就是不透明物体的深度,此时我们的水面深度可以用屏幕坐标的w分量获取

一张生动的示意图来表示,Depth-Scrpos就是此时视线所看的点的深度,根据这个深度我们插值返回浅水颜色和深水颜色即可。

浅绿色为浅水颜色,深绿色为深水颜色

物体的边缘,也就是深度比较浅的地方就应该出现泡沫效果,那么我们把深度比(深度/最大深度)和泡沫噪声图的采样作对比,噪声图大直接返回泡沫颜色,反之返回之前的到水体颜色。


差不多就这样,有空搞一个shader graph还原。

卖家秀,代码来源Samlee2023


企业级游戏开发笔记,URP卡通水体复盘的评论 (共 条)

分享到微博请遵守国家法律