UnityShader——基于CustomRenderTexture的战争迷雾

Unity 2017版本推出了CustomRenderTexture,个人觉得是个很棒的东西,很多效果不需要再一层一层去申请 RenderTexture 然后 Blit, 而且 CRT 还提供了 UpdateZone 用来更新某一个区域,虽然性能上来说到底有没有提高没测试过不清楚,不过用起来是真的很方便,Unity.jp 的某位大佬用 CRT 实现的水波效果就非常有意思

说到战争迷雾,战争迷雾的实现方法有很多,其余大佬的博客也讲的很详尽了,其基础就是,我们需要知道地图哪些地方有迷雾,哪些地方没有,在地图有固定边界的情况下,我们就可以简单的用一张贴图来表示,最简单的情况下,只需要一个单通道的 R int 格式的图片,而 CRT 用来做这项工作简直再合适不过了

在简单的实现中步骤如下:
1、我们通过地图边界将地图中的 xz 方向世界坐标投影到 CRT 的 uv 坐标
2、然后在该区域调用 UpdateZone,你可以加上合适的 Mask 图片做渐变, 你也可以随机生成噪声
(Tip:UpdateZone 也支持传统模式的 Blend)
3、GlobalFog 的 shader 读取该 CRT 以控制雾效
4、Victory!

第一步非常简单,这里不做累述,第二步 Unity Manual 里面也基本上讲清楚了,第三步也很简单,GlobalFog 的实现我在之前的博客里面有分析过,Unity 已经帮我们把世界坐标都算好了,就叫 wsPos 摆在那等我们去用,我们要做的同样也只是根据地图边界将 wsPos.xz 投影到 CRT 的 uv 坐标然后采样, 根据采样结果来修改 fogFactor 就行啦!


配合噪声的话能实现更加自然的效果


当然,这里没有考虑视野被障碍物遮挡的问题,只是非常简单的实现,源码奉上

关于 CRT 的用处我感觉很多,像脚印,雨滴,水纹之类的效果特别适合用 CRT 来做,不过,只能是 to be continue 啦!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值