[ZZ] [siggraph10]color enhancement and rendering in film and game productio
原文link:<color enhancement and rendering in film and game production>
是siggraph 2010,“Color Enhancement and Rendering in Film and Game Production” course的一个paper。
从摄影到电影里面使用的技术,来启发游戏里怎么使用。
很不错的一个地方是:了解到了filmic tone mapping是怎么来的了,之前uncharted2的文章还看的我一头雾水
http://blog.csdn.net/toughbro/article/details/6755980
首先是一个dynamic range的map,这个图不错:显示了从现实世界,到camera,到display的一个mapping关系,具体情况中会根据需要来做一些range上的取舍,也就是进一步的mapping。
这里面我们要逐渐习惯的以方式就是curve的表达方法,比如增加contrast,我们可能直接那一个公式搞起,这里就用curve来表示:
这里是推导filmic tonemapping curve的一个过程:可以看下图
- 直接把camera得到的range,map到display的range,画面会很灰:series2
- 那么加一些对比度,但又会遇到严重的clamp问题:series3
- 所以加一些柔和,把clamp那里做柔,变成这样:series1
后面还有好多的color grading相关的内容,但是只有图没文字,所以也没法记了。
HDR
high dynamic range.
很多程序朋友(包括我)都是从dxsdk上看到和学习这个概念,开始学习的更多的是一整套hdr sample的流程:
- 在float render target上去render scene
- 后面很多console上的游戏使用rgbm等编码方式来节省内存和bandwidth
- 通过down sample去计算亮度
- treyarch是cook到场景数据里面,省了这个down sample的过程
- 根据亮度对场景做一个矫正(tone mapping)最后输出到一个rgb8的render target上
- dynamic range:reinhard的<tone mapping>论文中定义:一个场景中最高亮度与最低亮度的比是dynamic range。
- low dynamic range : 之所以出现这种情况是图像存储介质(打印纸,照片,电脑屏幕等)精度有限造成的,导致在range上没法完全记录一个场景的亮度信息,只能记录有限的一部分,比如游戏里常见的在rgba8上渲染,每个channel大于1的部分就被截取到1了。
- high dynamic range : 准确讲是high dynamic range imaging,是指一种图像技术,它能让图像表示一个比原有技术(之前的LowDynamicRange)更大(greater)的dynamic range
- 这样就可以更加准确和真实的描绘一个场景
- 自动根据亮度矫正明暗:让我们晚上看东西也能比较清楚,一开灯眼睛要矫正一会回来
- 局部适应性:比较经典的图是:
- 曝光率问题---解决:exposure adjustment。和照相时候曝光原理差不多,白天亮曝光就短一些,晚上曝光长一些,编程时候就是计算render target的平均亮度,然后矫正,这样沙漠的白天和丛林的夜晚都可以在游戏中的rgba8上有一个良好的体现。在hable的论文里,这个属于不同的场景之间的处理问题范畴。
- 压缩的过程中不可避免的涉及到重新分配亮度值,怎么做来得到更好的尽可能不失真的画面这个解决方案就是tone mapping
实际中也有把这个exposure adjustment并到tone mapping中去,其实还是分开比较好,因为这些概念是从摄像技术中来的,曝光就是曝光,tone mapping就是tone mapping。
ReinhardToneMapping
tone mapping方面比较著名的reinhard哥:
reinhard主页
http://www.cs.ucf.edu/~reinhard/cdrom/
paper link:
http://www.cs.ucf.edu/~reinhard/cdrom/tonemap.pdf
tone mapping干什么的?
dxsdk里面也有说,本来是摄影中提出的概念,解决怎么把场景中范围巨大的亮度值放到范围有限的存储空间中来(照片,打印机。。。),达到一个让人喜欢的结果。
这里面一点是“让人喜欢的结果”,它是一个含有主观意味的东西,没有一个绝对的标准,也没有说什么是绝对的对和错,根据游戏类型和开发者,玩家口味,大可选择自己喜欢的结果,tonemapping是达到这一结果的方法而已。
tonemapping相关的研究是从摄影技术中发展过来的,只不过digital imaging有比摄影洗相片更好的一个优势,可以进一步发展:
首先明确和定义一些概念:
- zone:存储空间的亮度阶这么一个概念,比如print只有11个zone
- middle grey:中间的亮度
- dynamic range:指场景中最高亮度与最低亮度的比值
- 这是一个最学术派的定义,具体上摄像师一般会追求细节还可以明辨的range
- key:描述整个场景亮度的数值
- dodging and burning:把高亮度的东西亮度降低为dodging,把低亮度的部分加亮为burning
tone mapping就是一个原始颜色向目标颜色映射的过程,不同的函数呈现一些不同的特点,这里列一些,看下对比:
ppt中有更多的一些对比,这里直接总结filmic tone mapping的好处就是:
- 向暗色过渡的更“脆”
- 高亮部分更柔和
- 在input color的match上也更接近linear
- A = Shoulder Strength
- B = Linear Strength
- C = Linear Angle
- D = Toe Strength
- E = Toe Numerator
- F = Toe Denominator
- Note: E/F = Toe Angle
- LinearWhite = Linear White Point Value
- F(x) = ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F)) - E/F;
- FinalColor = F(LinearColor)/F(LinearWhite)
在具体的代码看hable的blog更好了:
- float A = 0.15;
- float B = 0.50;
- float C = 0.10;
- float D = 0.20;
- float E = 0.02;
- float F = 0.30;
- float W = 11.2;
- float3 Uncharted2Tonemap(float3 x)
- {
- return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
- }
- float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR
- {
- float3 texColor = tex2D(Texture0, texCoord );
- texColor *= 16; // Hardcoded Exposure Adjustment
- float ExposureBias = 2.0f;
- float3 curr = Uncharted2Tonemap(ExposureBias*texColor);
- float3 whiteScale = 1.0f/Uncharted2Tonemap(W);
- float3 color = curr*whiteScale;
- float3 retColor = pow(color,1/2.2);
- return float4(retColor,1);
- }
转载于:https://www.cnblogs.com/kylegui/p/3871188.html
[ZZ] [siggraph10]color enhancement and rendering in film and game productio相关推荐
- Distort-and-Recover: Color Enhancement using Deep Reinforcement Learning
Distort-and-Recover: Color Enhancement using Deep Reinforcement Learning 摘要 Introduction Problem For ...
- 【论文翻译】Distort-and-Recover: Color Enhancement using Deep Reinforcement Learning
ABSTRACT: 本文提出--人类修图是按照步骤逐渐进行的序列,于是用MDP建模,训练agent得到一个最优的动作序列.此外,我们提出了一种"失真-复原"训练方案,只需要高质量图 ...
- PBR--RTR4笔记--第八章 光与颜色
这只是笔记,有很多理解和翻译错误的,请谨慎参考.请以原书为准. 8.0 说明 这章很重要,系统的讲解了colorspace相关知识,随后介绍了tone-mapping.Explosure. c ...
- WebRTC详解-zz
1.WebRTC目的 WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox\...) 轻易快捷开发出丰富 ...
- opencv曝光过度_图像增强 Image Enhancement
图像增强(Image Enhancement),其目的是要改善图像的视觉效果. 自动色阶 作用:自动调整图像中的黑白场. 原理:剪切每个通道中的阴影和高光部分,并将每个颜色通道中最亮或最暗的像素映射到 ...
- 计算机视觉论文-2021-06-29
本专栏是计算机视觉方向论文收集积累,时间:2021年6月29日,来源:paper digest 欢迎关注原创公众号 [计算机视觉联盟],回复 [西瓜书手推笔记] 可获取我的机器学习纯手推笔记! 直达笔 ...
- CVPR 2018 paper list(论文列表)
原文链接:http://cvpr2018.thecvf.com/program/main_conference 52 Embodied Question Answering Abhishek Das ...
- 计算机视觉论文-2021-07-29
本专栏是计算机视觉方向论文收集积累,时间:2021年7月29日,来源:paper digest 欢迎关注原创公众号 [计算机视觉联盟],回复 [西瓜书手推笔记] 可获取我的机器学习纯手推笔记! 直达笔 ...
- 遥感相关专业英语词汇汇总
对网络上英语专业词汇进行汇总整理,如下表: 序号 英语基础词汇 摄影测量与遥感专业英语词汇 英语基础词汇 英语基础词汇-生态环境与遥感 1 Absorbed photosynthetically ac ...
最新文章
- 利用Maven搭建Spring开发环境 【转】
- Promise和setTimeout执行顺序 面试题
- 3dContactPointAnnotationTool开发日志(二一)
- golang使用reflects调用方法时,方法名需要首字母大写
- Docker 修改运行中的容器端口映射
- git fetch和git pull之间的区别--转载
- [云炬创业基础笔记]第五章创业机会评估测试7
- c语言链表查找的代码与题目,链表的C语言实现之单链表的查找运算_c语言
- 图片做背景撑开div
- H3C 单区域OSPF配置示例二
- LeetCode LCP 30. 魔塔游戏(优先队列)
- js逆向网易云加密记录
- Error parsing HTTP request header Larger错误解决方法
- JavaWeb项目启动时,自动执行指定方法
- Nature:肠道内微生物合作方式的探究
- 文件系统(一)---文件系统基础知识
- FireFox插件RESTClient
- 程序员为什么要学习软件工程
- java导出doc文档
- SEO重要的是初心不变