线性工作流
我们经常使用的显示器其实一直在欺骗我们的眼睛,在渲染一些比较暗的场景时,以前(现在也是)我们通常会添加一盏额外的灯光,或者调高采样数值来提亮场景。尽管场景的明暗平衡总是很奇怪,但是这么多年过去了,我们一直以这种错误的方式工作。尽管渲染结果不是很自然,但并没有人站出来说光的分布有问题。我们多年来一直重复着同样的错误,直到有一天有人提出了“线性工作流”这个概念。然后我们便意识到问题所在,那就是Gamma。
问题出现在哪里
如果渲染输出的颜色和灯光分布看起来不自然,则是显示器和Gamma的问题。理想情况下,显示器或者其他成像设备在生成图像时,会产生线性输出结果。
但在现实世界中,并不是这样的,输入和输出并不是线性的,而是呈现对数分布(红线),如下图所示。
在这种情况下,你看到的图片、视频都不是它真实的样子。黑色会变的更暗、白色变的更亮,为了看到正确的结果,设备会启用一个修正措施,即Gamma校正。
从三维软件渲染出图,到最终被人眼观察到大致是这么一个流程:首先,三维渲染器是一个物理模拟器,它生成的结果是线性浮点数据(物理数据),当我们保存为8位图片时,会用一条上供的曲线去处理数据(y=x0.454),所以8位图片保存的色彩信息处在一个非线性的色彩空间,即sRGB,Gamma=2.2的色彩空间,这时8位图片保存的数据已经不是物理数据了,而是“美术数据”。然后这张图片通过互联网传播,你下载到计算机,你的显示器会用一条下压的曲线处理(y=x2.2),最终被你观察到。(这里引用了韩世麟老师的理论,他对gamma校正与线性工作流的讲解特别生动详细,有兴趣的小伙伴可以去文末链接看他的视频)
三维软件工作原理
在电脑屏幕上看到的所有图片或材质贴图大多是8位jpg、png格式。他们都内嵌了gamma信息,当你在电脑上查看图片时,gamma校正会自动应用并显示在屏幕上。大多数显示器都有sRGB 2.2,我们现在使用的大多数3D软件,包括Cinema 4D,都是线性的,并且默认你从外部加载的资源也是线性的(浮点)。但问题是我们平时使用的纹理贴图大多是2.2,如果在三维软件中未进行伽玛校正,那么在最终渲染图像时会计算2遍gamma。所以由于gamma的问题,最终显示的结果偏差会特别大,灯光、阴影、白平衡看起来特别不自然。
正确的做法是在三维软件中,将所有资源转换为线性,稍后对此进行详细解释。简而言之,就是下图的线性工作流。
优点
最主要的优点就是光的分布更自然,使用低采样设置也可以获得更好的渲染结果。此外,渲染时间也更短,因为你不需要在场景中较暗的区域额外补光。在线性工作流中,反射和折射也会变得更自然。
在合成方面也有许多改进。例如,颜色范围会更广,这样你可以更好的控制图像。混合模式(如screen/overlay/add)可以获得更自然、更精确的结果。尤其是在使用景深和模糊特效,差别尤其大。景深的光斑更亮,效果更逼真,然后渐变梯度更加准确。最后,你还可以更容易的控制那些极亮和极暗的区域。
缺点
文件会变得很大,因为他们包含了太多数据。除了Beauty通道,你还要渲染许多其他通道,所以整个项目文件的大小会特别高。当然如果你硬盘足够大,这不是问题。真正的缺点是,为了带动巨大的文件,你的电脑配置一定要特别好。如果你电脑配置不行,那么在后期合成的时候会很卡。
如何选择
当然,没有必要说一定要选择线性工作流。sRGB或者Linear只是一种工具,最终都是为你服务的。如果你觉得sRGB更适合你,完全没有问题,一切以结果为准。一般来说,线性工作流会更加专业,不过这也并不是说使用sRGB就是业余的,这完全取决于你。
在Octane中应用线性工作流
你可以在Octane中使用线性工作流,然后渲染通道给后期合成。先看一下以下两张照片:
第一张是sRGB渲染结果,场景是c4d内容浏览器里的一个经典的室内场景预设。只有地板和地毯添加了材质,其他都是白模,光源是Octane日光。如果你把摄像机标签里的Response模式改为“Linear”,结果是相反的。因为我们的显示器无法显示线性,最终我们将面临经典的sRGB结果。这是所有3D渲染器的预期图像,这些渲染器无法在我们的显示器上使用线性工作流程(sRGB 2.2)
第二张图使用的是线性工作流,同样的场景,地板和地毯贴图的gamma数值被设置为“1”,Render Buffer设置为“线性”。在PS、AE或者其他合成软件打开,你会看见下面这张图。
现在这两张照片的区别完全是技术上的。第一图像(sRGB)在技术上不正确,第二图像(线性)在技术上正确,最终结果是好是坏完全取决于你的意图。如果你想用第一张sRGB的图像,为了达到第二张图的效果,你需要额外的创建灯光,或者调整参数设置。但是这样会增加额外的工作量和渲染时间。当然,你也可以直接选择第二图像(线性),这样就没那么多事儿了。最终如何选择看你自己。
软件设置
1.打开材质球,找到地板和地毯的纹理贴图,贴图的Gamma数值默认是2.2,需要都改成1。如果你使用的是高质量的EXR格式贴图,则不需要变动,因为EXR或者HDR贴图格式的Gamma默认就是1。
2.下面可能有点绕,注意理解。现在转到Octane摄像机标签,把Response类型改为“sRGB”,Gamma改为1。你现在看到的图片其实就是线性输出结果,注意不要被Response的sRGB类型所干扰。这里的sRGB其实是de-gamma,目的是为了抵消屏幕的下压曲线处理(y=x2.2)。如果你把Response类型改为Linear,你会发现图片会变暗,因为c4d输出的是线性结果,但是被屏幕的下压曲线处理,结果就变暗了。
3.Ctrl+B打开渲染设置,把Octane设置Main面板下的Render Buffer Type改为“Float (Linear)”,然后设置输出图片格式改为EXR 32位。
4.如果你要渲染多通道,按照下面设置。
5.渲染输出后,用AE打开Beauty和其他多通道。点击项目窗口中的“8 bpc”图标,会打开项目设置窗口,然后按下面设置。
6.检查文件信息,你会发现它们都是线性的。
7.现在你可使用线性工作流了。下图中,你可以看到原始线性工作流渲染的结果。
让预览结果和渲染结果保持相同
首先,Octane的实时预览窗口(Live Viewer)一直都是有色调映射的(Tonemapped),你可以把它简单理解为“滤镜”,除非你把Response类型改为sRGB或者Linear,否则预览结果都会有些偏色。其实Response里的许多“滤镜”都非常好用,如果你觉得某个“滤镜”的效果非常好,是没有必要一定用线性工作流的,最终出图结果好看就行。
假设你在摄像机标签选了某个Response“滤镜”,如下图,然后你想保留当前的效果,并且同时使用线性工作流。
很遗憾,上述情况并不适合用线性工作流,因为你选了Response“滤镜”,而“滤镜”只会对Beauty通道起作用,并不会对其他多通道起作用。如果要用线性工作流,则不能用Response“滤镜”,而且也不能调整曝光和gamma参数。因为这些操作实际上属于后期合成,一旦你准备用线性工作流,你应该在后期软件里面进行这些操作。因此,如果你要进行线性工作流,只需要把Response类型改为“sRGB”,然后gamma数值设为1。
最后,没必要强迫自己使用线性工作流,Tonemap在最终出图方面非常出色,因为Octane有许多好看的Response预设,你可以利用摄像机标签做简单的合成工作,然后渲染直出不用后期。
参考:http://www.aoktar.com/octane/OCTANE%20HELP%20MANUAL.html?MEDIUMS.html
https://www.bilibili.com/video/BV15t411Y7cf