简述ToneMapping发展史

  • HDR
  • 2002年Reinhard ToneMapping
  • 2007年CryEngine2
  • 2010年Uncharted2(神秘海域2)公开算法
  • 目前最好的ToneMapping算法---来自学术界的藐视,Academy Color Encoding System(ACES)

HDR

为什么会有ToneMapping说到底还是因为HDR(High-Dynamic Range),一般的显示器能显示的亮度为28 种(LDR),而现实世界最亮物体和最暗物体亮度之比为108 ,人眼能看到的范围是105 左右,值域远大于28 ,所以为了存储更多的亮度信息,而采用了拥有216量级的HDR,但是因为一般显示器只能显示28,所以需要做个色调映射,用28个数字模拟216能表示的信息,由此才出现了ToneMapping。

2002年Reinhard ToneMapping

2002年,出现了一篇论文 Photographic Tone Reproduction for Digital Images,此ToneMapping也以作者的名字来命名,这是个经验公式,代码如下

float3 ReinhardToneMapping(float3 color, float adapted_lum)
{const float MIDDLE_GREY = 1;color *= MIDDLE_GREY / adapted_lum;return color / (1.0f + color);
}

其中color是线性的HDR颜色,得到的曲线如下图所示:

这个算法满足了HDR向LDR转变的基本要求,但是缺点是整体朝着灰色的方向被压缩了,而且其中有个变量MIDDLE_GREY为魔法数字,完全凭经验自定义。

2007年CryEngine2

到了2007年,CryEngine2(就是那个孤岛危机)为了克服Reinhard灰暗的缺点,也提供了一种经验公式,

float3 CEToneMapping(float3 color, float adapted_lum)
{return 1 - exp(-adapted_lum * color);
}


也成功得到了一个S型曲线,没有魔法数字,也解决了Reinhard灰暗的问题,问题就是比较粗暴,为了得到S型曲线硬弄了这么个算法出来。。无法着手优化。

2010年Uncharted2(神秘海域2)公开算法

到了顽皮狗了,当年神海2真的是神作~由于他们的引擎还没有名字所以只能拿产品名来命名了。他们公开了自己的ToneMapping算法,取名为Filmic tone mapping。这个方法的本质是把原图和让艺术家用专业照相软件模拟胶片的感觉,人肉tone mapping后的结果去做曲线拟合,得到一个高次曲线的表达式。这样的表达式应用到渲染结果后,就能在很大程度上自动接近人工调整的结果。

float3 F(float3 x)
{const float A = 0.22f;const float B = 0.30f;const float C = 0.10f;const float D = 0.20f;const float E = 0.01f;const float F = 0.30f;return ((x * (A * x + C * B) + D * E) / (x * (A * x + B) + D * F)) - E / F;
}float3 Uncharted2ToneMapping(float3 color, float adapted_lum)
{const float WHITE = 11.2f;return F(1.6f * adapted_lum * color) / F(WHITE);
}


那些ABCDEF都是多项式的系数,而WHITE是个魔法数字,表示白色的位置。这个方法开启了ToneMapping的新路径,让人们知道了曲线拟合的好处。并且,其他颜色空间的变换,比如gamma矫正,也可以一起合并到这个曲线里来,一次搞定,不会增加额外开销。缺点就是运算量有点大,两个多项式的计算,并且相除。

因为Filmic tone mapping的优异表现,大部分游戏都切换到了这个方法。包括CE自己,也在某个时候完成了切换。

目前最好的ToneMapping算法—来自学术界的藐视,Academy Color Encoding System(ACES)

“我不是针对谁,我是说在座的各位都是垃圾”

提出这个的是一个叫“美国电影艺术与科学学会”,它到底是何方神圣呢?没错,就是颁布奥斯卡奖的那个机构~
“你们这群搞游戏和图形的都靠边站,让我们电影业来教教你们“”。

float3 ACESToneMapping(float3 color, float adapted_lum)
{const float A = 2.51f;const float B = 0.03f;const float C = 2.43f;const float D = 0.59f;const float E = 0.14f;color *= adapted_lum;return (color * (A * color + B)) / (color * (C * color + D) + E);
}


看着和Uncharted2的做法很相像,都是多项式拟合,S感很浓,并且比Uncharted的更向小的方向移,即便很小的数值和接近1的数值也有梯度。这样能很好地保留暗处和亮处的细节。目前的UE引擎也是使用的ACES。

至此,ToneMapping已经完成了进化,在HDR越来越普及的现在,相信还会有更新的技术出现~

简述ToneMapping发展史相关推荐

  1. 为何如今在主板上找不到北桥了?简述主板芯片组发展史

    https://baijiahao.baidu.com/s?id=1636848759349227507&wfr=spider&for=pc

  2. 深度探讨验证码发展史,账户中心安全科普文

    12306图片验证码吐槽风波将验证码推到风口浪尖,各种吐槽及恶搞接连而至,让之前一直无处不在但是又默默无闻的验证码风光了一回,面对普通用户的抱怨和谩骂,作为产品人员的我们,是不是应该多一些理性思考呢. ...

  3. pli测试50题题库_AI面试必备/深度学习100问1-50题答案解析

    1.梯度下降算法的正确步骤,(正确步骤dcaeb)(梯度下降法其实是根据函数的梯度来确定函数的极小值),这里的问题与其说是梯度下降算法的步骤不如说类似图图像分类训练的整个流程:网络初始化-输入to输出 ...

  4. 计算机科技论文范文,★计算机科技论文摘要范文计算机科技论文摘要写

    ★计算机科技论文摘要范文计算机科技论文摘要写 当今计算机科技快速发展,我国虽然在计算机科技领域已取得了较大的发展,但是与世界的高端的水平仍有一定的差距,因此借鉴国外的优秀研究成果是非常重要的.在借鉴国 ...

  5. 计算机科技论文摘要,计算机科技论文摘要怎么写 计算机科技论文摘要范文参考...

    [100篇]免费优秀与计算机科技论文摘要范文相关的资料,为计算机科技方面的的本科毕业论文和硕士毕业论文与职称论文写作提供有价值计算机科技论文摘要范本格式模板参考. 第一篇论文摘要:计算机科技论文摘要英 ...

  6. AI面试必备/深度学习100问1-50题答案解析

    转载:   https://blog.csdn.net/T7SFOKzorD1JAYMSFk4/article/details/80972658 1.梯度下降算法的正确步骤,(正确步骤dcaeb)(梯 ...

  7. 浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战

    作为前端老鸟,从IE的6.7.8开始做前端,各种兼容性折磨死人.js还好有了jQuery.chrome出来后,真是救苦救难,解救程序员的于水火.但是可恶的boss还是要求兼容ie6,7.感谢淘宝团队的 ...

  8. 英语简述计算机的发展史,计算机的发展历史-简述计算机的发展史

    计算机的发展经历了哪几个阶段?各阶段的主要特征是什么? 一共有四个发展阶段: 第一个发展阶段是电子 管计算机的时代,在年到年.年第一台电子计算机问世美国宾西法尼亚大学,它由冯·诺依曼设计的.占地平方, ...

  9. 快速转行做产品经理系列基础篇:1、中国互联网发展史简述

    科技改变生活,互联网的变革影响了世界. 作者博客: PM 小凯哥 https://xuxinkai.cn/ 一.为何要了解互联网发展简史 当你看到这篇文章题目时,是不是在疑惑成为产品经理和了解互联网发 ...

最新文章

  1. 【OpenCV 4开发详解】轮廓面积与长度
  2. 通过源代码研究ASP.NET MVC中的Controller和View(二)
  3. 城市仿真为何成为大势所趋?
  4. idea设置新增文件,自动添加到git
  5. 虚拟dom_通过编写简易虚拟DOM,来学习虚拟DOM 的原理
  6. [转]T4模版引擎之基础入门
  7. [js] for in 和 for of 的区别?
  8. python type函数_Python type()函数
  9. java根据ip获取经纬度城市地址
  10. kotlin-android-extensions扩展的导入
  11. 如何做好罗斯蒙特流量计管理工作
  12. html标题(heading)
  13. Mac运行exe的几种方法,欢迎补充!
  14. PS证件照排版计算器
  15. 活动报名 | 清华大学交叉信息研究院高阳:视觉机器人学习
  16. Mac打不开别人的.one文件
  17. 大陆中文网站流量排名前100
  18. final 修饰的成员变量必须手动初始化
  19. 修改服务器连接数,服务器修改连接数
  20. 从2018年以太坊统计数据看区块链发展趋势

热门文章

  1. 天线越大越好吗_天线数量是不是越多信号越好?无线路由器一、二、三根天线有什么区别?...
  2. html纵向通栏,通栏平均分布型.html
  3. 2021-2027全球与中国5G独立组网架构市场现状及未来发展趋势
  4. 使用Jquery+EasyUI 进行框架项目开发案例讲解之三---角色管理源码分享
  5. 自考系列-4741计算机网络原理1
  6. SQL Server2012下载
  7. Webpack 打包 Javascript 详细介绍
  8. 【操作系统】多级索引、混合索引例题
  9. (周末公众号解读系列)2000字-视觉SLAM综述
  10. 周末了,不得找个陪玩打游戏?看我用Python怎么找个最好的