注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

豆芽兵的生存探索

因,记录。留下历史,看到未来...

 
 
 

日志

 
 

【转载】[CG技术]——线性工作流(LWF) (二) 原理篇  

2014-05-21 23:53:24|  分类: 科学探索 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


原文作者:冰澜

简介:是我最敬佩的一个朋友、老师。

链接:(他博客暂时还没公布)


本文会从一些比较底层的原理说起,是结合了一些网络上的资料和我自己的理解,也许有不对的地方,请大家多一些自己的思考和判断。


      (一)Gamma的意义和对显示器的Gamma校正
    提到线性空间、色彩空间等话题时,有个概念不得不好好说明一下:Gamma值。Gamma值对于CG和其它图形、视频领域的从业者来说,都并不是一个陌生的概念,在继续下去之前,感兴趣的读者可以从下面的链接对Gamma值本身的作用原理进行深入的了解。
                Gamma校正——百度百科
                走进神奇的Gamma世界
 Gamma最初的产生,是源于一种电气现象,在早先的CRT显示器或电视中,其亮度和输入的电压并非是线性关系,如下:【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索

【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索

【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索

【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索


       上面的视频中,X轴输入的是电压,图片中X轴输入的是RGB值,虽然两者不同,但基于数/ 模之间转换通常理解是线性的,所以我们也通常认为输入的RGB值和电压是等效的,也就是说,输入的RGB值和输出的亮度值,在CRT显示器中并非是线性的,而是一种指数关系,而gamma值实际上就是这个幂,用数学关系表述的话就是:
      Output = Input ^ Gamma
       而Gamma值其实也并不是一个定值,PC的Gamma值一般来讲是2.2左右,而MAC显示器的Gamma则是2.5。因为Gamma的存在,如果一张未经过任何处理的线性图片放到这样的显示器下看的话,颜色是偏暗的,这显然不是我们希望看到的,因此需要进行Gamma校正。
       Gamma校正是一个很容易让人迷惑的概念,因为它并没有一个统一的标准来进行,但结果却是等效的,我试着从下面几种情况来逐个分析:
       (1)对于使用windows操作系统的PC下的Gamma校正。(约等于Gamma 2.2)
                PC不同于MAC,并没有内置的校正(关于MAC的校正一会儿会讲到),而是依赖系统层面的操作,主要的方式是两种:显卡驱动程序,和软件层面。形象点来说,第一种方式是这样,在windows下系统会调用显卡驱动程序的Gamma校正表(LUT)来进行Gamma校正;而第二种是在你用诸如Photoshop等软件查看图片时,软件自己会进行Gamma校正。两者并不相冲突,而是当其中一种生效时,另一种自动忽略的关系,大体是这样。
        (2)对于MAC下的Gamma校正。 (Gamma2.5)
                MAC显示器的Gamma值是2.5,并且硬件内置了1.4的校正,所以它还需要2.5/1.4 ~= 1.8的校正才能成为线性,而对这1.8的Gamma校正,方法和在PC下并没太多不同,只不过PC下需要进行的Gamma为2.2,而MAC下为1.8而已。
       (3)拍摄视频中的Gamma校正。
                  视频和拍照对于Gamma的处理有所不同,通常用相机拍摄出的照片,其原始格式是线性的(虽然现在很多相机具有内置的将其转换成JPEG等非线性格式的功能)。而视频设备(如录像机)的工作方式不同的是,在摄像设备中通常具有硬件gamma校正电路,因此并不需要再额外进行校正。
       然而需要特别说明的是:以上所说的Gamma和Gamma校正,是更多存在于硬件和系统层面来讲的,这些变化在图片进入你的显示器之前已经完成了,是对显示器的Gamma进行的校正,你觉察不到也无法改变。
           
      (二)sRGB和人眼的感知
      在上面的章节中,我分析过了Gamma的意义和对显示器的Gamma校正,然而这些在我们使用显示器看到画面前已经完成了,那对我们的线性工作流又意义何在?真正将Gamma和线性工作流联系起来的,是另一个概念:sRGB。
      在说明之前先让我们思考一个问题,经过了在上一章的对显示器Gamma的校正后,图片以线性的方式进入显示器了,那么我们看到的图片,是线性的吗?其实并不是,有两个因素制约着我们:

      (1)如果你看过我前一篇文章,应该还记得我提到过,人眼对光线的感知并非线性,而是对暗部的光线变化更敏感,对亮部的光线变化较为不敏感,如果把人感知的亮度做为X轴、把现实世界中的真实亮度做为Y轴,得到一个函数曲线的话,就会是下面这样:
  【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索

(2)人眼本身对光线的感知特性原本并不会影响太多,就如同我们观察现实世界并不会感觉到有什么不对一样。然而我们在显示器上观察时,又是另一回事了,由于受到硬件水平的限制,我们用的显示器绝大多数都是8位的,也就是说,在R、G、B三个通道上,每个通道上最多只能显示2^8=256种,若按亮度来看的话,也就是最多只有256种亮度。当图片在8位的显示器上线性显示时,也就是说图片中的亮度被被均匀地分成了256份。而由于人眼对于暗部光线的感知较为敏感,在这256份中,亮度越低,每相邻两份的亮度差别越容易被人所感觉到,反映到我们在显示器所看到的颜色上,就是容易在图片较暗的地方看到明显的色阶。

       为了避免在显示器上显示图片时出现暗部的色阶,惠普微软于1996年一起开发了用于显示器打印机以及因特网的一种标准RGB色彩空间——sRGB色彩空间。sRGB色彩空间将更多的颜色空间给了暗部,而在人眼不敏感的亮部减少了空间,从而对人眼的光线感知偏差进行了补偿,使我们看到的图片在8位的有限色彩下,也不会在暗部出现色阶感,结果就会像下面的图所展示的一样:
      【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索

而巧合的是,sRGB色彩空间的曲线与Gamma2.2的曲线极其一致,因此我们经常在进行色彩空间转换时,直接应用一个Gamma2.2的操作,而这恰恰也是许多人将显示器的Gamma校正和sRGB色彩空间的视觉补偿这两件并不十分相干的事混为一谈的原因所在。
      那么,在sRGB空间下看所有的图像都是符合人眼感知的吗?并不是这样,只有采用8位非线性编码格式(如JPEG、TIFF、PNG等)的图片在sRGB空间下显示才是正确的,而32位线性图片(如OpenEXR、HDR)不经过转换,直接在sRGB色彩空间显示的话,会偏灰白。            
     
     (三)sRGB、Linear与线性工作流
       以上这些看完,可能有人会问,这些和线性工作流到底有什么关系? 关系大的很,因为它告诉我们:
       我们在电脑上看到的8位编码的图片(如JPEG、TIFF、PNG)虽然在sRGB色彩空间下看起来是正确的,但却不是线性的,如果不经转换直接用在三维软件和后期软件中,就造成了输入端的非线性;而相对的,在三维软件中输出的8位和16位图片,其本身是线性的,但不经过调整而在sRGB色彩空间中以非线性的方式显示,则造成了输出端的非线性,其结果就是我在上一篇文章中写到的,图片偏暗、亮暗过渡不自然、光线计算不物理等。     
      而在线性工作流中,要求输入、计算、输出端都是线性的,才能保证结果的正确性。如下图:

【转载】[CG技术]——线性工作流(LWF) (二) 原理篇 - 豆芽兵 - 豆芽兵的生存探索

也就是说,在线性工作流中,输入的图片如果是8位的非线性图片,需要进行从sRGB色彩空间——》线性色彩空间的转换,而32位的线性图片则不需转换;计算中光线的颜色、亮度、材质的颜色同样需要进行从sRGB到Linear的转换,以保证物理上的真实准确;输出的线性图片再从Linear色彩空间转换为sRGB色彩空间,以保证观察上结果的正确,这样才是线性工作流了。 
       好了,原理先说到这里,下一篇我会着重讨论LWF的实际应用,下回见。

  评论这张
 
阅读(2042)| 评论(2)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017