英文原文链接
中文翻译原文链接
如果英语好的话,建议直接看原文,因为中文作者的翻译也不是太理想(等我有时间再仔细校对一下),以下为文章正文
原翻译的自述
我决定正视一下 ACES 流程了,这个是一个比较好的入门理解,所以翻译一下分享出来。对于一些想补充的话,我会在行文之间用小字标识。
译文正文
我拖延了很久没有了解 ACES 了,因为几乎所有网上的文章都过于专业和冗长,再或者就是读起来像是销售广告,对于如何使用一点帮助都没有。如果想正确使用 ACES ,需要大量的练习和研究,所以我一直都在常规的 “线性工作流程(linear workflow)”,尽量不去考虑 ACES 。
但是现在我自己有了一个小团队,也许是时候真正的去了解 ACES 了,所以这篇文章就是记录下我所了解的 “为什么 & 怎样在你的工作中使用 ACES”。或许我会(绝对会)忽略一些细节,但是这些冗长无聊的细节本身就是给那些聪明人看的。当然你可以随时在底下评论回复我。(这是作者说的,不要评论我,我对这篇文章不负责)
重要提示:我是一个(技术向) 3D 艺术家,不是颜色科学家。在这篇文章中“笨蛋”是指的我。我尽量将复杂的理论转换为普通人能理解的词。我喜欢在一些地方走捷径或者做一些妥协,这可能会让一些真正的颜色科学家吐血,但是这就是现实…有时候你不得不打破一些规则来满足客户的想法。
什么是他喵的 ACES ?
ACES 是一套颜色系统,它可以定义颜色管理的标准,不管你的颜色是从哪里来的(拍摄或者 CG 渲染等等),并且提供一个面向未来的工作空间,以便让所有的艺术家能在生产流程的每一个阶段中使用。不管你的图片怎么来的,你都能顺滑的将它们转换为 ACES 颜色标准,这样你团队的所有人都能保证在一个 统一的环境 下工作了。
对于 CG 艺术家来说,最大的受益就是 ACEScg 色域,它的色域要远远超过传统 sRGB 所包含的颜色。即便你在线性颜色空间中使用浮点式渲染(我的理解是指渲染 16bit 或者 32bit 的图片),也就是所谓的线性工作流(linear workflow),你的原色(原色定义了什么是红绿蓝)仍然是 sRGB,这会限制你的颜色精准表达。
我们通常理解的 “linear” 和 “sRGB” 有一点误区,线性颜色空间可以使用 sRGB 原色,也是我们这些通常不使用 ACES 流程的人在处理 “linear” 贴图或者渲染所使用的颜色管理方式。而我们通常称作 “sRGB” 也是使用 sRGB 原色,只不过应用了 伽马 2.2 ,这样就可以在一般显示器上正确显示了。
换句话说,ACEScg 使用了自己的一套原色叫做 “AP1” ,它可以容纳更多的颜色,就像上面那张图里说明的那样。记住,sRGB 或者 Rec.709 标准是我们仍然使用 CRT 显示(大脑袋)和穿着酸洗牛仔裤的时代发明的,是时候走向新时代了。
这是一张快速演示来展示传统 sRGB “线性”工作流和 ACES 工作流的区别。你能马上注意到右边的颜色更加真实自然,尤其是在一些过亮和过饱和的区域。
ACEScg 是 ACES 颜色空间的一种,专用于 CG 艺术家,因为它是线性编码(与之对应的是对数编码,也是普通人认为的曝光),(译者注:也就是一张图被线性显示还是应用 伽马 2.2 显示),所以你的渲染引擎和合成程序能够很好的操控它。还有其他的颜色空间定义,比如 ACES 2065-1 ,是为了归档和数据转换使用,但是作为 CG 艺术家,你只需要理解 ACEScg 就足够了。
观看器 LUT
我们刚刚知道了 ACEScg 是一个颜色空间。然而,你的垃圾显示器并不能显示完整的颜色空间。即便你有一个很好的显示器,但它仍然只能精确显示 DCI-P3 色域,仍然不足以显示完整的 ACEScg 。显示不到的色域空间也需要你定义一下,也就是你的 “观看浏览” 空间。这有点类似于你查看线性渲染,但是看上去非常暗,你必须选择 “sRGB” 或者 “gamma2.2” 查看方式才能正确显示。不管图片本身是什么颜色空间,都需要转为你的显示器喜欢的空间。
“观看” 空间取决于你的显示器情况,但是如果你的显示器没那么离谱,大概率是 sRGB 或者 Rec.709(这两者非常非常相似)。你需要确保你在查看或者合成你的渲染图片时,使用了正确的观看器 LUT ,让图片从 ACEScg 转为 sRGB 或者 Rec.709。
这种 “输出(Output)” 颜色空间在 ACES 流程中被称为 “RRT” ,也就是 “Reference Rendering Trasnform” 。用一个过于专业的话说,这是一个在你的 ACEScg 场景和你的 sRGB 或者 Rec 709 观看器空间中发生的额外转换。RRT 非常像经典的 S 曲线,可以让你的渲染或者素材得到更暗的暗部和更亮的亮部。看上去很好,但当你试图从匹配的输入中获得精确的输出颜色时,它可能会引入复杂性,尤其是广告中要将外部导入的商标匹配到某个物体上时,这个我们后面再说。
转换输入贴图
你必须确保任何应用的贴图都已经转换为 ACEScg 色彩空间了。这部分或许有些棘手,因为贴图的来源多种多样。你需要应用 “Input Device Transform” 或者 “IDT” 到这些贴图上(译者注:类似将 ACEScg 空间转为正常查看的 sRGB 空间的 “RRT” 过程,我们还需要将不是 ACEScg 空间转为 ACEScg 空间的 “IDT” 过程)。大多数从网上下载的贴图都是 sRGB 色彩空间,也就是你在 OCIO 中看到的 “Utility-sRGB-Texture” 。如果你已经有一个很好的线性 EXR 格式贴图或者渲染图片,你的 IDT 需要改为 “Utility-Linear-sRGB” 。这里的命名会导致一些困扰,因为关于颜色的所有东西都能让人困扰。“Linear-sRGB” 这里指的是你处理一张线性编码的渲染图片,即不包含 tonemapping 曲线,仍然使用的是 sRGB 原色。典型的 jpeg 图片也主要使用的 sRGB 原色,但是它有输入 gamma 2.2 曲线,所以不算是线性的。
当你犹豫不决的时候,就记住
- 如果图片不是浮点值,使用 Utility-sRGB-Texture,
- 如果是浮点值,使用 Utility-Linear-sRGB。
(这里其实不太准,不是浮点值我理解的是说 8bit 图片,但是我经常渲染 16bit 的图,但是其实还是 sRGB,不是线性的。我觉得最好的判别方式是看这张图暗不暗,但是 32bit 的 HDR 贴图一定是使用 Utility-Linear-sRGB 的)
牢记这个注意事项
你只需要转换描绘颜色的贴图,而不是描述信息的贴图。
diffuse或者albedo贴图就是描述颜色,需要被转换。normal、displacement或者roughness描述数据,不应该被转换。
恼火的 ACES 陷阱
当然了,除了需要阅读几篇这种文章,关于 ACES 还有一些恼人的地方,尤其是对于我们这种渲染并不一定是真实图片的人来说。最大的问题就是在 ACES 空间中渲染出的结果匹配参考图片。比如 matte painting 或者需要被跟踪的手机屏幕,或者任何自发光的物体,但是实际上看起来并不像光源。
如果你使用通常的 sRGB->ACEScg 转换,你会注意到你的自发光材质在渲染中会总显得不够亮。
这种情况下,取决于你处在什么阶段,有那么几种方式。
如果您需要在 3D 中使用自发光材质,以便在渲染中显示与在 ACES 外部查看纹理时完全相同的效果,则需要将纹理转换为 ACEScg ,但是是从 OUTPUT 空间而不是常用的 INPUT 空间。也就是说如果你的观看器 LUT 用的 “Output-sRGB” 空间,你想给材质的 INPUT 空间也使用这个。这样就能从感官上确保你的观看器 LUT 的反面,包括之前提及的 RRT 的 s 曲线 tonemapping (色调映射)会应用到材质上,所以会看上去和没转换为 ACES 之前一样。这意味着你的渲染结果可能会很奇怪。看下这张截图,注意 OCIO 转换设置和左边窗口显示的颜色信息。
这张截图中,你能看到“白色”值已经超过了 16,其他颜色或许也会被这个操作影响,尤其是处理非常亮或者过饱和的颜色。在调试全局照明或怪异的反射或其他渲染故障问题时,或在渲染后对这些渲染进行调色时,要记住这个数字!
在合成时,你最好的解决办法就是临时退出 ACEScg 空间,最好是在你快要结束合成工作时。使用 OCIO 转换工具来将 ACEScg 转为 sRGB ,将观看器 LUT 调为标准 sRGB,然后对你的想要操作的 sRGB 元素进行合成,比如屏幕、字幕或者其他什么东西。这个方式可以避免上面提到的奇怪的颜色数值,但是当你输出 HDR 分发格式时还是会出问题。
(译者注:因为我也没有完整的使用 ACES 流程的经验,实际上这一小节我完全没懂)
最后
即便是当作快速实用的指导,也需要进行一定的思考才能理解。ACES 系统是一个很好的想法,但是解释起来仍然很困难和反直觉。这需要你的团队所有人都对什么是颜色空间转换以及什么时候转换有一定的理解。我希望这篇文章至少能让你理解一些基础,当你想阅读更深层次文章时候,我推荐下面这些文章:
结尾
到这里翻译就结束了,作者还讲述了各个软件怎么搭建 ACES 环境,偏向影视方向的,这里先不提,以后有机会单独说,这样还能多发几篇文章,我太聪明了!
下面还有一些读者的评论,这里也稍微翻译一下有用的部分:
Q:当我们渲染 CG 的时候,使用 ACEScg 和渲染线性(sRGB原色)然后转为 ACEScg 有什么区别吗?
A:将全部东西都转为 ACEScg 才能得到 AP1 原色。如果只是渲染 linear sRGB 然后后期转为 ACEScg ,这并不会在渲染计算光线时带来任何更高的色域。你仍然会得到一个不真实的、过饱和或者其他看上去很 CG 的渲染结果。
Q:在 houdini 使用 OCIO Transform VOP`s 时候,如果不勾选 “Linearize Non-Linear Images” 会得到一个过饱和的结果,你推荐应该怎么设置参数呢?
A:我没有一点一点的对比过,但是我倾向于使用 OCIO 精准的调节你希望怎么转换颜色,而不是靠 houdini 自动猜测的结果。
Q:我这样操作是正确的吗? sRGB 颜色空间的 16bit diffuse exr 文件,(也是 substance painter 导出的图片),应该转换为 Utility-texture-sRGB->ACEScg 。对于 HDRIs ,linear 但是还是 sRGB 原色,应该设置为Utility-linear-sRGB->ACEScg。对于 roughness和displacement 等等,应该设置为 Utility-raw->ACEScg 。如果是选择了 Utility-raw ,贴图不会有一些改变的?
A:是的,在我看来没错。并且我认为你的直觉是对的,使用 Utility-raw->ACEScg 或者转为其他什么空间,都不会对贴图进行任何操作,就是直接 “通过” 的意思。
(完)