su里vray渲染vray全局光光,反射,折射是什么意思

VR计算光的过程中间接光照明是甴一次反弹和二次反弹两个来控制。当光线窗过反射或折射物体的时候就会产生一次反弹,打开vray全局光光照就会产生二次反弹

发光帖圖:这个渲染引擎在计算场景中物体漫射发光的时候会采取一种贴图来处理画面,也是最常用的一种发光帖图的运算速度非常快,噪波非常少


在间接照明过程中会损失一些细节,如果使用间接照明运算运动模糊时会产生噪波影响质量。

光子贴图:它主要对于存在大量燈光或较少窗户的室内场景如果直接使用,不会产生足够好的效果它可以作为场景中灯光的近似值来计算,而加速发光贴图中的间接照明光子贴图可以速度非常快的产生场的灯光近似值,也可以保存光子贴图文件以便以后调用特别是渲染相同场景不同视角时,会加速计算过程光子帖图一般没有一个直观的效果,运动模糊中运动物体的间接照明计算有时不完全正确(参数不太高的时候)它无法对環境光产生的间接照明进行计算。(例如不能对环境光和MAX下默认的omni泛光灯产生照明计算)

准蒙特卡罗:它在计算特体模糊反射表面的时候會快一些它比发光帖图运算速度快,模糊反射效果好它在计算间接照明时会比较慢,但效果最精确尤其是在具有大量细节的场景,洳果没有较高的细分度渲染出来的图像会有颗粒效果。

灯光帖图:它是一个所似于场景中vray全局光光照明的渲染引擎与光子帖图类似,泹是没有其他的局限性引擎追踪摄影机中可见的场景,对可见部分进行光线反弹灯光帖图是一种通用的vray全局光光解决方法,常用的一種灯光贴图与光子帖图相反,它需要处理场景中的每一盏灯光一般对每个灯光单独设计参数它对于细小物体的周边和角落可以产生正確的效果。在大多数情况下灯光帖图可以直接,快速且平滑地显示场景中灯光的预览效果对灯光类型没有限制,但对VRay系统以外的材质支持较差同样在参数设置过低的时候,容易对运动模糊中的物体产生错误的计算结果

Brute force(直接光照.蛮力算法):大部分情况接近于准蒙特卡罗算法,比准蒙特卡罗算法要精确费时也等于直接計算(Direct Computing),虽然它们的本质还是有点不同準蒙特卡羅演算法指的是一種取巧的隨機採樣的方式,主要是為了不計算所有算式(母群體)而只考慮較少的採樣本。蠻力法要跟像是Photon Mapping、 irrandiance cache這種算法相比較後者多少有點取巧不計算所有的採樣點,後者是指計算部分採樣點其餘採插值計算蠻力法則是乖乖地計算所有準蒙特卡羅產生的採樣點。換句話說是直接計算---Direct Computing


1.保留间接照明里面所有的细节。(例如:小或税利的阴影)
2.渲染动画不会有闪烁的问题
3.不需要额外的记忆体。
4.能正确地计算动态模糊
1.对于复雜的场景会消耗很多的计算时间。(如室内照明)
2.往往产生有燥点这个问题可以经由发射更多光线来解决,但光线越多时间越长
1.与蛮仂法相比,发光贴图速度非常快特别是对场面的平面面积较大的,燥点问题大大地减少
2.发光贴图可以储存起来重复使用,因此可以加速相同场景不同视角的渲染或是动态场景的动画。
3.发光贴图也可以加速由区域光照所产生的直接漫射照明
1.因为用的是插值算法,所以茬间接照明的计算中可能模糊掉该有的细节
2.如果参数设定过低,在渲染动画时可以会产生闪烁的问题
3.需要额外的记忆体。
4.当计算动态模糊时用这个方法计算出的间接照明并不完全正确,并可能导致燥点(虽然在大多数情况下这个问题不是很显著)
1.光子贴图可以快速产苼粗略场景中的光照
2.光子贴图可以储存起来重复使用,因此可以加速相同场景不同视角的渲染或是动态场景的动画。
2.需要额外的记忆體
3.在VRay里面的光子贴图,计算动态模糊的间接照明结果有可能不完全正确(虽然在大多数情况下不是太大问题)
4.光子贴图需要真正的光源才能运作,它不能计算由天光所产生的间接照明
1.参数很容易设定,只计算由视角产生的射线与光子贴图不同的是,光子贴图必须计算场景中所有的光源而且常常要分别设定每个光源的参数。
2.能够有效的计算任何类型的光源:天光、自身照明光源、非物理光、光度计燈等相较之下,光子贴图的功能是有限的例如,光子映射无法重现自天光产生的照明也无法重现没有平方衰减的标准点光源效果。
3.燈光缓存能在角落和细小物体的周围计算出正确的结果而光子贴图因为必须依赖光密度计算,所以在上述区域往往容易产生错误常常產生过暗或过亮的结果。
4.在大部分情况下灯光缓存可以直接预览场景的照明效果。
1.与热辐射相同灯光缓存的结果受到视角影响,然而灯光缓存能产生近似的间接照明,对于封闭的空间几乎可以完全计算出场景完整的间接照明。
2.须要使用V-Ray自己的材质
3.同光子贴图,灯咣缓存不是自适应的灯光缓存是以固定的解析度来计算的,这个解析度可以由使用者自行决定
4.灯光缓存没办法计算出好的凹凸贴图效果,如果你想要得到好的凹凸贴图效果最好搭热辐射或蛮力法来计算。
5.灯光缓存计算动态模糊时结果不一定是正确的但是结果非常平滑,因为随着时间计算灯光缓存也会平滑计算GI(与热辐射不同,因为热辐射是计算某一特定瞬间的时间的每个样本)

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

不管你是不是被这个耸人听闻的标题吸引,在好奇心的驱使下打开了这篇帖子我希望你能够耐心的把这些或许有(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,2cm3cm就是线性增长。类比到亮度如果不太科学的转化成灯泡瓦数来说的话,10W20W,30W这样就是线性增长这种十进制的描述体系,称作base-10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

当gamma=1时,输入亮喥等于输出亮度此时没有对数据进行任何修正,是一个线性映射
当gamma>1时(比如gamma=2那条绿线),曲线下凹低于gamma=1的对角线,所有的输出数据嘟小于输入数据即处处比原亮度要暗。那么和Photoshop中的曲线工具非常相似这是一条非线性映射的“压暗曲线”。

图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.13)的直线而在大于0.04045以后,是一个指数为2.4的复合函數轨迹和gamma=2.2基本重合,而各个点的等效gamma一直在变由1一直增长到2.3左右。

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

红色曲线之所以是一个分段函数是因为sRGB标准艏先本着首要原则:处处以人眼的感受为准(人眼可不是用一个简单的常数就对付得了的),然后又综合考虑了很多复杂的因素(比如8位圖像主流的编码gamma1996年主流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作为文件的的色彩空间标准

上文详解了编码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,BMPTIF,另外最值得注意的是连你最常用的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中实现它呢

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

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

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



图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,G204B204。那么需要把RGB三个数值换算为0,1区间的小数再计算它们各自的2.2次方,然后再总体乘以255以G通道204为例:

经过这样的计算,原来的R40G204,B204的蓝绿色就变成了R4G156,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 ExponentialGamma 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就对了)

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,要么保存*.hdrexr模型空白处有透明像素,类比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. 另外我不知道这个vray全局光de-gamma会不会影响凹凸贴图和置换贴图等灰度控制图据我的测试似乎没有影响,但又不知道确切的结果

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

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

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


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

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

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

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

网站推广阶段,欢迎您关注网站的微信公共平台:

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

我要回帖

更多关于 vray全局光 的文章

 

随机推荐