后处理效果,在游戏画面表现中,是很常用的,Bloom是其中之一。
在我当前项目的实践中,美术在调节战斗场景表现的过程中,提出了两个需求:
- 希望让场景中远景有较强的bloom效果,但是近景尽量少受到Bloom影响,且能自由调节
无bloom效果
全局bloom效果,可以看到,远景和近景,包括近景的Cube,都呈现较强的Bloom效果
基于深度的Bloom强度调节,对比可见,远景Bloom强度不变,中景略低,近景几乎没有
结果上,这是美术希望得到的场景效果,美术可以根据深度自由调节Bloom强度
- 希望对某些攻击的刀光,特效等,强化Bloom效果(特别是将近景Bloom调弱的情况下),达到突出打击感的效果
这个需求的本质,就是希望针对单个物体(我们的需求主要是特效)调节其Bloom强度,例如:左cube不受Bloom影响,中cube受一点影响,右cube受强影响
以上是结果展示,我来简单说下解决思路和方法。
- 需求一:希望让场景中远景有较强的bloom效果,但是近景尽量少受到Bloom影响,且能自由调节
这个需求的解决思路比较简单,核心是两点:
- 获取渲染的深度图
- 将调节的曲线和深度映射,计算出最终的效果
以下是我基于Unity 官方PostProcessing V2做的扩展
想要在shader中获取深度图,需要开启camera的depth开关
camera
第二步,将根据深度映射的curve,转换未一张lut贴图,在Shader中取值