基于物理的渲染—HDR Tone Mapping

在游戏引擎渲染管线中,我们对于R、G、B通道颜色信息的数值范围通常设置在[0,1]之间(或者是[0,255])。其中,0代表没有光亮度,1代表显示器能够显示的最大光亮度。这个表示方式虽然直接易懂,但它并不能反映真实世界中光亮度的情况。在真实世界的光照环境中,光亮强度有时候会超过显示器能够显示的最大亮度。而且,人眼在观察真实世界的物体时,会根据光照强度进行自我调节。因此,更加真实的渲染方式是让颜色值超过1。这种光照计算方式或环境光照图就是我们常常在游戏引擎中看到的HDR(High Dynamic Range)光照或者HDR环境贴图。但是,采用HDR渲染出来的亮度值会超过显示器能够显示最大值。此时,我们需要将光照结果从HDR转换为显示器能够正常显示的LDR。这一过程我们通常称之为Tone Mapping。下图是Unity引擎对采用HDR渲染的图片使用了Tone Mapping和没有使用Tone Mapping的对比结果:


其中,上图是没有使用Tone Mapping的结果,下图是使用了Tone Mapping的结果。可以看到,在没有使用Tone Mapping的渲染结果中,有很大一部分像素的光亮度是超过了显示器能够显示的最大值。在视觉上,这些地方变得过曝了。而在使用了Tone Mapping的渲染结果中,像素光亮度变得正常,视觉上也更加真实。

今天我们要介绍的这一篇论文是于2002年发表在Siggraph会议上的论文“Photographic Tone Reproduction for Digital Images”。这篇论文提出了一种新的Tone Mapping的方法,使得经过该方法转换的结果从视觉上看起来更加接近真实世界的物体。首先,我们来看看这篇论文的结果图,如下图所示:


其中,左图是采用线性缩放的结果,右图是采用论文中的算法进行转换的结果。可以看到,在简单的线性缩放结果中,许多细节部分丢失了;而论文算法转换的结果则很好地保留了图像的细节部分。接下来,我们将对论文中的算法部分做详细介绍。


一、初始光亮度映射

首先,文章作者对整个图像做了一个光亮度的映射,其作用类似于设置相机的曝光。这一操作实际就是对每一个像素做固定缩放。根据前人对Tone Mapping的研究结论,论文作者认为光亮度的log平均值能够反映图片中像素光亮度的特征。因此,作者用该值对每个像素作缩放。

若用Lω(x,y)表示像素(x,y)的光亮度,则log平均值可表示为:

其中,N 表示像素个数,δ 是一个用于避免奇异值的常数。缩放后的光亮度 L(x,y) 可用如下公式表示:

其中,α 是一个缩放参数,被称为Key Value,不同的 α 值对应了不同的缩放程度,如下图所示:

但是,仅仅做简单线性缩放是不够的。对于光亮度变化不是很大的图片,这种方法可以将像素的光亮度很好地压缩到一定范围,但是对于大多数图片,绝大部分像素光亮度是在某一个范围之内,而少数高亮的像素比平均值高太多,很容易产生过曝,如:光源、高光反射等。因此,通常在经过线性缩放之后,还需要利用非线性的算子对图像进行处理。文中作者列举了一种常用的算子:

其中,Ld(x,y)表示经过非线性算子处理后的像素,Lwhite表示图片中被映射到白色亮度的像素中的最小值。由于是非线性的,对于亮度高的像素缩放更大,因此该公式能够防止线性缩放中无法处理的过曝情况。但是,这种简单的算子通常容易导致细节丢失。作者观察到,在传统打印技术中,为了提高打印结果的质量,通常会采用一种dodying-and-burning的方法。该方法的原理是根据打印内容的不同,在不同区域减少光亮度(dodying)或者增加光亮度(burning)。论文作者通过实验,对比了简单非线性映射以及dodying-and-burning处理后的结果,如下图所示:

其中,上排图片中太阳被树枝遮挡住,因此不包含高亮的区域,下面的图片则包含高光反射。左边一列图片同样是采用简单非线性算子(Simple Operator)缩放,经过观察可以发现,下图中的书中文字完全被高光覆盖。由此可见,简单的非线性算子缩放会丢失很多细节。

论文作者在经过观察和测试之后,基于dodging-and-burning方法,提出了一种自适应的dodging-and-burning方法,下面我们将详细说明。


二、自适应dodging-and-burning

自适应dodging-and-burning的特点是,找出对比度大的边缘包围的区域,然后对该区域进行处理。因此,作者提出利用高斯核卷积的方法来找出这些区域。对于不同的缩放系数 s,在不同的像素点(x,y),计算高斯核函数 Ri(x,y,s)与图像 L(x,y)的卷积。则卷积结果 Vi(x,y,s)可表示为:

其中,Ri(x,y,s)可表示为:

然后,论文作者定义了一个误差函数,计算不同 αi 参数的卷积结果之差,来衡量图像局部像素的光亮度分布。则误差函数 V 可以表示为:

通过对不同的缩放参数 s 进行计算,找出符合如下公式的参数:

其中,? 是一个阈值,sm 是对每个像素计算出的缩放参数。当我们获得每一个像素的缩放参数后,对每一个像素进行不同的缩放计算:

从而获得最终的Tone Mapping结果。下图显示了计算过程:

其中,左图显示了计算缩放参数的过程,Center表示内圈高斯计算的范围,Surround表示外圈高斯计算的范围。右图显示了用不同缩放参数进行缩放后的结果。通过观察可以发下,当缩放太小时无法有效地提取出图像细节,而缩放太大时会出现黑色的Artifacts。


三、实验对比

论文作者将dodging-and-burning计算结果与前人的结果进行了对比实验。如下图所示:



其中,New operator表示了论文的实现结果。


四、总结

论文作者提出了一种新的Tone Mapping的算法,它通过对dodging-and-burning打印技术的观察和分析,对于不同的区域采用不同的缩放系数,提出了自适应dodging-and-burning的方法,能够将高动态图转换成低动态图时防止高亮部分过曝,并且能达到在亮部和暗部都能保持细节的目的。


五、论文信息

作者信息:
Erik Reinhard,著名计算机图形学学者,目前在Technicolor Research and Innovation做研究工作;
Michael Stark,计算机图形学研究者,曾就读于美国犹他大学;
Peter Shirley,著名计算机图形学大牛,真实感渲染专家,犹他大学客座教授,NVidia首席科学家;
James Ferwerda,著名计算机图形学学者,罗彻斯特理工学院副教授。

论文链接:
http://www.cmap.polytechnique.fr/~peyre/cours/x2005signal/hdr_photographic.pdf

这是侑虎科技第225篇原创文章,欢迎转发分享,未经作者授权请勿转载。如果您也有任何独到的见解或者全新的发现也欢迎联系我们,一起探讨。(QQ群465082844)


关于惟学无际

【惟学无际】是UWA在2017年推出的全新研究型专栏,我们将为大家推荐极具实际价值的学术论文,并梳理其中的研究背景、实现原理和执行方法等。内容专注于游戏、VR和AR相关的计算机图形学领域。正所谓问渠哪得清如许,为有源头活水来 ,希望大家在研发的过程中不仅知其然,还能知其所以然。

原文地址:https://www.cnblogs.com/lancidie/p/9254237.html

时间: 2024-08-03 14:30:41

基于物理的渲染—HDR Tone Mapping的相关文章

基于物理的渲染技术(PBR)系列二

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 继续上篇博客中基于物理的渲染技术(PBR)系列一的讲解,在这里我们引入了一种被称为渲染方程(Render Equation)的东西.它是某些聪明绝顶人所构想出来的一个精妙的方程式,是

基于物理的渲染详尽指南 卷1光与介质:基于物理的渲染和着色理论

光与介质 基于物理的渲染和着色理论 此文对于程序员和美术制作人员都有很大的帮助作用,希望你看完后对基于物理的渲染有个整体的理解,此篇翻译的文章(The Comprehensive PBR Guide by Allegorithmic - vol. 1)基本上是从美术的角度来解释基于物理的渲染,有时间我会把程序部分的知识再细致讲一下,包括理论和实现,我自己目前也在学习阶段,主要在研究UE4的基于物理的渲染,希望在接下来的时间里出一个比较详细的文章来从程序员的角度详细阐述实现原理.         

基于物理渲染的基础理论

本篇作为理论的概括介绍,并不涉及公式的部分 基于物理渲染的优点 很容易就可以作出真实和照片级的效果. 同一配置可以适用于在不同HDR光照环境下. 接口简单而直观,都是基于世界真实的参数.(如粗糙度,金属度,等等). 不需要美术去提供经验性的"奇怪"参数和配置. 更容易去解决问题和扩展需求. 基于物理的渲染和和传统区别 有着基于物理规则的光照模式 有着无处不在的fresnel效果 能量守恒“energy conservation”,物体平面的反射光无法超过它所解接受的入射光 基于物体材质

Unity3d 基于物理渲染Physically-Based Rendering之实现

根据前文的例子http://blog.csdn.net/wolf96/article/details/44172243(不弄超链接了审核太慢)弄一下真正的基于物理的渲染逃了节课= =,弄了一下.公式和之前的文章一样,这次加上cubeMap贴图,由于方便,就直接用surface shader了,因为不用求reflect方向,之前也有这一篇文章说明surface shader中cubeMap的使用方法和实时反射的方法http://blog.csdn.net/wolf96/article/detail

物理渲染-基于物理的光照模型

文章所用图片来自相关领域文献,如有侵权请联系撤除, 转载本文请注明出处 1.关于光照模型 对于图形学领域和图形学开发来说,实时渲染的光照模型是一个最最基础的问题,简单的来讲,光照模型就是用来描述在真实环境下,物体表面一点在在光照下的反射颜色值.有许许多多的光照模型试图用数学的公式来模拟这个问题,当然这即是一个物理问题,也是一个数学问题.大学时最初接触计算机图形学时,对书本上关于光照模型的推到过程就极为不解,最近为了研究基于物理的光照模型看到一篇10年siggrgrah的course,(<Phys

Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF

在实时渲染中Physically-Based Rendering(PBR)中文为基于物理的渲染 它能为渲染的物体带来更真实的效果,而且能量守恒 稍微解释一下字母的意思,为对后文的理解有帮助, 从右到左 L为光线方向,H为半角向量,L是和V的中间,N为法线方向,V为我们眼睛的观察方向(相机看的方向),R为反射方向 Torrance-Sparrow光照模型的镜面反射公式 D为法线分布函数(NDF) F为反射函数(Fresnel 函数) G为阴影遮罩函数(几何函数),未被shadow或mask的比例

翻译 基于物理渲染的美术资源设计流程

基于物理的渲染 相关的系列文章又一篇,原创的总结也马上要发出来 如果要在游戏产品里推行基于物理的渲染,只有程序渲染管线是远远不够的,如何培训美术和设计人员去适应新的方法也是一个重要课题 这篇ppt也是我计划的一系列美术教材中的一篇,希望能对大家起到帮助,ppt里的有一个链接是要FQ的,为了方便,我就在这贴里翻译了 链接 http://pan.baidu.com/s/1mg2xSjY 49kw 原文 http://research.tri-ace.com/Data/cedec2012_FlowFo

unity3d 基于物理渲染的问题解决

[狗刨学习网] 最近1个月做了unity 次世代开发的一些程序方面的支持工作,当然也是基于物理渲染相关的,主要还是skyshop marmoset的使用吧,他算是unity4.x版本 PBR的优秀方案之一了 但在使用以及性能上,还是多少有些坑和不足,这里也是自己的一些心得吧,希望可以其他对这个方案有兴趣的朋友起到一些帮助. 一.遇到了fps降低的BUG 国庆节前的老版本工程和最新的工程版本运行起来没任何区别,但新版本在真机上的的运行效率有问题,只有7.5fps 开发和运行环境, XCode6.1

Unity3d 基于物理渲染Physically-Based Rendering之最终篇

前情提要: 讲求基本算法 Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-Based Rendering之实现 最后我们用fragment shader 实现,加上diffuse漫反射,代码和之前的surface差不多,只是多了reflect方向的计算,reflect方向的计算方法为用CG函数库中函数reflect, float3 reflect(float3 i, flo