伽马校正(gamma correction)学习笔记
来源:互联网 发布:淘宝的投诉卖家在哪里 编辑:程序博客网 时间:2024/05/10 00:58
学习HDR和Bloom特效的过程中,接触到了伽马矫正的问题。查阅了不少资料,这一篇讲的最清楚,下面的图片也是来自该文章。
这应该说是一个历史遗留问题,以前的CRT显示器是使用电子显像管,通过控制电流大小来控制显示屏幕上的亮度。然而亮度和电流之间的关系并非是线性的,也就是说电流强度变为2倍,显示的亮度并非是两倍,而是由公式1决定:
然而对于现实中的大部分摄像机或成像设备来讲,输入能量和记录在图片文件中的颜色亮度之间的关系却是线性的。这就导致显示器显示的图像与摄像设备捕捉的实际图像不一致,为了校正这个差异,摄像机在保存图像时会自动对数据进行一个伽马校正,如公式2:
从而还原图像原本的色彩。如下图所示:
红线表示显示器的伽马值,蓝线表示摄像机保存图片时进行的校正,紫线表示二者合成之后的结果。可以看出,显示器的
同样,进行3D渲染时,程序内部使用的是线性的颜色,直到最后渲染结果要输出到显示器上时,我们需要对渲染结果进行公式2的校正,正如摄像机所做的那样,这样保证我们渲染的结果能够正确的在显示器上显示。但是,前提是我们加载的纹理中的数据是线性空间中的。
正如前面所说,大部分图像捕捉设备在保存图片时会自动加上伽马校正,也就是说图片中存储的是非线性空间中的颜色(gamma值为2.2时的称之为sRGB空间),如果我们在渲染时直接使用图片存储的颜色数据,然后最终输出到屏幕时,再手动进行一次伽马校正,则会导致纹理过亮,因为我们进行了两次伽马校正。所以,读取纹理数据时,若纹理颜色是sRGB空间中的,我们需要对其“反伽马”校正,转化到线性空间中来,以保证光照计算的正确。只需将glTexImage2D中的internalformat设置为sRGB,OpenGL会自动进行转换,效率比手动高得多。
需要注意的是,像法线贴图,高光贴图等通常是在线性空间中生成的的,无需进行反伽马校正。是否用sRGB格式读入纹理,要视情况而定。
吐槽
今天才从个人博客转移到CSDN来,结果就发现之前的公式全部不能用了,还有之前的一些文字格式会有不兼容。CSDN这个markdown编辑器倒是不错,可是不能直接编辑已有的文章。不得已只好手动一篇一篇的复制,粘贴,修改,然后删除之前的导入的文章Orz。另外推荐一个将wordpress与CSDN同步的插件WP2CSDNBlog ,虽然同步过来之后依然需要手动修改,感谢作者。
- 伽马校正(gamma correction)学习笔记
- 【视频开发】伽马校正(gamma correction)学习笔记
- OpenGL学习脚印:伽马校正(Gamma Correction)
- OpenGL学习脚印:伽马校正(Gamma Correction)
- 【转】伽马校正(Gamma Correction)
- Gamma Correction(伽马校正)
- 伽玛校正(Gamma Correction)
- 伽玛校正(Gamma Correction)
- 伽玛校正(Gamma Correction)
- 伽瑪校正 (Gamma Correction)
- 【图形学】我理解的伽马校正(Gamma Correction)
- Gamma correction 伽马校准及 matlab 实现
- gamma correction
- gamma校正
- Gamma校正
- Gamma 校正
- gamma校正
- Gamma 校正
- python的for语句的输出格式的改变
- keep
- linux下C编程详解
- xxxxxx.dll文件丢失的解决方法_百度经验
- 【EA】参数翻译
- 伽马校正(gamma correction)学习笔记
- 安卓/平台QtQuick+socket.io+C++搭建聊天系统
- ActiveMQ主从配置
- 关于游标中fetch .. bulk collect into 需要注意的点
- Ubuntu-jdk+tomcat+eclipse软件包安装
- 树莓派lasersensor(Python程序)
- Eclipse上安装Genymotion插件(新手或找不到安装源的进来看看,给大家图个方便)
- Android —— releases of AOSP
- HDU 4535 吉哥系列故事——礼尚往来(错排)