2.7HDR与LDR

一、基本概念

1.基本概念

动态范围(Dynamic Range) = 最高亮度 / 最低亮度

  • HDR = High Dynamic Range
  • LDR = Low Dynamic Range

HDR与LDR和Tonemapping的对应关系:

  • 我们常用的各种显示器屏幕,由于不同的厂家不同的工艺导致它们的实际物理亮度是不一致的
  • LDR是以一个0-1范围的值,对应到不同屏幕上,由于亮度不同强度不同,我们需要进行对应的匹配,即匹配当前屏幕最低亮度0和最高亮度1的范围
  • 自然界中的高动态范围,自然界中的最低亮度和最高亮度差异是十分大的,如蜡烛与太阳
  • 如果要将太阳这样的超高的动态范围转换到各种显示器上可以看到的低动态范围,这一过程就叫做Tonemapping

补充:我们的电脑屏幕的最高亮度是通过上个世纪一系列经验累计得到的相对统一的亮度,对人眼来说比较安全的亮度强度,所以我们看电脑屏幕感觉对眼睛的伤害是比较小的,基本上是无伤害的,但当我们直视太阳光时,太阳光强度是会对我们的眼睛造成损伤的

2.LDR:

  • 8位精度(8位精度:2*2*2*2*2*2*2*2=256,即8个2相乘,16位即16个2相乘)
  • 单通道0-1
  • 常用LDR图片储存格式有jpg/png等
  • 拾色器、一般的图片、电脑屏幕

3.HDR:

  • 远高于8位的精度
  • 单通道可超过1
  • 常用HDR图片储存格式有hdr/tif/exr/raw等
  • HDRI、真实世界

补充:

真实世界中,例如相机,相机拍摄过程中,它是如何把真实世界的光给映射到屏幕上的,相机屏幕上可以看到那样LDR的范围:

  • 相机在拍照过程中有曝光这一过程,先把曝光进行一个计算,计算后传入到相机能够感应到范围内
  • 之后受到光圈、快门时间、传感器、灵敏度等影响
  • 传入到相机能够感应到范围内后再把值输出线性的值存储进相机的图片中,一般数码相机的格式是iw
  • 之后再经过变换,该过程叫做LUT,经过一个线性的变换,通过白平和、色彩校正、色调验色以及伽马校正,把这一过程得出的结果烘培成LUT
  • 每个相机厂商在做相机拍照时他们的LUT格式各不相同

4.为什么需要HDR

LDR只能算是对现实颜色进行压缩并呈现出来,看似丰富但和现实中的颜色比还是有局限性,一旦进行后效和后续加工会因颜色不够而难以进行,所以在渲染过程中为了更好的画面表达。

  • 更高的动态范围以及更丰富的细节,可以用HDR来有效防止画面颜色过曝,超过亮度值1的颜色也能很好的表现出来,像素传达更加正常,视觉传达也更加真实。

HDR才有超过1的数值,才有光晕(bloom)的效果,高质量渲染的bloom能体现画面的渲染品质

HDR的一些来源网站,可以下载HDR图片,可以用作一些反射球

http://www.hdrlabs.com/sibl/archive.htmlhttps://www.openfootage.net/hdri-panorama/

二、Unity中的HDR

1.Camera-HDR设置

  • 场景将渲染为 HDR 图像缓冲区
  • 屏幕后处理:Bloom & Tonemapping
  • 完成转化:HDR -> LDR
  • LDR图像发送给显示器

2.Lightmap HDR设置

  • 选择 High Quality 将启用 HDR 光照贴图支持,而 Normal Quality 将切换为使用 RGBM 编码。
  • RGBM 编码:将颜色存储在 RGB 通道中,将乘数 (M) 存储在 Alpha 通道中

3.拾色器 HDR设置

  • 使用 Intensity 滑动条可以调整颜色的强度

  • 滑动条每增加1,则提供的光量增加一倍
  • 使用 Intensity 滑动条下的曝光样本可以看到当前颜色值在任一方向的预览效果

4.HDR的优缺点

优点

  • 画面中亮度超过1的部分不会被截为1,增加白色部分的细节并且减少曝光,
  • 更好地支持Bloom效果
  • 减少画面较暗部分的色阶感

缺点

  • 渲染速度较慢,需要更多显存
  • 不支持硬件抗锯齿
  • 部分手机不支持

三、HDR与Bloom

Bloom在游戏中是一种比较常见的效果,是通过后期处理的方式,来达到模拟现实生活中物体在强烈光源照射下,出现“光晕”的效果。

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

1.Bloom的基本原理与效果

很明显上图中使用了bloom的在阳光洒下的地方,会产生强烈的光晕,这个就是bloom效果,大家也常叫这种特效辉光。

2.Bloom的实现过程

1.先渲染出原图

2.然后计算超出某个阈值的高光像素

3.对高光像素进行高斯模糊

叠加光晕

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

3.简述UnityBloom流程

unity中的流程会在第一步down simple处计算高光的像素,然后高光的像素不停的做downsimple,并存在RT(Render Texture渲染纹理)里,到了一定次数,次数会由参数来控制,在一步步up回去,在up过程中,会将之前的down simple加入一步步上采样回到原来的分辨率 

4.Bloom与HDR

怎样理解HDR

在引擎里始终打开bloom,在HDR和非HDR的环境下观察效果

我们看到左边的HDR使用的是Use Graphics Setting 由于我们的目标平台为PC所以在Graphics Setting里面默认是使用HDR的。

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

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

Bloom始终打开,但在HDR与非HDR(LDR)的两者环境下的图像,受光部分出现了比较强的反差,没有HDR支持的小恐龙受光部分的光晕弱了很多,那是什么导致了这样的原因?

为什么HDR下的效果会如此强烈?是什么导致了这样的反差?上面也说过,是两者处理时使用的数据精度不一样所造成的。那要如何形象的理解这里的精度不一呢?认为如果形象的理解了这个精度,那么对于得到这两个结果的不同就豁然开朗,如下图:

我们就先用一个亮度的概念来解释:HDR比LDR拥有着更多的亮度。也就是说,HDR跨过了LDR的最大存储容量(每通道8bit,共32bit的容量),这意味HDR能拥有更多的颜色,如果归一化解释,假设这个LDR下亮度最多到1,那么HDR则会突破这个限制超过1。

红色表示两种模式下,模糊受光部分的精度

假设红色部分是我们要模糊的那部分像素,LDR下,我们拥有的精度比HDR下少很多的信息,因此得到的结果也就比HDR下弱很多。

当我们拿到更高精度的数据去处理图像的时候,那么得到的也将是更高精度的结果。

总结一下:开启HDR后,ColorBuffer里则会存储更多的数据,当跟一些特殊的后效搭配,可以得到一些更高级的效果,如果把这个”高动态范围“解释为”高精度范围“或者美术更好理解一点的”高明度范围“会不会更好理解一点呢?

HDR&Bloom的美术意图

不同的项目或许风格迥异,但都希望在画面上获得更多的宽容度,拉高上限来获得更高*度去创造虚拟世界,不管是明度对比,还是色彩对比,画面更多的层次、更丰富的变化,永远是美术人追求的目标。这就像是在地面有一个道具,策划往往希望玩家能很明显的观察到这个可交互物,这时就需要一些辅助手段,比如加个特效,换个OutlineShader等,这本质上就是一种拉开画面层次的手段,尽管这个做法并非基于画面美感去考虑的。美感的表达往往是在统一中寻求变化,在这个统一的框架下,变化越是丰富,画面也越经得住眼睛的长时间的考验。我也认为这也就是为什么2D美术即使像油画般精致,却还是被实时渲染的历史潮流无情碾压,实时渲染可以有着更丰富的即时变化,这些技术都是动态的,且还在不断地进步发展,是动态的,那就说明可以给画面提供更丰富的变化。 那么从美术上,肯定也是需要这种拉开美术关系,画面层次的手段。

HDR&bloom就是其中的一种手段,在提升画面层次,气氛的营造有很重要的作用,它可以让静谧的夜晚显得更神秘,正午的阳光更炙热。

without bloom

那如果我将这个场景的层次进一步拉开,我们打开bloom

with bloom

意境在bloom加入之后得到了进一步提升。光晕让视觉中心得到了进一步的强化。也让”月光“这个看不见摸不着的东西,在画面中也能得到隐约的感受。

总结:更高的技术宽容度,即更高的表现宽容度

四、HDR与Tonemapping

1.ToneMapping概念

LDR的颜色为0-1,HDR的颜色为超出1或低于1的颜色,想通过显示器表现更多颜色就得把HDR压缩成LDR,而这种映射关系即色调映射ToneMapping

此图为一个线性的亮度映射,但并不符合真实世界,因此所有映射最终靠一个s曲线实现

  • 色调映射
  • ToneMapping:把HDR转化为LDR
  • 线性映射效果极差
  • 把高亮区域和阴影区域向中等亮度方向压缩->S曲线

2.ACES

  • Academy Color Encoding System学院颜色编码系统
  • 最流行、最被广泛使用的Tonemapping映射曲线
  • 效果:对比度提高,很好地保留暗处和亮处的细节

其他类型的Tonemapping曲线

五、LUT(Lookup Table)

  • 在Color Grading的All None模式中有LUT,简单来说就是滤镜
  • 但LUT与Tonemapping不同,LUT在LDR之间做变化,Tonemapping是对HDR做变化,调整rgb三个通道的LUT被称为3D LUT
  • 可以在PS里面调整LUT,导出的LUT作为滤镜调整画面,相当于调整整个画面的滤镜
  • 格式有如下几种
  • 一个小trick:可以在PS中调整LUT,导出的LUT作为滤镜调整画面

六、作业

结合先行版基础渲染光照介绍(一)试试IBL在HDR和LDR中的区别:

//以后再写吧

上一篇:linux上VirtualBox使用


下一篇:C# 反射GetProperties和GetFields的坑