高质量3dmaxvray渲染设置(3DMAX-VRay超现实渲染设置教程伽玛校正线性工作流程)(1)

上图左是用不正确的Gamma算出来的效果图,右图是在正确的Gamma环境调出的结果.VRay在预设的状况很容易算出艳丽饱和的色调这样的色调跟mental ray的细致的清色调有很大的差别.其实色调感的关键是gamma,反而不是渲染器本身.

伽玛(Gamma)是旧时代的产物由于当时CRT屏幕输入一单位电压并不会产生等量的亮度(非线性)所以为了正确显示画面就刻意产生一个曲线关系(输入与输入)让最终输出的图像为线性图像.即使是现代能够制造出线性反应的屏幕(例如液晶)这种现象仍然深深的影响图像处理不管是后至合成调色或是3D算图渲染.

过去因为数位相机拍摄的图像因为一定会放在屏幕上观看而数位相机发展的年代当时仍然是CRT所以数位相机会自动在照片中内嵌Gamma的信息让照片能正常地显示在CRT屏幕.然而到现代这反而成为一个大问题因为所有渲染引擎VRay,mental ray,Finalrender,Maxwell,..都是以线性环境来计算物体与光的反应所以如果输入一个带有Gamma信息的贴图会造成输出图像的错误(误差)甚至产生某种色彩调性(比方说VRay似乎比mental ray更艳丽)的误解.

高质量3dmaxvray渲染设置(3DMAX-VRay超现实渲染设置教程伽玛校正线性工作流程)(2)

mental ray算出来的效果图

这里翻译了几篇不同来源的文章,可以把趁机会把观念搞懂因为线性工作流程(linear workflow)是未来的趋势.当浮点运算(16或32bit)的后制剪辑软件变成主流时每个专业领域的人每天都会与LDR,HDR,Gamma这些东西搏斗.

高质量3dmaxvray渲染设置(3DMAX-VRay超现实渲染设置教程伽玛校正线性工作流程)(3)

这是Autodesk 3ds max 2010 Help里面的说明图这个流程几乎把所有观念都讲到了,关键在于在你给算图器(renderer)图档之前一定要把图档改为线性数据这时图档就能够在算图器这个黑盒子中以正确的数学式计算结果最后在输出的时候即使结果是正确的你没有调整到跟屏幕相对的gamma值那也会看起来是错的图像!

伽玛校正(Gamma correction)是一个经常被误解的观念。简单来说,伽玛描述了相机或屏幕的非线性反应的现象。当一个相机(模拟或数字)接收到两倍的光源时,相机并不会把这个数据存成两倍的RGB数值。有很多原因为什么相机的记录系统会有这种记录方式----这种现象称为伽玛。其中一个原因是显示器感光本身的问题,例如底片具有非线性的感光曲线,另外CRT屏幕也有同样问题:像素的亮度跟输入的电压强度并不是呈现线性关系。

另外一个原因,因为人眼对于黑暗中的细节比明亮中的细节还要更敏感(人眼的感光曲线其实是对数曲线,称为Weber-Fechner定律)所以人眼视觉是以非线性的方式记录信号的。而现代液晶显示器(TFT)本身虽然没有先天上的伽玛问题,但是为了要迎合传统的工作流程TFT屏幕会刻意模拟出伽玛的效果。

建议读者也可以读读这篇关于线性色彩空间你就会知道位何在处理HDRI数据时伽玛校正的重要性。如果你仍然不明白正确处理伽玛是很重要的,请继续往下读。

伽玛的基本观念(Gamma 101)

所有的屏幕都有非线性的输出输入反应。这是故意的.

大多数的2D软件都会以线性的颜色模型来处理,所以它假定,255数值的亮度是128数值的两倍。但由于显示器对于信号的输出输入是非线性的,所以产生的亮度会是不正确的。事实上,大多数屏幕(gamma=2.2),如果你想要显示出255数值亮度的50%亮度的话那你就必须要输入(0.5 ^(1/2.2))* 255 = 186的数值。如果你不考虑gamma的问题输入128数值就只会产生大约(128/255)^ 2.2 = 22%的亮度。

数位相机基本上具有线性的输出入效果,但因为通常我们会在电脑屏幕上面看拍出来的照片,所以数位相机会故意在照片里面嵌入gamma。(所以。JPG格式是带有gamma的,但是RAW的格式是即线性资料,当你把RAW档转成JPG格式时就会产生非线性的照片了)

因此,如果你用2D软件去开你照片拍出的jpg图档时,您必须要把gamma补偿回来(去gamma)。

如果你的图片是在2D软件产生的(基本上这张图是线性的),当你把这张照片显示在带伽玛的屏幕你也要做gamma补偿。

更多关于伽玛

Gamma不是bug,它是一个功能,因为人的眼睛对光线的亮度具有非线性的感光反应。如果你每个颜色只有8 bit来记录颜色数据,很重要地利用这8 bit正确地重现人眼的感光效果很重要它必须要是非线性的编码方式。即使是新一点的屏幕仍然有伽玛:同常显卡会用8位来处理每种颜色避免色带问题,这8位必须每个强度看起来间距是等距的。屏幕的厂商有能力制造线性反应曲线的屏幕,但如果你用8位来显示图片,效果会很糟。

现今大多数电脑屏幕都以sRGB的标准来显示,也就是伽马2.2。

大多数数位相机也以sRGB纪录相片。如果是扫描进来的图或是合成图象就不会带有伽马2.2。

几乎所有的浮点纪录HDR数据是线性的,即与伽玛为1.0。

对于图片而言,“伽马”代表了强度是如何被记录的。换句话说:图档的gamma是为了要让图片在屏幕上能正确地显示出来。

有些图片会带有gamma的标签,但这是不可靠的,因为很多绘图软件会忽略这个标签。因此,要正确知道图档的gamma数值并不容易。

如果您的屏幕有2.2的伽玛而显示的图片看起来有很正常,那该图片可能本身就带有伽玛2.2。

3D算图引擎会假定光线是以线性的模式来记录。所以,你丢给算图引擎任何不是线性纪录的图档(带有gamma),严格说起来这个图档呈现出的效果是错误的(尽管它可能仍然好看)。

请注意,NVIDIA显卡驱动程序把gamma复杂性隐藏起来,当你在NVIDIA控制面板中看到:“1.0”,其实就代表是伽玛2.2。因此,“NVIDIA公司的γ= 1.0”,其实是标准的sRGB伽玛2.2

什么时候忽略gamma问题时会产生恐怖的错误

基本上当你要去编辑像素混合时就会有差。例如:

反锯齿,特别是在做wireframe渲染或是渲染有高对比的图像

缩小图片。所以,高对比度的图像,会产生更明显的错误

半透明物体

Gamma in 3ds Max

在Preferences菜单中可以控制伽玛。基本上有三个伽玛值可以调:

显示描述了您显示器的gamma通常,这个会设定成2.2。

当读取贴图时自动加载Gamma。这个功能能把图片线性化(译注:去gamma)。通常,这个有设定为2.2。注意:如果您打开一张图档,这张图档嵌入伽玛信息,3ds Max会套用固定的gamma数值,而不是用你图档的gamma数值!当然你可以改变这个设定当你开启图档的时候。

输出伽马会处理当你储存图档时。这数值应该是1.0,如果你要储存线性浮点图档格式。如果你只是希望这张图档再屏幕显示,那就用2.2吧。

高质量3dmaxvray渲染设置(3DMAX-VRay超现实渲染设置教程伽玛校正线性工作流程)(4)

当您打开一张bitmap图档而这张图档内嵌gamma,当你开启图档时你可以选择是要套用通用gamma数值还是要读取图档的gamma。有一点很重要的是bump或displacement贴图你gamma一定要设定为1.0因为这些是线性数据!

请注意,一些旧的3ds Max算法已调整为“好看”不伽玛校正,并因此将看起来很有趣,如果你正确的伽玛。

render farm会遇到的伽玛问题

当你的render slaves(算图奴工)不认识你送出的max场景档里面的gamma数据时算图就会出现问题所以你可以在每台算图奴工中设定respect the gamma state这样当读到max场景档时就会自动加载gamma。

在3ds Max 2009当中使用分布式算图Distributed Bucket Rendering(DBR)会有某个bug,他会强制加载固定的nput Gamma.这是因为分布式算图会自动启动mr Map Manager它会忽略“per bitmap”gamma的设定,所以当你在场景中有使用HDR档案HDR会受到gamma=2.2影响所以最后会产生太暗的图像目前解决的办法是将global input gamma设为1.0然后使用mr's“Utility Gamma/Gain”shader把贴图去gamma.

伽玛常被误解的观念

错误观念:我已经校正屏幕了-所以我不需要管gamma

错。当你校正完屏幕,通常代表你校准到标准的sRGB曲线,通常会是伽玛2.2。当你的屏幕做过校正,这表示你的所有图档都必须要做伽玛2.2的补偿

错误观念:我的数位相机会记录“线性”的照片

有可能你如果是用RAW档来存盘的话它是线性格式没错。但当你把RAW档转成JPG格式时就会自动套用gamma,通常这个数值是2.2

本片文章对你有帮助的话留下一个赞和你的评论吧!谢谢你的支持

,