图像后期处理之色彩原理 vol 3 | 线性流程
本系列前两篇介绍了色彩深度和颜色空间,提到了电影后期要基于 32Bit 线性流程,这样可以最大限度地保留图像的细节。本篇会着重梳理 Photoshop, Maya, Max , Nuke 等几个常用后期软件线性流程方面的知识。如有偏差,欢迎指出。
● Photoshop 篇
Photoshop 是最常用的图像二维处理软件,默认设置是 8 bit 色深和 sRGB 颜色空间,日常我们处理照片已经足够了。对于电影后期制作来说,贴图师和数字绘景师一般会把默认的设置调整为 16bit 或更高的 32bit,以尽量减少质量的损失。
当用 8bit 和 16bit 储存图片格式的时候,Photoshop 默认认为这是一张 sRGB颜色空间的图片,会自动进行 sRGB 编码,当转换成 32bit 之后,输出的图片(通常为 exr 格式)被默认当成了一张 Linear 的图片,不进行 sRGB 编码。
储存为 8bit sRGB 图片,格式种类很丰富:
储存为 32bit linear 图片,只有几种格式可以选择:
Photoshop设置颜色空间的菜单位置:
Photoshop自带一长串 LUT,可以模拟不同设备上的显示效果:
很多从业人员会发现,当我们用 Photoshop 打开一张 8bit sRGB 和 32bit Linear 图片后,显示效果是一样的,但上一章我介绍了 Linear 应该看上去比 sRGB 暗很多才对。没错!他们的颜色空间就是不同的,只是 Photoshop 比较智能,当打开一张 32 bit 图片时,它会认为我们只是想在线性空间下工作,并不会愿意在线性空间下看最终显示结果,因为没有那个显示设备是线性空间的。所以自动给 Linear 图片套上了 sRGB 的 LUT 来模拟一般显示器的显示效果,为我们省去了这一个步骤。
来看一张我在斯里兰卡拍摄的美图,这些渔夫都是摆拍的,奶奶个腿儿拍这些照片还收了我银子。
当我们用 8bit 来处理图片时,颜色空间设置为 sRGB ,默认勾选了“保留 RGB 编号”,不管你勾不勾选都没有任何变化,因为这张图本身就是 sRGB 的,所以不需要任何的转换。
当我们把图片转换成 32bit 后,Photoshop 自动把它转成了 linear 空间,如果用同样的颜色空间设置,就会看到图片发暗了,说明这是一张线性的图片。
“保留 RGB 编号” 选项的意思大致是:是否保留这张图片本身的 sRGB 编码,如果使用线性流程,套用 sRGB LUT 来观看和显示图片,就没有必要勾选了,这会让图片本身再套上一层和 sRGB 相反的曲线,即使选择了使用 sRGB LUT 来观看,图片任然看上去是暗的。
去掉 “保留 RGB编号” 选项,线性图片在 sRGB LUT下显示正常:
使用 32 bit 绘制和处理图片,套上 sRGB 或者其他 LUT 来观察,以 32 bit exr 文件来储存,这就是 Photoshop 基本的线性流程。
● Maya & Max 篇
Autodesk Maya 是几乎所有特效公司都会使用的三维软件,最新的 Maya 放弃了 Mentalray 渲染器,搭配了时下最为流行的 Anorld 为默认的渲染器,笔者受工业光魔项目的影像,使用 Vray 比较多,所以会以 Vray 来讲解 Maya 的线性流程,套路都一样,其他渲染器线性设置可以举一反三。
下图是使用 Vray 最基本的设置渲染的物体,贴图依然是斯里兰卡的那张照片,既然花了银子就得多用几次,:)。默认我连接了 8bit sRGB JPG 格式的贴图,但是我们发现渲染出来的图片的颜色发白,丢失了一些饱和度。
Beauty 通道:
如果去掉光影信息,切换到 Diffuse Color 通道,能更明显地看出颜色的丢失。
Diffuse 通道:
这是因为 Vray 默认使用了线性流程,而我们的贴图是一张 sRGB 的 JPG 图片,渲染器把这张图默认当成了一张线性的贴图,不做任何处理,所以在套上 sRGB 的 LUT 之后,等于在本身就是 sRGB 的贴图之上又套用了一层 sRGB 的颜色空间,叠加了两次 sRGB 的曲线,所以图片变亮变灰了。
要解决这个问题很简单:
方法 1:
把 sRGB 贴图替换成一张 32 bit 的 exr 线性空间图片(也可转成 tx 格式,目前很多渲染器支持 tx 格式,这种格式读取速度会更快)
方法 2:
如果不是电影级别的贴图制作,嫌麻烦任性地只想使用 sRGB 贴图,可以告诉 Vray,我使用的是一张 sRGB 的图,在渲染之前给它一个和 sRGB 相反的曲线转化成线性。
具体操作:在 Maya 的 File 节点下,添加自定义属性: Texture input gamma,设置 Color Space 为 sRGB 或 Gamma 2.2 。
添加自定义属性,定义贴图的颜色空间:
sRGB 和 Gamma 2.2 两个选项得到的结果几乎是一样的,但不完全相等:
上一章讲解了 sRGB 其实就是一条 Gamma 2.2 的曲线,但经过好朋友王染的指正,这两者只能说是相似,在曲线上是有一点区别的,如果没有强迫症,我们可以忽略这个微小的区别。
正确设置 colorspace 之后渲染的图片:
在渲染设置中,使用默认的 Color mapping 设置即可,Gamma 要设置成 2.2,这是告诉渲染器我们最终是要在 Gamma 2.2 的显示器下观看,光线的计算方式也会在正确的颜色空间下渲染。
这里不建议勾选 Linear workflow,这是老的线性流程使用方式,勾选它后,sRGB 图片不用添加自定义属性也会自动转成线性颜色空间,但是灯光的效果会有所不同,按线性空间的计算方式变得更暗了。
使用 Linear workflow 后,贴图颜色正确,但光线变暗了:
使用默认的 Color Mapping 渲染设置,给贴图添加 Texture input gamma 属性,在 V-Ray frame buffer 视窗里套用 sRGB LUT 观看显示结果,这就是 Maya Vray 的线性流程。
3ds Max 在 2014 之前的版本可以在偏好设置里设置 Input Gamma 的值,它会自动把所有贴图当成 Gamma 2.2 (sRGB)来看待,并自动把它转化成 Linear 渲染。2014 之后官方资料显示他们去掉了这个选项,声称 Max 可以自动识别贴图的颜色空间,这一点上经过我本人测试,还是无法识别,我只能在贴图节点上增加一个调色节点来转 Gamma 值,希望更懂 Max 的朋友告诉我解决方法。
3ds Max 2014 以后取消了红框里的选项:
同样的 colorspace 设置在 Clarisse 里也有,举一反三即可:
● Nuke 篇
所有的软件都大同小异,线性流程无非就是让所有素材在线性空间下工作,套用一个LUT(默认显示设备是 sRGB,电影接近 rec709)来观看而已。
Nuke 是电影后期制作中最常用的一款合成软件,它也一样,首先要设置读取进来的图片素材的颜色空间。如果读取的是 8bit sRGB 的 jpg 格式,colorspace 会默认为 sRGB,意思是告诉 Nuke 我使用的是一张 sRGB 的图,Nuke 会自动给它套上一个与 sRGB 相反的曲线转化成 linear 空间。
Read 节点读取 sRGB 图片:
如果读取的是 exr 文件,colorspace 可以选择 linear 或勾选 raw data,Nuke 会自动读取原始的线性图片,不会对图片进行任何颜色空间转化的预处理。
选择 linear 或勾选 raw data 读取线性图片 :
除了在 Read 节点下预处理素材的颜色空间以外,也可以添加 colorspace 节点来人为地转换颜色空间。
把 sRGB 转换成 linear:
正确设置好所有素材的颜色空间后,我们就已经在一个线性的环境下工作了,把 LUT 设置成 None,可以查看线性图片的原始样子。
不套用任何 LUT,线性图片原始的样子:
套用电影屏幕常用的 rec709,图片亮度介于 sRGB 和 linear 之间:
最后一步如果需要输出线性原始的图片,就选择 linear 或 raw data;如果是在电视和显示器上播放,就输出 sRGB;如果是电影项目要最终交货,需要多一个步骤,转成数字中间片转电影胶片常用的格式:cinear 颜色空间 dpx 格式(dpx 是一些数字摄影机拍摄的 raw 原始格式)。
dpx 可以设置客户需要的色彩位深:
后记 : 终于码完了《图像后期处理之色彩原理》全三篇,写完这几篇文章感觉伤了元气,每一个字每一张图都是原创的,把我从业以来对后期颜色原理的知识整理了一遍,方便大家交流和学习,如果喜欢请多多传播,再次感谢您的阅读,请尊重原创,未经许可,谢绝转载。
相关文章:
很棒的文章 感谢您的分享~