说到 Arnold 渲染,不得不提到阿诺德 Linear Workflow 的线性工作流,
说到这个问题,想要去完全理解它,确实很难,很蛋疼,原理性的东西毕竟非常生涩难懂,
辣么,这里我就基于自己的理解,来跟大家分享一下学习心得,如有纰漏和错误,欢迎大家指正。
线性工作流程就是软件在计算时,所有参与计算的数据都是基于线性的。我们使用的几乎所有图像处理软件都是基于线性的计算方式。
就是说 1+1=2 2*2=4 128+128=256。我们使用的 maya,max,nuke,shake,fusion,photoshop,mentalray, maxwell 都是这种计算方式。
这种流程的正确的前提是它在计算前所有的素材,条件,灯光都是线性数据。
如果我们要充分理解线性工作流程首先需要弄清几个概念。Linear,sRGB, gamma,windous 色彩管理,显示器部分原理,眼睛的部分感官特点,8bit, 16bit,32bit 等等。
首先来说说 Gamma,“广义 Gamma”的产生,原因有二:
人眼对自然亮度感知是非线性的。(韦伯定律)
我们用来记录/展示画面的媒介上,灰阶预算是有限的。(无论纸张还是屏幕)
为了在灰阶预算有限的前提下,协调自然亮度和主观灰阶感受这二者的映射关系,Gamma 就产生了。
另外:我们常用的 CRT 显示器,不论他是苹果的还是什么的出场的时候本身的物理 gamma 值都是 2.5。
主要原因是撞击显示器荧光粉的电子强对于电压的反应不是线形。
那么显示器的 gamma 是 2.5,而我们只给了 2.2 的矫正,剩余的 2.5/2.2 gamma1.136 是用来匹配人类视觉感知的。
人眼有这么一个特点:
同一块颜色在暗的背景下和亮的背景下看,给人亮度的感觉是不一样的。在暗的背景下感觉会更亮一些。
而我们正常的显示器一般都是在较暗的背景下看的。
在标准的测试环境下 gamma1.136 正好可以抵消这种视觉偏差。
所以我们在理想情况下看到的显示器是线性的。
那么我们正常情况下所说的“CRT 的 gamma 是 2.2”指的是什么呢?
这就涉及到了 windows 色彩管理:默认的 sRGB。
我们的显示器只能显示 8bit 图,大多数显卡的 framebuffer 也只能处理 8bite 数据,就是说超过 8bit 的图片显示器是不能完 全显示出来的。
就是说我们只能给显示器 8bit 的图,这就出现了一个问题。
又是人的眼睛。
正常人眼察觉明度差别的边界是 1%,就是说如果两块颜色明度差别超过 1%我们的眼睛感觉到边界。
图片里就会出现边界线条。
那么 8bit 的图在 100 色阶以下,明度对比都超过 1%,在较暗的场景里就会出现很多的颜色边界。
那么这是发生在 linear 8bit 空间下的。linear 就是说 0 是最暗,1 是最亮,0.5 是中间亮度。
为了解决暗部色阶不够明度差别过大我们只有将更多的空间分布给黑暗的区域才可以取消这种差别。
如果是线性需要大概 14bit 的数据,而亮部很多数据是无用的。这就引进了非线性空间。
sRGB 是微软和惠普联合开发的一个色彩管理标准,目的就是在多平台,多设备下能够很好的显示图片。
基于硬件的局限它被定义在 8bit,最大值为 1 不可以超过 1。
关于 Gamma 的问题,还有很多理论知识,大家可以自行百度。
说了这么多,大家需要要了解的一点是:Maya,mentalray, renderman,Arnold
等大多数渲染器渲出来的 8bit, 16bit 图片都是 linear 的。也就是说没用经过 gamma 矫正(转换到 sRGB 空间)。
而我们是在 windows 默认 sRGB 空间下观看。这就有点尴尬了。
下面再说说 HDR 高动态图像来区别一下线性工作与 sRGB 模式的区别:
我们使用默认的图片查看器保存渲染出来的图像时,会发现 JPG 格式只支持 8bit 位深(色彩深度),
颜色深度这一概念来说明其处理色彩的能力。也就是图像上每个像素可显示出的颜色数目就越多,色彩就越丰富,图像就越真实,文件也越大。
对于“8bits per channel”,它的位深度是 24bit,可以存储 16777216 种颜色,这是最常见的素材标准。
对于“16bits per channel”,它的位深度是 48bit,可以存储 281474976710656 种颜色。
对于“32bits per channel”,它的位深度是 96bit,可以存储……(你可以算一下)
比如常见的 PNG 格式可以支持 16bit,PSD/TIFF 格式能支持到 32bit。
经过 PS 处理的图片都是使用 sRGB 色彩空间,既然是 sRGB,那它的图像上每个点,都对应着一个 RGB 值。
我们可以看到,显示器能够显示 RGB 分量在(0,255)之间的像素,也就是我们最终呈现在显示器上的 backbuffer format 最多只是 R8G8B8,每个通道 8bit, 这样能够表现出的明暗对比度是非常有限的。
那么我们再来看看 HDR 图像是怎样的?关于 HDR 图像的具体知识大家可以自行百度。
我们可以看到 HDR 文件,能够存储更多的色彩信息,色彩取值范围更大(0.0000~ 1.0000)可以>1 , 同时也更加趋向“线性”色彩范围,
HDR 和转换后的 JPG 文件对比
总结一下:
关于 sRGB 和 Linear,要说的东西还很多,这里只是做了一些简单的说明和对比,
大家需要了解的是,渲染器使用的 Linear 线性色彩空间,而最终显示的是经过 sRGB 转换后的图片。
下一节,我们将 C4D 和 Arnold 对这两种模式转换相关连的一些操作。
谢谢楼主的无私分享