前言
在一些游戏中,当打开UI界面时,背景会以毛玻璃效果呈现场景,以突出当前UI界面信息,效果非常不错。

异度之刃决定版

明日方舟
Unity实现方案
在Unity中,要实现此类效果,通常由TA制作一个shader来实现,shader对屏幕采样并使用高斯模糊实现毛玻璃效果。但由于URP渲染管线下,光有shader还不行,还需要配套单独写一个Renderer Feature来将这个shader逻辑插入URP渲染管线,会更复杂和麻烦。
之前在网上找了好几个分享文章,均没有成功实现在URP渲染管线下,UGUI界面中的背景实现毛玻璃效果。URP渲染管线下要用shader实现毛玻璃效果,可能需要更深入了解Renderer Feature和shader知识才能解决问题。
替代方案
URP模式下,还可以通过Volume后效来相对的实现打开UI界面时,背景毛玻璃效果,效果如下图

毛玻璃效果
此方案我们需要设置2个相机,一个MainCamera,一个UICamera。UI相机设为overlay模式,并加入到MainCamera的Stack列表中。主相机的Culling Mask需要将UI剔除。而UICamera的Culling Mask则只勾选UI。特别注意:主相机需要勾选 Post Processing后效开关,而UI相机则不需要勾选Post Processing

主相机设置

UI相机设置
然后放置UI的Cavas的layer设为UI

Canvas设置
再在场景中单独放置个Volume组件

Volume组件
这个Volume中添加一个Depth Of Field,然后你可以使用Gaussian或者Bokeh都可以,调整好效果。最后去掉GameObject的勾选都可以。用代码来控制是否激活这个GameObject。
在代码中先Find到这个GameObject进行实例化,然后判断是否打开了UI,如果打开UI,就激活Volume组件。