实现光晕效果_从认识到实现:HDR Bloom in Unity

b4fa1e4482f00190bc00f29e1d2e6ee7.png

Bloom在游戏中是一种比较常见的效果,是通过后期处理的方式,来达到模拟现实生活中物体在强烈光源照射下,出现“光晕”的效果。本着学习,举一反三的精神,本文将探讨几个问题:

  1. Bloom的基本原理与效果
  2. Bloom与HDR的关系
  3. Bloom的美术意图
  4. Bloom在Unity中的基本实现

一、Bloom的基本原理与效果

d861ee500620a8c87591e290dfdd7d46.png
with bloom

拿我之前做的一个小恐龙作为本文的模特,这个就是最终的效果(Unity 的Post process stack 中的bloom),如果关闭bloom

9c40cec4087f11a1255814cfc076dfe0.png
without bloom

两张图的最明显的地方,则在于上图阳光洒下的地方,会产生强烈的光晕,这个就是bloom效果,大家也常叫这种特效辉光。

接下来,动手在ps里面,拿一张图片,手动的模拟一下这个过程,感性的认识一下原理:

PS:这个过程只是可视化的展示一下原理,结果不准确

之前说了一组重点词,我提取出来:”强烈光源照射下,出现的效果“,”阳光洒下的地方“。我们干的第一件事情就是找出”阳光洒下的地方“也就是受光部分:

先通过色阶,找出图像中的受光(亮度更高的区域):

0b0726e41e0469de5522eed262f4c11f.png

接着,将这部分作为选取,复制出这个选取的原图(不是这个调整过色阶的图)

40da7515de304bec6876f32bd04220be.png
ctrl+鼠标左键点击通道下的RGB通道

4bc93b02ed8b5db380a9b0585d6a82ba.png
选取被定义出来了

72581f8961cc696d2592b520aeb6945b.png
通过选取,复制原图

通过选取复制出来之后,这就是基本上这张图上的受光情况,这就是我们需要bloom的区域,接下来,将这个图层做一次高斯模糊。

4a1fe6e820293439e603bb68d9567a82.png

我这里随便拉一下,得到一张模糊后的图像,最后一步,将这个图像与原图相加即可(调整图层混合模式为 线性减淡(线性减淡就是与下层图像进行相加):

f29271c37ab1bc4fb4edaeedacf8f636.png

为了清晰,我把这里的名字重新做了梳理,从下至上的处理过程,其实Bloom的实现也是这么个流程。

最终我们的到了这样一张:

10342e68ad9b3569c5a72154024fb997.png
blur+source

a44f82864ff1cad2bf5d41cbea4aa3d2.png
source only

为了效果强烈一些,我多复制了一层并且透明度减少了50%,与原图做一个对比。这样,我们也得到了一个看起来略显廉价,但是也保留了主要特征的bloom,我们在与unity post process stack里面的bloom做一下对比:

ab1338a15ca10380bc6c67218989a0bd.png
unity post process stack bloom

导致这样的问题是因为 Unity 进行bloom特效时,所拿到的原始数据精度要远高于QQ截屏下来图像,请记住这个廉价的效果,后期会用到,不过再实际编码过程中处理的流程其实一样的。

梳理一下:bloom其实就是拿到一张图像,对期望区域进行模糊处理,再加回到原图,最后输出。

二、Bloom与HDR

刚做这行不久的时候,其实HDR(High Dynamic Range)这个名词总是会频频出现,尤其是与Bloom也常常绑定着一起出现。所以一直以来心中都有一个疑问,到底该怎样理解HDR,它与Bloom又有着什么样的关系?本章的重点是形象的理解,而非上来就是”高动态范围“这些初次看见就想骂娘的解释。我们挑战一下这个课题。

我们先做这么一个实验,在引擎里始终打开bloom,在HDR和非HDR的环境下观察效果。

b6ae660c4761df0b3db8fc8980cd71ab.png
在相机这里设置HDR的开关

我们看到左边的HDR使用的是Use Graphics Setting 由于我们的目标平台为PC所以在Graphics Setting里面默认是使用HDR的。(这里的版本是Unity 2019.2.4f1)

02536a06df3543d6ffbde4c786abab9d.png
Graphics Setting

先来观察打开HDR的图像,是这样的:

646f6b77148cf7153a3932e2bff4c11a.png

我们再次关闭HDR,观察图像,是这样的:

71fd3cb488dadc4e37c08ba850dc7da4.png

Bloom始终打开,但在HDR与非HDR(LDR)的两者环境下的图像,受光部分出现了比较强的反差,没有HDR支持的小恐龙受光部分的光晕弱了很多,那是什么导致了这样的原因?还记得之前在PS里面处理的廉价版的Bloom图像吗?是不是很像?我拿出来做一下对比

8dd467bdcd36b1a82c79b071cd94b74a.png
(我将ps里面之前多余复制出来的图层关掉)

所以我们可以得到一个初步的判断,非HDR下bloom所处理的图像,跟我们人手QQ截图下来送进ps里的图像,基本是一样的。那为什么HDR下的效果会如此强烈?是什么导致了这样的反差?上面也说过,是两者处理时使用的数据精度不一样所造成的。那要如何形象的理解这里的精度不一呢?我认为如果形象的理解了这个精度,那么对于得到这两个结果的不同就豁然开朗,如下图:

075bc72f5a53423f50746596ef89d26d.png

我们就先用一个亮度的概念来解释:HDR比LDR拥有着更多的亮度。也就是说,HDR跨过了LDR的最大存储容量(每通道8bit,共32bit的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值