Shader GrabPass应用实例——高度体积雾

本文探讨如何在Unity中实现区域高度体积雾效果,通过Shader GrabPass技术,结合垂直雾的实现方法,创建支持多区域的雾效。作者分析了两种参考实现,并描述了自己的需求和解决思路,包括利用_ZWrite off属性获取世界坐标高度,计算Camera到屏幕点的射线,以及初步实现的效果和遇到的问题。
摘要由CSDN通过智能技术生成

高度雾或者垂直雾是体积雾的一重要分支,比如以下场景(真实图片,非特效),在很大场景中都有这样的需求。以下是找到的两个不错的参考实现。


参考一

其中有这篇文章的介绍了一种垂直雾的实现方法,思路、代码写的很详细了,网上有不少转载,这里也就不再说明了。

 https://mp.weixin.qq.com/s/yfGNeyip5ebVIvBj-XBd4Q

http://www.sohu.com/a/231966965_667928

参考二

另外,还有就是以下这个牛B的插件

https://assetstore.unity.com/packages/vfx/shaders/fullscreen-camera-effects/volumetric-fog-mist-49858


下面是插件的其中一个设置可以设置雾在一个区域内。


我的需求?

通过这张图片引出我的需求,需要实现上面类似的区域垂直雾的效果,而且是可以支持多个区域。当时看到这个插件很开心,本想就是自己找的东西,期待的效果也是一样一样的。可看小半天源码,只能设置一个区域,不支持多个区域,一下子心凉了半截。

最终,无奈之下,只能又开始自己造轮子。思路如下:第一步实现第一参考中垂直雾的效果,再完成噪声和体积的处理。

区域垂直雾实现

第一个参考中使用的是屏幕后处理,由于不好处理区域,所以还是需要把方法改造为GrabPass的方法,通过一个Box定义一个垂直雾的区域,其Shader为ZWrite off,然后获取其_CameraDepthTexture,从而得到其对应点的世界坐标高度,(这里需要特别注意,这个世界坐标不是Box片段的,而是其后面GrabPass中获取的背景点坐标)。以下Shader的代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值