先上图

此图出于LearnOpenGl CN。原文可能由于翻译的关系,导致内容其实并不好理解。翻阅了不少资料后(其实就是冯乐乐老师的入门精要,逃...),想对gamma矫正做一个简单的总结。

先剖析一下这张图的含义(此图其实不是重点)。首先,横轴代表,给计算机提供的颜色的物理强度rgb(图片上储存的信息或是shader的输出),纵轴是计算机实际会为这个值提供多少物理强度

中间直的小点虚线代表,你给计算机提供多少,计算机就用多少(实际不会这样)。

下弯的线表示,计算机会使用更低的数字替代你的输入(这是计算机实际的工作方式),在crt时代,这个偏低是利用显示屏硬件上的缺陷自动进行的,而现在这个偏低是故意的。

故意的原因在于数码摄像器材的8位每单位输出为了保存更多的暗部信息,会对实际捕获到的物理强度进行上弯encoding后再保存,以使得256个梯度中有更多的梯度用于表示暗部的细节,计算机在显示照片时为了平衡这个上弯的动作,就需要有一个下弯的decoding。

也就是说,你给计算机提供的颜色值,显示屏在显示前会无脑的下弯。不论你显示的是一张真实拍摄的图片还是在显示屏上制作的图片,又或者是,给他提供的基于物理模拟的渲染结果。

真实的图片由于这套机制就是给他量身定做的,下弯后,正常。显示屏上制作的图片由于输出输入在相同的下弯空间内,所以也正常(如果硬要扣的话,可以想象如下情景。你想要一个实际0.2的红,但其实计算机告诉你他是0.5的,而实际显示出来的时候,计算机又tm把他当作0.2处理...计算机在私底下欺骗了你两次,圆掉了这个谎言)。而当你把物理模拟的结果直接给计算机用于显示的时候,结果就是错误的了(下弯了)。

所以基于物理的渲染器会像摄像机器材做的那样上弯自己的输出,以平衡马上会受到的下弯。同时,这其实也是对自己输出的一个保护,因为帧缓冲一般也是8位的。(可以把渲染想象成拍照..渲染结果同样要保存到一张图片(帧缓冲)中),直接把渲染结果往里塞,同样会失去很多暗部的细节。当然如果开启hdr模式,帧缓冲的精度会扩大,暗部细节可以随意保留,但最后为了平衡显示器下弯,还是需要做一次上弯。

渲染器的输出是正常了,输入呢?

由于我们知道贴图素材其实被上弯过的(不论是被摄像器材还是被计算机欺骗了的隐式上弯(0.2的红被你当成0.5的)),所以在基于物理模拟时,采样这些贴图前就需要提前进行下弯,让他们持有正确的物理信息。unity中的lieanr/gamma设置就是设置上述内容的。当选用linear设置并且采样sRGB的贴图时,会使用下弯操作(贴图也可以不设置sRGB来拒绝被下弯,但是你得保证你的贴图数据真的不需要下弯,比如它是一张高精度的线性颜色空间的图片,又或者是一张法线贴图,法线贴图是你眼睛调出来的吗,笑....),输出渲染结果时,会上弯,随后显示屏下弯。你就能看到正确的物理效果。

那为什么需要设置呢,无脑linear不就好了吗。因为自动对输出进行gamma矫正是硬件行为,且在大多数移动端设备都不支持...所以,移动端上,其实可以自己手动实现一个linear的操作。不嫌麻烦的话,可以在每个fs输出的时候,进行上弯操作(贴图方面,并不确定是不是都支持SRGB的纹理格式,不支持的话就需要手动下弯),但不推荐之后再进行alpha混合(用上弯后的颜色混合会导致错误的物理结果)。比较简便的方法是使用后处理,把渲染结果输出到一个高精度的texture上再做色调映射+上弯(如果仍然是8位的话,还是需要先上弯保护暗部细节,等于还是要在fs里写,所以需要高精度的RTT),显然这就对性能有消耗(前一种方法累,但是省了一定的性能,同时透明变得很尴尬,后一种方法简便直观,除了高精度RTT的消耗其他没有副作用,而且很多情况下都需要高精度RTT,所以也可以认为没有额外消耗)

Gamma矫正,先有鸡还是先有蛋的故事相关推荐

  1. 图像处理——gamma矫正

    gamma矫正的目的 (Gamma Correction,伽玛校正):在电视和图形监视器中,显像管发生的电子束及其生成的图像亮度并不是随显像管的输入电压线性变化,电子流与输入电压相比是按照指数曲线变化 ...

  2. ISP算法:gamma矫正

    Gamma矫正:在视频系统,线性光Intensity通过Gamma校正转换为非线性的视频信号,通常在摄像过程内完成. 矫正原因:

  3. gamma矫正/gamma映射

    what is the gamma? CCD.CMOS成像方式是通过像点中的"硅"感受光线的强弱而获得画面.而硅感光是物理成像,它真实地反应光线强度的变化,来多少就输出多少,因此它 ...

  4. Unity的gamma矫正、颜色空间及其转换的问题

    Unity的gamma矫正.颜色空间及其转换的问题 1,伽马矫正 2,unity的颜色空间 2.1两种颜色空间流程 2.2pbr贴图格式 2.3手动完成空间切换 2.4升级URP后亮度不一致问题的问题 ...

  5. 图像处理--gamma矫正/Python

    gamma矫正 gamma矫正通常用于电视和监视器系统中重现摄像机拍摄的画面.在图像处理中也可用于调节图像的对比度,减少图像的光照不均和局部阴影. gamma矫正公式: f(x)=xγf(x)=xγ ...

  6. ISP中gamma矫正模块的FPGA设计和仿真

    pangpang最近耗费很久的时间写了一个ISP中的gamma矫正模块,写下本文记录一下. 目录 1.gamma矫正介绍 2.本文gamma矫正设计要求 3.设计过程 4.仿真验证 5.总结 1.ga ...

  7. Camera ISP - Gamma 矫正

    这是第一篇 Camera ISP 的文章,主要从自己收集到的资料来试着描述下关于 Gamma 的理解,需要注意的是目前为止我了解到的有关于 Gamma 的说法还是众说纷纭,各处都不甚一致,在尽可能收集 ...

  8. 彻底搞懂Gamma矫正

    最近复习图形学的时候,复习到了Gamma矫正,笔记本上记得内容太少,没有看明白是啥意思,于是就到网上去搜索了一下,好了越看越不明白了--花了两天,终于算是搞懂了,写在这里分享一下. 首先,关于颜色矫正 ...

  9. 菌群与疾病的关系探讨之一:先有鸡还是先有蛋?

    本文转载自"态昌基因",己获授权. 掐指一算,小昌也是有十几年菌群研究项目经验的老司机了,本以为做的多会的多,结果却是做得越多疑问越多,所以小昌对菌群研究的评价就是"这里 ...

  10. 先有鸡还是先有蛋? 加拿大科学家揭开谜底

    据美国生活科学网报道,鸡和蛋先后之争持续已久,究竟是先有的鸡还是先有的蛋,这一让人百思不得其解的古老谜题终于有了谜底.通过对7700万年前的恐龙蛋化石的研究后,科学家宣布谜题答案是先有的蛋后有的鸡. ...

最新文章

  1. Codeforces 900D Unusual Sequences:记忆化搜索
  2. 动态数据绑定之监听对象变化
  3. 大数据玩家们对2013年趋势的预测
  4. Tomcat基础教程(一)
  5. Spring的组件赋值以及环境属性@PropertySource
  6. php中的CURL库
  7. 给定一个9位数字的ISBN,求其校验位
  8. java作用域对象笔记_Java学习笔记(七)——对象
  9. 【Computer Organization笔记11】多周期CPU
  10. java 接口 同名方法_java 实现多个接口 方法重名的解决办法——内部类
  11. 5 Openstack-Ussuri-Placement部署-ubuntu1804
  12. 计算机应用技术头像,意大利科学家应用计算机技术进行头像复原
  13. linux限制用户登录失败次数
  14. 排序算法伪代码以及python实现——插入,归并,快速,堆,计数
  15. chan算法 matlab,TDOA定位的Chan算法MATLAB源代码
  16. day04-硅谷课堂-前端基础知识(二)
  17. CC00034.bigdatajava——|Java方法封装.V16|——|Java.v16|费氏数列.v02|递推实现|
  18. Typora markdown教程
  19. 交叉引用跳转不到后面_参考文献如何正确标注引用而不会变红?
  20. SpringBoot 之 分分钟搞懂Lombok使用与原理

热门文章

  1. JanusGraph安装和配置教程
  2. python3 爬虫https的坑 -- 已解决
  3. 手机安装W ndows7镜像,Windows7ISO镜像安装系统教程
  4. h5调用手机相机和录音机_html5 调用手机摄像头以及录音的方法
  5. java编程器宣传费湖南岚鸿驱动_EasyPRO系列通用编程器驱动程序
  6. Python绘图常用的库及介绍
  7. 基于HTML5的电子病历编辑方法及系统与流程
  8. 网站在线协作工具 onlyoffice在线协作
  9. 秒杀系统设计要点总结
  10. Idea 离线安装插件 Idea 安装离线插件