论Vray for SketchUp环境下的线性工作流

同学,你之前的渲染是错误的

——论Vray for SketchUp环境下的线性工作流

文/韩世麟

不管你是不是被这个耸人听闻的标题吸引,在好奇心的驱使下打开了这篇帖子,我希望你能够耐心的把这些或许有(fei)点(chang)枯(wu)燥(liao)的东西看完,消化,并且在读懂之后意识到,这篇文章确实不是标题党。事先要澄清的是,渲染确实有错误,但错不在你,也不在我,而在于软件设计过程中有些关键性的问题被忽视了,造成了系统性的计算错误。

引言

为了引入这个话题,首先谈谈这些大家可能遇到过的问题:如果你接触过Vray for SketchUp这个软件,并且尝试使用它渲染室内(如博物馆设计中只开了很小窗口的展厅),半室内(灰空间),或是夜景的话,你很可能遇到如下的困惑:渲室内图时总会觉得过暗,或者渲夜景人工加的灯光很容易就过曝。你是不是有同感呢?如果是,这篇文章将会解答你的疑惑。

实际上,以上两个情形本质上是同一个问题:渲染时人工加入的光源(点光源,面光源,IES,或者相对面积较小的开窗洞口(注1)等等),总是给人非常不给力的感觉,即使倍增值调的很高,屋里也亮不起来,倍增值增加到极高,好不容易把周边环境照亮了,光源附近却一定会明显过曝,完全有违真实生活中灯光或者自然光的表现。(图1)

图1:情景一,按正常思路打光,室内场景总会很暗。

上图使用了Vray自带的阳光系统,即使阳光照进室内,屋内仍然很暗,明显曝光不足。

图2:情景二,灯光很不真实,屋里还没亮起来,灯光周边已经过曝了。
建立简单的暗室场景,墙体是50%的灰色,使用最基本的Vray矩形灯光,可以看到整个房间的曝光度还略显昏暗,显然需要增加光源亮度,但是灯光周围已经过曝得不成样子,让人不敢继续向上增加灯光的倍增值。而在现实生活中,这样大面积的一盏灯,已经足够把整个房间照的亮亮堂堂了(注2)。

为什么会这样?如何解决?

首先就事论事地说一下浮于表面问题以及解决方法:

对于第一幅室内图,室内明显曝光不足,此时我们直觉反应(注3)的解决方法是:
1. 增大光圈,减慢快门速度,使室内整体曝光达到可接受的正常亮度。(使用该方法,整体亮度虽然上去了,但是窗口高光区会过曝。)
2. 增大室外环境光阳光系统的倍增值。(使用该方法,即使窗口过曝得一塌糊涂,室内总亮度仍然提升不大。)
3. 前期处理不管用,那可以试试后期方法,将过暗的图纸拖入Photoshop,观察一下它的数据分布(图3):

图3:从直方图可以清楚的看到,绝大部分的数据堆在左边,也就是数据集中于暗部,这是典型曝光不足的图片。那么此时无论是使用色阶工具还是曲线工具提亮,在整体亮度提高之余,你会发现,高光区过曝了(图4):

图4:使用曲线工具提亮,效果好了很多,但高光区过曝。

以上的三个直觉化的处理方法,无论用哪个,高光区都会过曝。

但是对Photoshop曲线工具理解比较深的同学会注意到,图4的曲线顶部相当长的一段数据是水平的平台,这就意味着我把原图中接近70%的高光信息全部映射为了白色。OK,难怪会过曝,都怪曲线拉得太粗暴。在这个案例中我只需要增加若干控制点,把曲线比较柔和的由黑提亮到白,就可以比较好的挽救这张图了(图5):

图5:在曲线上定了三个控制点(技术好的话两个控制点就够),让全图像素比较柔和的映射为较亮的输出结果。结果很不错,既没有过曝,光线看起来也自然多了。

好,本篇教程圆满结束了,谢谢大家。

等一下,这一切背后的机制都是为什么?为什么形如图5这样的上拱曲线可以让图面的光线过渡看起来正常?难道我每次渲染室内都要先渲一张极暗的结果然后后期提亮(注4)?有没有更好的方法,可以让我在渲染的时候,直接得到正常光照过渡的结果?

关于背后机制的解答

先来回答第一个问题:为什么形如图5这样的上拱曲线可以让图面的光线过渡看起来正常?

很显然,这个蹩脚的问题是我为了写作方便而故意设问的。对于初次接触这个问题的读者来说,通常只能感性的描述为:啊,图变亮了。但是实际上发生的事情是,在经过图5这样的上拱曲线的映射之后,光线的衰减速度,趋于正常了,或者更精确地说,是在屏幕设备上显示的光线衰减速度,看起来接近我们对平时的生活印象了。

晕,这是什么意思?

为了解释这些问题,首先要谈的是人眼对生活中光线的感知习惯:相对的来说,人眼对暗部的光线变化敏感,对亮部的光线变化不敏感。

这很好理解,如果不给人物理测量工具,只让人凭感觉判断事物的属性的话,人往往要靠事物之间的相互比较来感知。而等量的变化,永远是在小尺度上要容易察觉,大尺度上不容易察觉。举最简单的例子:同样是十厘米的长度差距,人眼去目测的话,两个人的身高差十厘米很容易看出来,两棵树高度差十厘米就看不出来,两座山高度差十厘米就不可能看出来。类比到光强度来说,两个灯泡,同样是差20W的功率,30W和50W的亮度天差地别,180W和200W差距就没那么明显,1000W和1020W很可能看起来一样。

在这里,我就要引入线性和非线性的概念了。

线性,即是以我们熟知的物理测量单位对数值进行描述,比如长度,一把直尺上刻度的增加1cm,2cm,3cm就是线性增长。类比到亮度,如果不太科学的转化成灯泡瓦数来说的话,10W,20W,30W这样就是线性增长。这种十进制的描述体系,称作base-10。

人眼对光线亮度的感知很显然不是线性的,人眼不是测量仪器,我们看不出光源线性的瓦数,相反我们善于比较,我们知道同样规格的灯泡。两个灯泡比一个灯泡亮一倍,四个灯泡比两个灯泡又亮一倍,八个灯泡……

这种非线性的描述,便是我们对光线的感受习惯,所以在摄影和数字图像技术里,我们不是习惯用线性物理量“流明”“坎德拉”“勒克斯”来对亮度进行描述,而是用“挡(Stop)”这种不量化却非常直观的方法来描述。每差一挡,光线能量差一倍。这种非线性的描述方式,对于人的视觉感受来说是非常非常恰当的。这种倍数关系的描述体系,称作base-2。

如果硬是要给人眼对光线的感受绘一个图解的话,可以不精确的描述为如下这样(图6):

图6横轴输入的信息是按线性速度增长的光线亮度,纵轴输出的信息是人眼对这些亮度的心理评价。在坐标轴原点附近,光线很暗的时候,微小的亮度提升会给人强烈的变亮感受,因此亮度增长斜率很高,而接近高光区以后,能量的增加给人的刺激逐渐变得不明显,人们觉得亮度的提升速度变缓了下来。

以上的论述和我们画图有什么关系?心理感受这么不靠谱的事情会影响什么呢?其实影响很大,你仔细想想就会发现,屏幕上的画面,只是对自然界的一个概括和映射,数字图像从使用数码相机/摄像机对大自然的亮度进行采集,一直到传输到电子屏幕上还原呈现,可不是简单的把自然环境的亮度值搬运到电脑屏幕上再以相同的亮度值呈现给你看。(类比一下:录音机可以做到等分贝还原,但是屏幕做不到等能量还原。)试想你生活中的电灯,太阳这种真实光源有多亮?而你的电脑屏幕最亮能有多亮?既然不能真实再现自然界的能量强度,那么如何让人看起来觉得真实呢?这中间的数学把戏可不简单啊!处处要以人眼的感受为准。人眼这种对暗部敏感的固有特性影响了很多事情,其中两件最为主要的事情就是:

一,在图像采样编码端,决定了图像不能以线性密度进行采样,而要巧妙的分配采样比重更多的给暗部信息。

二,在屏幕设备输出端,决定了屏幕不能线性的呈现亮度,而要巧妙的分配亮度的分布,多花一些色阶范围来刻画暗部信息,使之看起来符合人的心理感受。

而为了达到这两个效果,就要用到Gamma校正。

Gamma校正

我将详解上一节这两个截然分开但又息息相关的步骤,让我们看看机智的工程师们是怎么设计这些解决方案的:

为了控制光线强度从线性到非线性的映射,工程师们引入了gamma这个参数,这是一个极为方便的灰阶亮度控制工具。

使用gamma校正的公式表示如下:

这是一个幂函数,自变量是输入值,输出值是它求得的结果。右上角这个“几次方”就是gamma。

而幂函数的的特性是(喜闻乐见的高中数学回顾时间),在自变量取0到1之间时,不管gamma是多少,它们的函数图象都通过(0,0)和(1,1)。这样一来,如果定义最暗点亦即纯黑色为(0,0),最亮点亦即纯白色为(1,1)的话。我们可以得到非常好用的提亮或者压暗的映射关系(图7):

图7便是(0,1)区间内,gamma分别为1,2,4,8和1/2,1/4,1/8的图像。

如果横轴是输入的亮度值,纵轴读数是输出的亮度值的话,则有如下简单的规律:

当gamma=1时,输入亮度等于输出亮度,此时没有对数据进行任何修正,是一个线性映射。
当gamma>1时(比如gamma=2那条绿线),曲线下凹,低于gamma=1的对角线,所有的输出数据都小于输入数据,即处处比原亮度要暗。那么和Photoshop中的曲线工具非常相似,这是一条非线性映射的“压暗曲线”。
相似的,当gamma<1时(比如gamma=0.25那条绿线),曲线上凸,所有的输出数据都大于输入数据,即处处比原亮度要亮。那么这个gamma变换,是非线性映射的“提亮”操作。 要加深理解的是这里所谓的“提亮”,“压暗”仅仅是表面上看起来的结果。Gamma校正的目的只是为了修正数值之间的映射关系,在不改变起点和终点的情况下,重新分配中段数据的格局,并无所谓提亮还是压暗。你要关注的是,工程师们如何通过非线性修正,让更多存储空间和屏幕色阶用来表现暗部信息。 一, 采样/编码端(Encoding) 当我们把自然界的光线强度信号,采集并编码到一个低动态范围数字图片的时候(比如8位格式的jpeg),有很多因素限制了数字设备对真实环境的忠实记录。首先,数码相机,摄像机的感光设备所能看到的动态范围,是远不如人眼的,动态范围即是指可感受到的最亮点与最暗点之间的亮度差异(描述动态范围的大小既可以用线性的十进制物理单位描述,即“base-10”,也可以用表示二元倍数关系的“挡”来描述,即“base-2”)。 本来电子感光元件对能量的感应基本是线性的,这就是说一份的能量,可以激发一份等比例大小的电信号,但是如果就这么忠实的把原始信息记录下来,势必会造成暗部信息过少,亮部信息冗余,既浪费了存储空间,质量又不好。原因还是在于人对光线的感知本来就是非线性的,暗部的细节变化比亮部变化更容易被察觉,我们需要记录更多的暗部信息。 虽然人眼在极暗条件下的感光能力不如电子设备(人眼近似ISO约800),但是在同一个视野内,人眼可以捕捉的动态范围,是超过电子成像面板的。那么这些电子成像设备,为了模拟和还原人眼所能看到的自然界丰富的亮度层次,就必须在采集信号的时候,分配较多的存储空间给暗部。如果仅凭线性感光元件用线性映射记录自然的亮度,则只能记录非常有限的动态范围,太亮的细节会过曝记录不到,暗部丰富的细节也会缺失。 因此,在采样编码的时候,会使用一个小于1的gamma来转化亮度信息(在大多数设备上约是0.45),才能比较合理的分配数据储存空间,保真场景的亮度动态范围。如下图(图8):
图8的横轴,是线性输入的光线数据,在此即是自然界的光线。而纵轴,是经过gamma校正后,输出到存储设备中的数据,可以看到,通过这样的gamma校正,按照线性物理单位来衡量的前21.8%的暗部细节,占用了50%的数据存储空间。而电子设备花费另外50%的存储空间,把剩下78.2%的数据作为亮部信息,全部囊括其中。这样一来,就达到了合理分配采样比重,保真信息的目的。

生动一点描述的话,从横轴的零点向右推进,暗部的细节层次被gamma校正放大并记录了下来,这样未来我们才有机会还原更多暗部丰富的色阶变化。而过了50%的存储空间,到达亮部区域后,曲线的增幅减缓下来,虽然横轴的亮度在持续线性增加,但是纵轴的数据积累却可以慢慢的达到顶峰,这样横轴的亮度极限就有机会向更亮的极限去推进,从而达到亮部信息最大限度的记录。

而这一切,都是因为人眼对光线的感受是非线性的,暗部变化很容易被察觉,必须分配更多的色阶层次来记录,而亮部的明暗变化细节没有必要刻画的那么仔细,对于亮部来说,更大更真实的动态范围才是人眼更关心的。

相似的道理,8位的jpeg图片格式,它们的灰阶预算就更紧张了,相较于大部分电子采集设备的的灰阶可以达到10位1024个,8位图片仅有256个明度灰阶,那么在压缩8位图片信息的时候,就更需要采用这样的gamma校正,来最大限度的保留场景的对比度层次,因此,几乎所有的8位图片格式,在编码的时候,都是采用图8的gamma灰度系数来压缩数据的。在这些图片里,暗部层次被拉开,亮部层次被压缩,然后储存于8位图片之中,总体上来看,由于是一条上拱曲线,那么所有的输出数据实际上都被不同程度的“提亮”了,只不过暗部提亮的剧烈,亮部提亮的缓慢,最黑点(0,0)和最白点(1,1)没有移动。

经过这样的处理,jpeg图片所能表现的动态范围达到大约11挡左右,对于一般观众,基本够用。

基于上文提到的种种原因,小于1的gamma,又被称作“编码gamma”、“压缩gamma”。意思就是在编码数据,压缩低动态图片文件的时候所采用的gamma值。直观特点是上拱,提亮(这只是表面特点,目的并不是为了提亮,而是保真)。

二, 屏幕解码输出端(Decoding)

一般家用电子显示设备的色深度是8位,RGB每通道都有256个亮度层次,三个通道取值均相同的时候,呈现灰色,因此一般的计算机屏幕共有256个灰阶层次。

屏幕的亮度很有限的,即使RGB均取最大值255,亮度也不过是一个柔和的纯白色而已,想要用这种有限的动态范围来表现大自然丰富的动态范围,就必须有技巧的分配亮度,拉开亮部信息的跳跃阶梯,通过灰暗像素的对比,来衬托明亮像素的亮度,让本来不怎么亮的白色像素在周边灰阶的对比下显得很明亮,达到符合人的心理感受,重现自然界场景的目的。

举个例子,如下图(图9):

图9舞台上有很多盏明亮的灯,给人很刺眼的感觉,如果我问你这里面主要的灯光是什么颜色,你可以轻易的说出灯光是黄色的。然而如果你用Photoshop的吸管分析工具,吸一下高光的部分,当然会得到一个RGB等于255的纯白色的结果(图10)。

很显然图10中这一大片过曝的区域都是纯白色,没什么稀奇,如果单纯满屏幕都是白色的话,你肯定不会觉得屏幕很刺眼,但是当过曝的白色区域周边出现了微妙的色彩衬托,暗部呈现深黑色,明暗有了参照以后,图像带给人的心理感受可以变得很强烈,很生动,你很容易说服自己:“这个灯光很明亮”,因为场景的明暗对比程度,符合你的日常经验。

那么在电脑屏幕上,如何处理来自自然界的线性数据(base-10)呢?如果我们有一张数据线性分布的图像,将要被呈现到屏幕上的话,是否需要gamma修正?如果是,应该修正多少呢?

首先,我来向你证明一件事,如果使用线性映射来等比例的呈现图片信号,是行不通的。请看下图(图11):

(此图的演示效果只有在图片100%显示模式下有效,在视频,pdf文档中均由于压缩算法会失效。)
图11左边方块是一个明度约为74%的灰白色,中间方块是由多个1像素大小的纯黑和纯白像素间隔而成的棋盘格,右边方块是50%的灰色。放大特写如下(图12):

我们知道在屏幕上RGB=255表示纯白,也是屏幕最亮的值,而RGB=0,是关闭该点的灯光显示,也就呈现了黑色。那么中间这个棋盘格,对于屏幕设备来说就是“开了一半的灯”,如果用物理工具测量的话,中间棋盘格所呈现的亮度,恰好是屏幕白色亮度的一半,如果定义纯白能量为100%,这个棋盘格的平均能量显然正好是50%。

然而如果你把这个线性能量50%和右边的50%灰比较一下的话,你会发现50%的灰色要暗得多,中间的棋盘格平均灰度明显偏亮,反而更接近左边74%的亮度。

这就是说,如果屏幕在显示数据的时候线性的把亮度数值换算成等比例的能量(举例说就是文件中存储的大小为0.5的数据直接对应屏幕上50%的能量),那么呈现在屏幕上以后,我们会觉得本应是50%的灰色偏亮了不少。

下图是一个灰阶过渡,对于屏幕来说这个灰阶过渡是线性的,如果我们用照度计测量的话,它们的每一个色阶提升的亮度的物理数值是基本均等的,也就是以base-10的标准来衡量的话,下图亮度每一格都比前一格增加相同的能量(图13)。

很明显的,由纯黑到第一个灰阶,有一个很大的跳跃,而在高光区则变化不明显。道理还是我们所知道的,人眼对暗部的明暗变化更敏感一些。因此,为了更好地利用屏幕显色的动态范围(这个动态范围很小很珍贵,因为纯白255的亮度本来就不高)。在亮度信息解码到屏幕上的的时候,会用一个比1大的gamma,进行灰度校正。如果没有这一步,屏幕上图像的灰阶过渡就会看起来和图13一样不舒服:暗区跳跃大,亮区层次模糊。

那么这个gamma取多少呢?在早期,不同的设备,不同的操作系统都有不同的gamma值。1996年,惠普和微软联合为显示器,打印机,以及网络图像(8位图像)推出了sRGB标准,sRGB,即standard RGB,意即通行的国际标准。在坐标轴上,sRGB的图像是这样的(图14):

请注意此图是两张图表的叠加,所以纵轴的读数左右两边不一致。我们先看横轴以及右侧的纵轴,横轴是输入数值,比如是某图片文件的亮度读数,而右侧的纵轴就是该读数在屏幕上输出的像素亮度占屏幕白色亮度的百分比。

其中若隐若现的黑色虚线,是gamma=2.2的函数图象。

而红色曲线,即是sRGB标准的图像。不像其他大部分RGB标准,sRGB空间的gamma不是常数,而是一个分段函数,我们放大一下图表的左下角(图15):

sRGB校正曲线横轴(0,0.04045)区间内,是一条由(0,0)指向(0.04045,0.00313)的直线。而在大于0.04045以后,是一个指数为2.4的复合函数,轨迹和gamma=2.2基本重合,而各个点的等效gamma一直在变,由1一直增长到2.3左右。

再回头看图14:

这其中的蓝色曲线,就是对红色曲线取对数的结果,也就是求出了每点的等效gamma值,左边纵轴就是等效gamma的读数。可以看到在输入值小于0.04045的时候,由于红色函数是一段直线,因此等效gamma等于1,而在输入值大于0.04045以后,等效gamma由1一直慢慢增加到2.3左右。当输入值为0.5的时候,蓝色曲线的中位数读数约为2.16,并非2.2。

红色曲线之所以是一个分段函数,是因为sRGB标准首先本着首要原则:处处以人眼的感受为准(人眼可不是用一个简单的常数就对付得了的),然后又综合考虑了很多复杂的因素(比如8位图像主流的编码gamma,1996年主流CRT显示器的解码gamma等等),才提出了这个校正标准,目的是为了更精确的符合人眼的观赏习惯,以图13的灰阶过渡来举例子,在把图13的线性灰阶经过了sRGB的非线性gamma校正以后,我们看到的非线性灰阶,会是一个比较完美的从纯黑到纯白的过渡。

而由于红色的sRGB曲线几乎和gamma=2.2曲线重合,因此在很多不太精确的情况下,我们就认为国际的屏幕校正标准是gamma=2.2,这是无伤大雅的。

使用gamma=2.2校正后的灰阶图(图16):

可以看到这个灰阶过渡看起来就均匀多了,但是若是探究其实际的亮度增长,则是暗部亮度增加缓慢,越亮则亮度上升越快的曲线。(很好理解,暗部微小的变动即可被察觉,因此尽可能缩小暗部之间色阶的亮度差距,而到了高光区则需要较大幅度的拉开亮度差,才会被眼睛察觉。)

因此在屏幕显示端,通常要使用这样大于1的gamma来校正输出的亮度分布,以便较合理的利用屏幕的256个亮度层次,这样的gamma又被称作“解码gamma”。如果你的计算机屏幕经过了标准仪器的校色,那么它的颜色空间应当是符合sRGB国际标准的,进而你可以得出结论:它的gamma在2.2左右。

那么把国际上最常用的编码gamma和解码gamma放在一起,图像如图17所示:

首先解读一下显示器的解码gamma曲线,它是下凹的,可以看到,在经过解码gamma的校正以后,横轴输入端读取的0.5数值,会被压暗到屏幕线性亮度的21.8%来输出,而这个亮度,在人眼看来,正是中灰色。而屏幕输出达到屏幕总线性亮度的50%的时候(以base-10的标准衡量),输入数据已经达到了70%多。这就意味着,经过gamma校正之后,图片上70%以上的信息,集中在屏幕50%以下的亮度范围内。而另外一半偏亮的亮度空间,用来表现剩下的21.8%的亮部细节,只有这样,亮部的细节之间才能大大的拉开差距,被人眼看清楚。这样的分配,才是比较合理的。

另外看一下采样gamma曲线,它的大小是1/2.2,正好是2.2的倒数。观察一下,它在采样的时候,把自然界中能量层级为21.8%的信号,放大为0.5记录了下来,而这个21.8%,在人眼中刚好是大约中灰色的感受(原因我已经说过太多遍了)。

于是经过了采样/编码gamma的压缩和屏幕解码gamma的还原,我们就在小小的(确切说是“暗暗的”)电脑屏幕上,看到了大自然丰富的灰度过渡,并且从心理感受层面,得到了“画面真实还原”的感受。2.2和1/2.2互为倒数,完美的相互配合着。这里要注意的是,根据上文详细解释,你应该明白这两个gamma都有各自必须产生的原因,只不过在1996年统一sRGB标准的时候,某种程度上参考了主流编码gamma的数值(gamma≈0.454)。而国际标准制定以后,图像的压缩gamma便可以反过来依据国际标准(sRGB gamma≈2.2)来制定大小了。现在的jpeg文件通常都会以sRGB作为文件的的色彩空间标准。

关于CRT(Cathode ray tube)

上文详解了编码gamma和解码gamma。其实gamma校正这个数学工具的产生,最初是因CRT显示器而生。CRT显示器(Cathode ray tube,阴极射线管)本质上就是高中物理课上的“示波器”,传统电视机和电脑的CRT显示屏都是使用和示波器相同的原理来呈现画面的(图18):

在图18中,由阴极射线管打出的电子,经过磁场偏转,最终击打在荧光屏上,激发出亮光,这样从左上到右下不断的扫描,完成画面的显示(传统电视机一般是隔行扫描,上下两场切换)。CRT系统的外观照片如图所示(图19):

那么在这个系统中,输入端的电压信号,并不能线性的,无损的转化成屏幕上的亮度值,举例来说就是当我输入为一个大小为0.5的信号时,呈现在屏幕上的最终亮度,要比屏幕总亮度的50%暗很多(约21%)。由于各个环节的物理损耗以及荧光屏的物理特性,越是输入电压比较低的时候,屏幕亮度提升越慢,直到电压较高的时候,亮度的损失才有所缓解,电压越高,亮度提升越快。输入信号和输出亮度的大小,呈现类似下图的关系(图20):

这是一条似曾相识的曲线,它表示的是文件输入的信号,与CRT显示器最终输出的亮度(计量单位base-10)的关系,可以看到,由于系统性能量损耗的存在,信号并不能线性的反映为屏幕亮度,而是呈现一条大约gamma为2.35-2.55之间的gamma曲线。这个gamma,叫CRT显示器的“失真gamma”。

那么要不要校正这个失真gamma呢?要校正,但是要不要把总gamma校正到1呢?没有必要,在实践中,只要矫正到2.2左右,就正好和前文提到的8位图片固有的编码gamma完美配合了。以一台失真gamma=2.55的CRT显示器为例:只需要把gamma=2.55微调到gamma=2.2就可以,中间只需要把信号补偿一个gamma=2.2/2.55≈0.863就可以了。公式如下:

理论总结

好,那么现在我们来梳理一下所有这些gamma的相互关系:

首先由于CRT显示器对于电信号转化光强度的非线性关系,为了应对“失真gamma”,产生了“gamma校正”的概念,人们使用一个“补偿gamma”来应对这种非线性的失真,随后“gamma校正”被扩展到广义的图像灰度修正领域里。

图像在采样/编码端的“编码gamma”可不是受CRT的这种不完美的物理特性的影响,而是单纯的因为人眼特性,为了高保真的采集自然界的信息,才把“编码gamma”定为了0.45。

而幸运的是,CRT显示器失真gamma(2.35-2.55)与解码图像所需要的解码gamma(2.2)是非常接近的,因此只需微小的电路校正,就可以把很符合人眼视觉习惯的画面呈现出来。CRT失真gamma与图像解码gamma数值上的相似,既有运气成分,也离不开工程学的设计。这两者的巧合大大简化了早期电视机设备的电路设计难度。

也正是综合了人眼习惯,CRT主流失真gamma,图片/视频主流的采样gamma,人眼面对屏幕信息所需要的解码gamma等等因素,惠普和微软才在1996年提出了sRGB标准。而这个标准提出以后,所有在sRGB标准以后产生的硬件软件,都在向这个标准上靠拢。所以就算现在的主流显示器已经不是CRT了,显示器的解码gamma最终还必须是2.2。你要知道,现在主流的LCD液晶显示屏是线性元件,它的亮度对电压信号的反映基本是线性的,而为了符合sRGB标准,液晶显示器不得不在解码的时候,给信号加上一个压暗的gamma=2.2的失真补偿,和他的老大哥CRT相比,就显得委屈得很,没有那么幸运了。没办法,谁让你要显示8位图片呢,依据国际标准,它们可都是在编码的时候自带提亮gamma的。

所以如果用图示表示的话,图片和显示器对亮度信息的gamma校正特性,可以简单地概括为(图21,这套图片的原作者是英国设计师Matt Gorner,我对其进行了部分的编辑和翻译):

这幅图即是说:在8位图像编码的时候,所有的文件都被小于1的gamma校正过,所有的数据都被不同程度的“提亮”过。这些文件包括你熟知的jpeg,BMP,TIF,另外最值得注意的是,连你最常用的8位RGB(0,255)调色板,都被gamma校正过,也就是说你每次吸管所吸取的数值,实际上都是被放大过的失真信号,有木有三观尽毁,不相信爱情的感觉?

那为什么我们觉得我们看到的颜色是对的呢?我们已经解释过了,那当然是因为显示器针对这些编码gamma做了反向的解码,解码gamma依据国际sRGB标准,取gamma=2.2。相当于向下压暗(图22)。

这两者一配合,就相互抵消,输出了一个所谓“线性”的结果,但是如果你认真思考的话,就会发现,这里的“线性结果”中没有任何数据之间的关系是线性的,首先它的数据采样点是不均匀的,亮度的能量层级也是不均匀的。之所以说“线性”,实际上是因为现在屏幕上所呈现出来的亮度层级,和自然界的亮度层级是成线性比例的。而我们人眼对大自然的感受,从一开始就说了,是非线性的,因此屏幕上用非线性的数据分布,还原了我们对自然的感受。

好了,以上就是对所有的背景知识进行了详细的阐述,我相信如果你认真看进去的话,是可以理解的,这真的是非常浅显的常识类知识,再加上各种知识背景的补充,相互间的影响关系应该比较明了了。

那么我们在此基础上,就可以回到正题了:为什么渲染时的灯光总是不给力呢?为什么形如图5这样的上拱曲线,可以让光线过渡看起来正常呢?

线性工作流

我标题叫“你之前的渲染是错误的”,但是我也说了,错不在你,这一切都是因为:早期编写渲染软件的程序员,没有充分的考虑到一系列的gamma在不同环节中的应用,导致用户在直觉化的使用软件的过程中,有些步骤缺失了gamma校正的过程,造成了光线衰减过快。

首先要研究的一个问题是,渲染软件在进行光线、色彩的计算的时候,是根据什么公式进行计算的?

答案很简单,就是依据真实世界的物理定律(为什么不呢?),根据物理学的光强度计算公式,渲染软件中人工加入的灯光,遵循自然界的平方反比衰减定律,也就是说,渲染软件是用线性的数学工具思考的(base-10)。用图解表示的话,就是这样(图23):

在软件内部所加入的人工光源,太阳光,IES,都是按照线性数值参与计算的,这些灯光的测量单位可以是功率“瓦”(W),也可以是光通量“流明”(lm)总之都是些十进制的物理单位,即base-10的线性数值,衰减速度和自然界一样,都符合平方反比定律。

那么,当我们把8位图片,输入到渲染软件里以后,会发生什么呢(图24)?

第一步:我们按照直觉化的操作,直接把8位图片和8位的调色板信息,输入了渲染软件,那么错误从这一步开始就立刻产生了:我们不能这么做。因为所有的8位颜色信息都是经过小于1的编码gamma放大过的,这里的一个大小为0.5的像素,实际上只对应自然界里的21.8%。渲染软件是依据自然界的物理规则在计算的,那么相当于我们输入的所有颜色信息,都是偏亮的,而在渲染软件里人工加入的灯,是正常的亮度,这样的计算结果怎么可能对呢?我们接着看图25。

这样会输出“混合gamma”的结果,即图片颜色带有提亮gamma,而光线衰减速度为线性。我们所有的人,都是在这一步就出图打印了,因为图片的颜色经过显示器2.2的解码gamma压暗以后,颜色看起来是正常的。但是你会注意到,经过屏幕压暗以后,光线变得很昏暗,衰减速度非常快,造成了开篇提到的问题,而这一步所发生的错误就是其本质原因。如果我们为了抵抗这种屏幕压暗,模拟真实摄影的过程,为混合gamma的数据增加一个提亮的0.454编码gamma,会怎么样呢?

第二步:施加小于1的编码gamma(图26)。

此时的光线衰减速度看起来就正常了,然而由于图片颜色被两个编码gamma提亮,但仅仅被屏幕解码gamma压暗了一次,所以所有的贴图会看起来颜色发亮,饱和度降低。这也解释了为什么开篇的室内案例,用形如图5那样的上拱曲线是可以挽救的。因为这样提亮以后,光纤衰减速度,看起来趋于正常,符合我们的心理认知。

那么究竟要怎么办?灯光和图片,我们纠正哪一个?

正确的方法是校正图片,在第一步,我们使用一个大于1的压暗gamma,抵消掉8位图片和调色板的编码gamma,使其输出线性的物理数值,这一步,被称为de-gamma(图27):

线性的颜色数据(base-10)结合线性的灯光数据(base-10)进行计算,就会输出和自然界一样的线性结果了,所有的步骤都是在线性空间里计算的(base-10),因此这个工作方式,被称作线性工作流程,简称“线性工作流”(图28)。

不要忘记,这个结果仅仅是内存中的数据,从你的电脑屏幕中看起来,图片的颜色是被压暗过的,光线的衰减速度也很快,看起来基本上就是漆黑一片的环境中布满了过度饱和且深重的颜色。此时,为了抵消屏幕的解码gamma,合理的采集计算出来的数据存储到8位图片中,我们要对这个线性数据结果进行采样gamma校正,即使用一个小于1的gamma放大暗部信号,压缩亮部信号,这一步,和拍摄数码照片没有任何区别。施加了编码gamma后,就可以输出正确的8位图像结果了(图29)。

好了,到这里,我们线性工作流的原理,算是彻底讲解完了,有没有拨云见日的感觉呢?如果还是很困惑,请耐心的阅读之前所铺垫的理论,也欢迎和我来讨论。

拥有了理论武器,我们如何在Vray for SketchUp中实现它呢?

Vray for SketchUp中的线性工作流程

前面说了半天理论,如何实现,才是大家都关心的问题。那么在一些专业的CG软件里,比如3ds Max,Maya,它们都有很针对性的系统参数,来调整单一元素的gamma,比如我可以设定所有的贴图在输入渲染软件的时候,被de-gamma压暗,但是请不要让我在屏幕上预览到这个效果,这样在给模型贴图的时候,我透过屏幕看到的,是正常的贴图颜色(此时屏幕背后的图片数据均是偏亮的),而参与数学计算的,是偏暗的线性颜色。而渲染软件的材质编辑器更是可以使用gamma控制节点来单独的调整每一张图片的gamma,非常精准,这样的好处在于我可以只校正色彩贴图文件,而不校正凹凸贴图,置换贴图等灰度文件,因为他们的灰度表示其他的信息,如果一刀切的都被压暗了,模型的凹凸就会不正确了。

不幸的是,SketchUp在设计之初就根本没有考虑这个问题,SU根本不是为线性工作流而生的,或者可以说它不是为渲染而生的,我们在SU里找不到一个系统参数,可以调整全局的图片gamma,de-gamma操作就变得极为麻烦。

没办法了,我们只好使用Photoshop,来给8位图片de-gamma,比如我们要渲染在如图所示的蓝绿色房间中,悬挂一幅风景画的效果,那么默认直觉化的渲染操作后,我们会得到如下的结果,风景画和蓝绿色的墙壁着色正确,灯光昏暗过曝(图30,图31,图32):

图30风景画贴图

图31模型场景

图32,直觉操作后的渲染结果。注意此时的灯光倍增值已经高达120,然而屋内的总体曝光度仍然极其昏暗,但是灯光附近的墙壁已经开始过曝了。

那么为了让灯光的衰减速度变得正常,我们要给现有的渲染数据整体施加小于1的编码gamma,此时全图都会被提亮,如何施加呢?注意到在Vray的帧缓存窗口左下角有一排按钮,其中有一个sRGB按钮,按下去后,就可以预览到该图片数据在sRGB空间里的效果。

按下它就相当于不施加gamma2.2的曲线了,我们内存中存储的这幅图,正是sRGB空间的颜色信号组成的,如果线性的显示出来,少去了2.2gamma压暗的步骤,就相当于整体提亮0.454的gamma。那么视觉效果上,灯光衰减速度会变得正常,而风景画和蓝色墙壁,由于双重提亮gamma的存在,会比正常情况亮一个层级,看起来颜色就会被冲淡(图33)。

可以看到墙壁和风景画的颜色都浅了,灯光变得很充足很自然,甚至有点太亮了,我们可以稍微降低一下灯光的倍增值。

那么,如果应用线性工作流程,我们应该怎么做呢?首先给图片和墙壁de-gamma,在Photoshop中打开风景画,点击图像>调整>曝光度(图34):

此时弹出的面板的第三行“灰度系数校正”就是我们整篇文章在探讨的gamma校正。De-gamma是一个压暗操作,这里向右拖动滑杆,或者直接输入0.454,就可以给图片施加一个2.2的压暗gamma了,这个面板是模拟冲洗照片的gamma校正操作,这里填写的gamma是告诉计算机原片的失真gamma,因此计算机会反向校正数据,屏幕上填写的gamma是实际运算公式中gamma的倒数。

De-gamma后,图片会看起来是这样(图35):

可以看到,图片暗了好多,我们把这张图片保存,替换到场景中(图36):

OK,图片de-gamma完成了,蓝绿色的墙如何de-gamma?关于单一色块的de-gamma,我一直没有谈,实际上就是把应用在256的灰阶上的原理,分别扩展到RGB三个通道就对了,我们看一下蓝绿色墙壁的RGB色值:R40,G204,B204。那么需要把RGB三个数值换算为0,1区间的小数,再计算它们各自的2.2次方,然后再总体乘以255。以G通道204为例:

经过这样的计算,原来的R40,G204,B204的蓝绿色就变成了R4,G156,B156的暗蓝绿色(图37)。

这样我们再次渲染的话,输入给渲染器的颜色信息就都是线性的了。默认渲染结果如图(图38):

所有的颜色所有的灯光都很暗,这是件好事,当我们点击sRGB预览按钮的时候,一切都完美了(图39):

在此图中,灯光的衰减速度正常了,风景画和墙面颜色也是我们想要的颜色,只有配景人Susan的衣服和肤色,因为没有事先de-gamma,所以颜色被冲淡了。

至此,我们完成了大部分的线性工作流,但是所有的人都会有一个疑问,如果仅仅调整一幅图,一面墙都这么麻烦,那么这个方法在实际应用中,岂不是没有意义了吗?是这样,缺点不仅仅是麻烦,这种事先使用Photoshop为8位图片de-gamma的操作,还有一个副作用,就是颜色丢失(图40):

可以看到在使用曝光度工具de-gamma以后,图片的暗部变得死黑一片,直方图右侧对应的而高光区则出现了色阶跳跃,这很好理解,因为所有的数据都被压暗了,那么由于前后都是仅有256个灰阶的8位图片,势必造成de-gamma图片在四舍五入后要丢掉暗部的一些信息,而亮部却没有足够的信息补充进来,造成亮部信息直方图离散分布。直方图上清晰地表明了这些:暗部每隔几个灰阶就有一条比周边高约一倍的信息,这就是压缩四舍五入后和邻近色阶合并,数量翻倍的结果;而高光区因为数据不足则拉开了空白。通常来讲8位图片转化成2.2校正后的8位图片,颜色灰阶要由256减低到190左右,灰阶信息损失高达25%。

而且还有一个很麻烦的问题是:如果这样执行线性工作流,我在建模阶段的贴图以及从调色板里吸取的颜色,必须全是偏暗的,那么我很难直接在软件窗口内看到正常的效果,这对设计流程来说,是不可容忍的障碍(图38)。

那么经过以上的论述,我们似乎可以放弃在Vray for SketchUp中执行线性工作流了?常规的解决方式既麻烦又有瑕疵,真的是很难把这条路走下去。有没有好的办法,可以让我们接近直觉化的操作,建模,贴图,上色,所见即所得的获取渲染结果呢?

我猜你也知道,如果没有这个办法,我是不敢写这篇文章的。好吧,不卖关子了,在Vray插件中有一个面板,是专门控制计算结果的校正和输出的,它就是Color Mapping面板(图41):

这个面板的Type一栏,有着各种函数算法,用来控制输入数据到输出数据的映射关系,那么在Type一栏里的若干函数,有好几个专门被设计用来纠正早期非线性工作流程所造成的灯光衰减过快的问题(比如Exponential ,HSV Exponential,Gamma Correction),只可惜它们的入手点都错了,我们现在都明白了,计算的错误是从图片导入的一瞬间就产生了,拿着一个错误的结果再怎么修正,也不可能得到正确的结果,只能错上加错。

那么我们选择哪个函数来修正输入/输出呢?答案是:Linear Multiply,即中文版的“线性曝光”,在默认情况下,线性曝光映射是宽容度最低的,非常容易过曝,但是线性曝光意味着我们不对输入结果进行任何的gamma校正,也就保证了在渲染软件中,是100%的线性计算,数据没有提亮或者压暗的失真。为了严格的保证这一点,必须同时把Bright Multiplier(亮部倍增)和Dark Multiplier(暗部倍增)都调成1。才是真正的纯天然线性工作流。

那么面板的第三行有一个Gamma(2.2)右边还有一个Input Gamma(2.2)这是什么意思呢?

左边的2.2,代表你的显示器的解码gamma值,如果你的显示器是主流的国际标准显示器,那么这里要填写2.2,没有问题。

右边的这个则是输入信息所经历的“gamma校正”,注意这里有一点容易困惑,在行业里提到“gamma校正”这个术语,通常是指输出值右上角gamma的倒数,因此一个被2.2“gamma校正”过的图片,其实就是编码gamma为0.454提亮过的图片。

当左边的显示器gamma等于右边的输入图片的“gamma校正值”的时候,你将会在渲染结果中看到所见即所得的图片,也就是大家每天渲染的时候看到的情况,给模型贴上任何贴图,渲染出来颜色还是正常的(只不过此时光线衰减快)。

最有意思的一步来了,我给右边的Input Gamma多乘一个2.2,即填写4.84,在默认渲染的情况下,你会发现所有的图片颜色以及从调色板里吸取的都被压暗了。这是因为我欺骗了Vray,让它误以为我们的图片的编码gamma是1/4.84,由于我们在显示器gamma那一栏,已经告诉Vray显示器的gamma是2.2,为了弥补2.2和4.84的差距,Vray帮我们对8位图片和8位调色板进行了大小为2.2的gamma校正,而这一步操作,正相当于de-gamma。(本来这两个参数,是为了弥补编码gamma和解码gamma的差距,保证图片正常显示的,比如你的显示器gamma是2.5,图片编码“gamma校正”值是2.3,你只要在左边填2.5,右边填2.3就对了)

通过这种歪门邪道的方式,我实现了利用软件参数,轻松de-gamma的目的,要注意的是,此时Color Mapping面板里Correct LDR Textures和Correct RGB Colors必须勾选,这两个参数是和Input Gamma关联的,4.84就是用来校正LDR贴图和RGB调色板的。这里面“LDR Textures”其实是“Low Dynamic Range Textures”(低动态贴图)如果说我们知道32位图片是HDRi图片(High Dynamic Range image),那么这个LDR,其实就是8位图、16位图啊。右边这个RGB颜色,就是指灰阶256的8位彩色调色板。

那么总结一下基本上是这样(图42):

其中右下角的Linear Workflow表面上看是线性工作流,但是这个参数的目的是快速的把过去一些没有按照线性工作流程制作的老场景迅速的改成线性工作流,在3ds Max中,它会有选择的校正贴图纹理而不校正凹凸贴图等,还是可堪一用,但是在SketchUp中这个参数似乎不太好用,毕竟SU里没有相关的系统参数与之对应,所以这个参数似乎就失效了。而且在线性工作流普及以后,de-gamma的设定是由你自己控制的,这个快捷选项也是不对3ds Max用户推荐的。

而中间的Clamp Output千万不要勾,如果勾选了,就会损失掉高动态的Super White信息,这些信息是非常有用的,有了它们你就可以把过曝区域的细节信息找回来,勾选的话,过曝区域就只有大小为255的纯白色了。到时候就回天乏术了。

那么经过这样的设定以后,我们再来看一下图31的场景(图43):

可以看到场景的颜色和参数设定,颜色是符合设计直觉的直观的颜色,参数则是使用了线性工作流设定,默认渲染结果如下(图44):

好黑,真心有点吓人。点击左下角sRGB按钮(图45):

完美。

光线衰减速度:正常。图片的着色:正常。Susan衣服的颜色,墙壁的颜色均正常。而且由于是内部参数计算,gamma被抵消,图片并没有丢失任何的颜色层次。

那么最后的一个问题就是:怎么保存这个正常的结果?

如果我们在这个面板下直接保存8位BMP或者PNG,你得到的还是和图45一样的结果,因为sRGB按钮只提供了预览功能,并没有把0.454的gamma编码进去。

那么在这里,我们要么保存*.exr,要么保存*.hdr,exr模型空白处有透明像素,类比8位格式PNG图片,hdr则会保留背景的super white信息,类比BMP格式。

那么保存出来的高动态图片如何拍平成8位图片呢?用Photoshop打开*.exr或*.hdr(图46):

点击图像>模式>把32位勾选为8位,会弹出如图所示的对话框,点击“合并”。

又会弹出如图所示的对话框(图47):

这时候你的图片会整体变色,这是因为使用了局部适应的算法,进行了HDR采样,这个时候我们不需要任何的重采样,直接把方法由“局部适应”改成“曝光度灰度系数”,这时候颜色又回来了,然后点击确定,保存,我们的图片就被采样为8位了。

至此,在Vray for SketchUp中的线性工作流程全部讲解完毕。

由于使用了歪门邪道的“欺骗Vray”的方式,所以这绝对不是正确的线性工作流程,只不过由于SketchUp没有系统gamma参数,才不得已而为之,更不要把这个方法使用到3ds Max和Maya等软件当中去,它们有更成熟和完美的线性工作流程有待大家去研究。从实际效果上来看,在SketchUp中这样做已经能满足大部分的室内渲染的需要了,但是有两个问题,是我没有解决的:

1. 在最后提亮全部场景的时候,Vray背景贴图会被一起提亮,相应的反射也是被冲淡的,背景的de-gamma,我没有找到好的办法,但是大部分情况我们是要换背景的,所以暂时凑合。
2. 另外我不知道这个全局de-gamma会不会影响凹凸贴图和置换贴图等灰度控制图,据我的测试似乎没有影响,但又不知道确切的结果。

总之,我认为这个在Vray for SketchUp中的线性工作流,是一个能适应大部分常规建筑学生出图需要的工作流程,能够解决灯光偏暗这个非常令人头疼的问题,至于凹凸,反射环境等细微的问题,本来就不是SketchUp的强项,如果你追求照片级渲染,那么我推荐你用3ds Max和Maya。如果是常规的方案表达,我觉得目前为止的实验成果,可堪一用。更重要的,是对理论的理解。

最后要强调的两点是:不是说线性工作流就是对的,室外渲染可以使用默认工作流程,不要用线性工作流。另外如果4.84以后贴图的饱和度过大,可以尝试4,3.8这样的折中数值。

欢迎以各种渠道联系我,和我来讨论这个话题。


注1:相信你会理解这个简单的等效:相对面积较小的开窗洞口,等效于一个面状光源。

注2:你也许觉得图2的光感没有什么奇怪的地方,那是因为你每次使用渲染器打灯,都会得到这样的结果,你已经见怪不怪了,抬头望望你周遭的环境,光线的分布绝对比图2要均匀,柔和的多,房间的每一个角落都是亮堂堂的,主光源也不会像图2这么刺眼,感受到了吗?

注3:直觉反应指是每个人在得不到指导时候的软件使用方式,当我们用软件的时候,自己按照正常思维最容易采取的操作方案,称为直觉反应。很多人在使用Vray for SketchUp时最常见的直觉反应之一是:简单的认为渲染软件就是打开默认的阳光系统,然后把相应的物体附上相应的官方预设材质,再用官方的预设参数去渲染,这样一来,如果没有材质库或是参数库就会感到寸步难行,图纸的质量和渲染时间也完全处于听天由命的状态。

注4:其实连这个办法都不是每个人都能总结出来的,但是这个思路非常重要,是开篇的案例能够被挽救的核心方法。由于在窗口过曝之前及时收手,保存了较暗的渲染结果,才保留了高光区周边的数据,给后期留下提亮修复的空间。而现实中大部分人为了得到正常的曝光,是不得不放弃掉高光区的细节数据的,所有人都会直觉化的被迫渲染一张过曝的图片,而这种图片是很难后期挽救的,因为高光区细节已经纯白一片。而且这个方法有一个解决不了的弊端,你仔细看的话,在图片的暗部色阶过渡跳跃非常快,色块之间有很明显的分缝,这是因为原来图纸的暗部原本就没有这么多信息,被提亮以后,暗部阶梯的差距被进一步拉大,形成很容易被眼睛察觉到的色阶。

本文pdf阅读版:点击下载

网站推广阶段,欢迎您关注网站的微信公共平台:
扫描关注“韩的日志”微信订阅号

  • 请注意,为了保证我能看到所有留言的提示,留言将通过审核后才会显示,请不必重复留言。
韩世麟

About 韩世麟

站长,天津大学研究生毕业,天津人
Bookmark the permalink.

76 条评论

  1. 沙发看来我是必须第一个抢到了啊(非常nice)……(开着TANK撞猪)

  2. 勉强的看完了,突然觉得信息量很大

  3. 我坐小板凳,哈哈!

  4. 感谢,解决我很久的困惑!

  5. 顶了!!!!!

  6. 快速过了一遍,框架很透彻的说

  7. 韩神的教程都比较细致 & 全面,很受用,辛苦啦~

  8. 从大二开始关注韩神,已经一年了在韩神这学到不少的东西,这篇也让我收益匪浅,谢谢韩神了。

  9. 一直膜拜韩神,很多东西让我很有感悟。

  10. 今天第一次看到了这个网站,作为一个喜欢捣鼓软件,愿意从原理上去认识软件的,大四的建筑学男生,我真的觉得相见恨晚。感谢韩大神,这篇文章让我了解的不仅是vfs渲染的问题,更多的关于人眼视觉的,显示器的,gamma的这些知识,对于理解原理十分有用,再次感谢韩大神的分享

  11. 太棒了,佩服韩大神的严谨与对知识研究的深入程度,膜拜,非常感谢

  12. 这篇帖子现在才看,因为也是在制作图纸时遇到了困扰,搜搜搜地突然发现老师有此贴。很喜欢这样的原理贴,个人觉得就是需要弄懂最根本的东西,才能举一反三才能去运用。韩老师的这帖子真是受益匪浅。再次感谢老师。

  13. 谢谢韩大,看了视频又看了帖子,有了些理解了!

  14. 写的很精彩!希望韩神用粗体提亮一下关键词,看起来会更醒目

  15. 真是我学习的偶像啊~~~

  16. 想请教韩神一个问题,室内场景在渲染时光线非常充足,不仅仅有彩色光斑,还有天光的样子。是怎么做到的?我试着做一次这种效果,但是室内会很暗,是不是室内并未封死?

  17. “并没有把0.454的gamma编码进去”,为什么不是4.84?

    • @诞皇派 0.454是1/2.2,4.84是2.2×2.2。

    • @诞皇派 如果我们在这个面板下直接保存8位BMP或者PNG,你得到的还是和图45一样的结果,因为sRGB按钮只提供了预览功能,并没有把0.454的gamma编码进去。

      这里“0.454”的gamma指的是小于1的,效果是提亮的gamma,你可以理解为0.454是“提亮”的同义词。

      这段话意思的重心就是,sRGB按钮只提供了图片变亮以后的预览功能,并没有真的把图片提亮。

  18. 韩神,Vray2.0是不是已经默认线性工作流了?我渲完室内后再点sRGB发现没有变化呀,是不是我的Vray装的有问题呢

  19. 我用的就是vray2.0

  20. 、、发现了,是我点错按钮了。点srgb是有变化的。但是vray2.0的gamma还用改为4.84么,我试了试貌似改成4.84和默认的2.2没什么变化呀

  21. Pingback: 《染色阳光》——VELUX 2014别提名奖作品绘制详解 | 建筑学院

  22. 给老韩点个赞,信息量实在有点大,我慢慢看

  23. 谢谢韩大大!看了几遍终于明白了,还有提供下载,真的很棒很细心!对自己的学习越来越有信心,继续带领我们前进哟!

  24. 谢谢韩神 领悟了很多东西 韩神无私奉献这么好的知识 真是太幸运了

  25. 真的很感谢韩神,写出这么有深度的文章。

  26. 韩神你好,我最近在学习你的教程,有个问题不太明白想请教你一下,线性工作流那里讲到说八位图片为了抵消屏幕阻值提亮一下来达到线性的显示效果,可是在电脑屏幕里被伽马曲线压暗的图片不正是人眼觉得真实的吗?为什么还要提前提亮一下来达到线性显示效果,这样不就违背人眼的真实识别感了吗?

  27. 看完只觉得 够我消化好久了

  28. 前面就是说电子设备编码的时候采用一个函数来储存线性的数据,然后在输出的时候再采用一个几乎相反的函数来还原这些数据使之符合人们正常是视觉,后来提到的失真GMAAM差不多就是编码和输出gmaam这两者之一的替代品,这样这两个“相反”的函数才能互补是的画面还原,但在vfs中,对于亮度信息的采集和输出是线性的是根据能量层级算的,所以导致了光线衰减过快的问题(我不自觉的想到了VFS里灯光的衰减方式,也许无关吧)后来方法也是没能足够理解透彻,看来今晚只能这样了,改日再战。

  29. 你好,关于室内渲染图明暗关系不理想的问题,我在知乎上问了一个问题http://www.zhihu.com/question/38102515
    另,在vray for rhino尝试了一下“歪门邪道”,感觉效果还是不理想

  30. 您好,偶然间学习到的您的教程,不过那时候您用的是vray1.49版本的,您那时候说线性工作流勾选和不勾选没有什么作用。现在我用给的是vray2.0版本的,在勾选了线性工作流以后开rgb颜色很正。没有老版本说的冲淡颜色,这是不是说新版本的vray2.0 勾选了线性工作流以后,不用象您教程里面说的那么麻烦了?

  31. 韩老师您好,刚刚发现您的网站,有时间就看,我有一个小问题,在视频里面一开始您用8位和32位的红绿融合作比较,为什么我的PS在32位情况下不能新建图层,而您的可以,我用的是CS6,是版本不对吗

  32. 我怎么能给您发图片?

  33. 老韩,看完教程我有一点比较困惑,为什么不校正凹凸贴图,置换贴图等灰度文件呢?在制作这些贴图的时候应该也进行了gamma0.45的编码校正,图片被提亮了,如果不用gamma2.2把它校正回来的话,凹凸之类信息不是不正确了吗?

  34. 韩神,一个特别大的中庭为了使周围走廊什么的空间变亮需要用这个线性工作流吗?还有一个问题,玻璃材质总是表现不够好,不通透,但是透明度调高了又看不出玻璃的材质。谢谢~

  35. 您好,

    您的视频和帖子我都看了,但是还是有一个问题我没想明白。

    关于出高动态图的时候需要勾选(仅自适应 ),也就意味着vray渲染的时候得到高动态图,不进行颜色映射。因为屏幕是每通道8位,所以他显示高动态图也就会丢失暗部信息和亮部信息导致图面是暗的!

    其二,关于vray的颜色映射。颜色映射是类似于photo的camera raw吗?就是我不勾选(仅自适应),通过vray颜色映射成屏幕适应到屏幕,所以我的图像显示到屏幕上是被矫正压缩过的?还是类似ps的高动态调整工具进行调整图像的?也就是我通过vray颜色映射的图存储为高动态图像是否正确?

    (我自试了一下,我的结果是这样。1.当勾选仅自适应的时候,帧缓存中的图像特别黑,亮部区域浮点数相比较高,暗部很低。2.当没有勾选仅自适应的时候,帧缓存中图像亮很多,亮部浮点数相比低了一些,暗部则会高了一些。当我将两组图全存为hdr放入ps操作的时候感觉都是可以得到正常效果。)

  36. 韩大,现在vray默认勾选线性工作流是不是就解决问题了,就不用像以前一样该成线性工作流,亮度倍增1,暗度倍增1,伽马值4.84了???自己试验了下好像没差,想找你确认下。。。

  37. 请问一下材质贴图需要整体在PS里用色阶降低2.2吗?然后3DMAX是不是需要勾选启用Gamma/LUT校正呢? 如果这样的话那只需要打一盏灯画面就亮了阿

    • @阿宇哦 不需要使用PS降贴图。3ds Max 2014 + V-Ray 2.4 以上默认参数好像就是对的,对,就是要勾选 Gamma/LUT校正,然后就对了。

      • @韩世麟 我是用的3DMAX2014和VR2.4版本的,可是我勾选Gamma校正后整体画面都提亮了,难道勾提亮后这就是正常的颜色吗?感觉室内灯光没有层次感。其他的什么都不用调吗?

        • @阿宇哦 说实话,其实亮了以后才是对的,只不过咱们看暗的版本看得太习惯了。

          2014版的3dmax,vray2.4. 只要在3d的首选项里,勾选启用gamma/lut correction ,gamma 2.2。然后剩下两个勾可以勾也可以不勾(只是影响你在界面里看到的效果,不影响渲染数据),我的建议是勾选影响材质编辑器,不勾选影响颜色选择器。然后在vray的color mapping面板,默认参数就可以,线性曝光,亮部倍增1,暗部倍增1,gamma2.2,mode若是选择color mapping only,就保存32位图(推荐);mode若是选择color mapping and gamma,就保存8位图。

          在这个基础上再去做灯的层次。

          当然了,如果你很习惯老版本的做法,其实也无伤大雅,因为毕竟我们要的是最终的效果,你喜欢什么样的层次感,你都可以自己来调整。

  38. 韩老师,请问一下mode和color mapping only还有color mapping and gamma 这三个英文指的是什么在哪里?英文的有点看不明白。。。

  39. vary3.4线性工作流似乎没地方匹配,缺颜色贴图的选项.

  40. VFS 3.4中好像對gamma有改進 但是又讓我困惑 為什麼gamma的選項會跑到材質編輯 而且各個層又有獨立的線性工作選項? 像是反射層 跟漫反射層 為什麼都有線性工作選項? 那我要怎麼做才能有正確的效果?

    • @Evil_Jagura 3.4的话非常简单,只要默认,参数都是正确的线性工作流。如果是2.0编辑过的老场景,需要使用3.4的wipe功能抹掉所有老参数。这时候就是正确的gamma处理。无论存8还是存32都是对的,V-Ray会自动做调整。

  41. 韩大大对知识理解好透彻,而且还能说的很明白,对我帮助很大,感谢

Leave a Reply