由VRay for SketchUp参数面板说开去-7-间接照明

文/韩世麟

七、间接照明采样器

好啦,下面进入vray的重头戏:间接照明采样器和图像采样器,这兄弟俩一个负责计算光,一个负责计算图像。一个是灯光师,一个是画师,理解它们的参数的实际意义,将使你对时间和质量的平衡进行一个有效的把握。

本段所有知识,来自于Gnomon workshop的Chris Nichols的视频教程,我只是进行了转述。

虽然在参数面板自上而下的顺序上,讲到了图像采样器,但我仍然想把间接照明采样器提到前面来说,因为这涉及到vray实际的计算顺序。

间接照明采样器,参数面板如图:

GI,我在第二章已经介绍过它的概念,在这个参数面板中,GI特指间接照明(而非全局照明),即取消勾选后,就不会计算间接光照,只显示直接光照,假想生活中所有的光线只反弹一次,渲染的结果可想而知会是如下左图这样:

间接照明关闭后,阴影部分得不到任何的环境光照射,会呈现死黑,地面和物体本身也因为没有环境光而显得暗淡。

发散思维时间

关闭GI可以渲染出黑白分明的效果,除了可以制作特殊风格的效果图以外,还有一个很不错的功能,这个是本人原创哦,就是用来进行视线分析,请看下面的案例:

这是我们3年级时所做禅修中心方案的地形,地处山区,景区核心部位有一大佛像,像高90余米,当时的方案选址在佛像南部,模型右侧的山后,就是这个山坳里,还连带南部的一部分平缓地区:

地形平面图如下:

当时允许在蓝线框内任意选址,南北各有其特点,但是一个共同的要求是,和景区的佛像有视线关系,为了分析出场地内哪里能看到佛像,我在佛像半身标高处放置一红色vray泛光灯,让它去照亮场地的skp模型,同时关闭GI反弹。就分析出了能够看到半身佛像的区域,最终用这样的办法辅助确定了方案的选址。

图为渲染结果:

图为视线能及佛像且在红线内的方案用地范围:

这个视线分析的例子很典型,用这种方法分析复杂地形的视线关系非常精确。

反射焦散和折射焦散已经在前文简单的介绍过,通常是反射焦散不勾选,折射焦散勾选,为什么呢?因为反射焦散效果微妙,容易被人忽略,而折射焦散往往很抢眼。

下图为典型的反射焦散的例子:

金属圆环内圈形成了高亮的聚光,很抢眼,但是我更希望大家关注的是外圈那层细腻的光影,高反射度的物体,周边必然会引起较明显光影的变化,在实际设计中,有一种反射焦散极为生动,下图为卒姆托瓦尔斯温泉浴场露天浴池的墙面,这种光影效果,我们在生活中习以为常,以致见怪不怪,但是对表达光影氛围却非常重要。

想要这种效果,必须依靠反射焦散命令,材质的反射度,光滑度调得再高,没有用,那里只管材质反射到什么东西,看起来是什么样子,是个视觉上的效果,和光能传递没有关系。

折射焦散在生活中给人的印象更为深刻,因为它往往表现为强烈的聚光,以下是生活中的折射焦散:

野外生存,冰透镜引火

在vray中,我们可以为透明物体设置折射率,即IOR值,1为真空的折射率,光线穿过不发生偏移,水为1.33,玻璃由1.5~1.9不等,vray默认1.55,这个折射率控制透过折射物体的表面能够看到什么,同材质反射,这也只是个视觉效果,并且,vray中的折射是白光折射,即从红光到紫光一视同仁,一同折射,并不由波长不同而有所变化,不存在色散现象,举个例子就是说一束白光通过三棱镜,也不会有七色光的。在这一点上,maxwell就更胜一筹了,它的渲染体系就是基于波长,所以它可以精确地渲染出真实的色散效果。

材质的折射只是图案而已,并不影响光能传递,但vray默认是勾选折射焦散的,可是想渲染折射焦散还要把默认不勾选的焦散卷展栏打开,真乱。

而且,而且,由于skp的先天不足,他不能形成真正连续光滑的曲面,这点和rhino是完全不同,所以想用skp+vray模拟现实中那种折射焦散基本可以说是不可能的,好在建筑学用不着太多这种技巧。工业设计和室内设计的同学肯定还得用rhino或3ds。

关于这两个焦散,我只能讲讲概念,因为建筑学上用的实在是不多,我自己也没有很多经验,只是希望读者能够通过这一点提示,找到一些表现的思路,具体案例和教程,网上其实很多的,可以具体问题,具体研究。

后期处理控制组

这一组的最常用的功能,我认为是控制色溢,什么是色溢呢?我个人理解是这样的,在计算间接光照时,每一个反射面都看做是新的光源。举个例子,一块红色的板子,为什么是红色的?因为它反射红光,吸收其他色光,那么从实质上来讲它此时就变成了一个红色的光源,尽管光很弱,但还是会体现出来,生活中的确是如此,但是这个很弱的光有多弱?vray默认是有一个常数的,在这里就可以修改这个值对图面的影响力。如下图所示,这是我模拟我曾经遇到的一个场景,模型如下,这样一个空间:

右侧是玻璃,下侧是绿色铺地,当时渲染时遇到一个问题,明明是绿地白墙,但是默认参数渲染出来整个场景绿的一塌糊涂,房顶全绿了,我知道的确绿色的地面反射了大量的绿光,但是实在超出了真实感的限度。如下:

当时毫无办法,后来知道是色溢,于是调整这个参数:

改为0.5后效果好了很多:

剩下的三个选项,对比度基数尽量别动,对比度就是调整对比度,每帧保存贴图没用过,难道是动画时有用?不知道。

首次引擎是用于计算首次间接光反弹的引擎,这里可选的有发光贴图,和确定性蒙特卡罗两种。你选择后,就会出现相应的卷展栏。

二次引擎是用于计算剩下的间接光反弹的引擎,这里常用的有确定性蒙特卡罗,灯光缓冲。

首次引擎和二次引擎里都有光子贴图,光子贴图引擎对光源有特殊要求,适合做动画,效果和运算效率很差,肯定不用。首次不是发光贴图,就是蒙特卡罗,妥妥的。二次引擎你还有第三个选择:关掉不开。

接下来是间接照明采样器里最重要的讲解了,各发光引擎参数意义。

先从参数最简单的确定性蒙特卡罗开始。参数面板如下:

当首次和二次引擎都使用确定性蒙特卡罗时,上图的两个参数都可以调整,当二次引擎不使用确定性蒙特卡罗时,二次反弹选项会变灰,不可使用。二次反弹决定了计算间接光照时,光线追踪的最大反弹次数,越大越真实啦。3次的默认值已经不错。

下面来引入vray的核心概念之一:细分

细分(Subdivision)在vray参数面板中非常多见,它的含义如下图所示:

这张图来自于Chris Nichols的视频教程,让我们对他表示由衷的感谢,图中每一个大方块,也就是四分之一的图面,代表一个光源样本,数字代表细分那一栏设置的数值,小方块是形象的表示“细分”分的有多“细”,大方块里的小块数量代表光线数量。你可以看到,细分这个参数是呈现平方关系的,比如说我的细分值是4,那么就是我的每一个光样本,由16条散射光所搜索到的数值贡献而成,如下图:

图中有16条散射光线。散射光线和入射光线与物体表面相接触的地方,就是一个光样本。

如果细分设为8,则如下图:

图中有64条散射光线,即每个光样本由64个数值贡献而成。

以此类推,如果细分值设置为16,则如下图:

图中每个光样本由256个散射光线贡献而成。

更狠一点,细分32:

一共1024条散射光线。可以看到此时已经非常接近半球形了,意味着和真实效果会很接近。用确定性蒙特卡罗引擎,细分设置到32的话,基本可以达到完美的渲染效果。

但是刚才只是探讨了一个光样本,渲染一幅图,要计算多少个光样本呢?对于确定性蒙特卡罗来说,每个像素,需要一个光样本,也就是说渲染一幅800X600的小图,就要计算480000个光样本,若细分为16,每个样本要计算256条散射光,若二次反弹为3,则光线充足位置的光线还会进行3次反弹,由此可见计算量之大。这也就是为什么使用确定性蒙特卡罗引擎会比较慢。但是这个引擎仍有其优化之处,它和发光贴图一样,都是基于镜头采样的,基于镜头采样说白了就是看得见的我计算,看不见的我就不计算,它实际上是从镜头射出反向光线,进行散射,由散射光去查找环境中的光源,确定这个点受多强的光照,什么颜色的光照,自己固有色又是什么,这样综合来确定这个点最终是什么颜色。由于确定性蒙特卡罗每个像素点的采样是各自独立的,所以用它渲染的图像会有颗粒的质感。

下面来看一个案例:

使用确定性蒙特卡罗作为单一引擎,不开抗锯齿功能,细分设为2,输出640X800,图面效果及渲染时间如下:

细分设为8,时间及效果如下:

细分设置为32,效果及时间如下:

对比一下细分8和细分32的局部细节:

可以看到右图表面的质感比左图要细腻得多,同样是颗粒感,右图的过渡比左图要平滑,杂色更少,当然以上两图如果开启了抗锯齿,效果都会提高不少。

确定性蒙特卡罗先讲到这里。它还有一些自己的特性,放后面说。

发光贴图引擎

刚才所讲的确定性蒙特卡罗引擎是每个像素采一个光样本,那么在它的“眼中”,一张图是2维的,计算量分布比较平均,我们可不可以把好钢用在刀刃上,把计算量全部用在细节上,其它的没有细节的东西一带而过呢?这个概念叫做优化计算,发光贴图引擎允许你这样做。

首先,它和确定性蒙特卡罗一样,都是基于镜头采样,也是看得见的计算,看不见的不计算。要明确一点,基于镜头采样只对建筑学表现图这种静帧渲染是好事,渲染技术更多的需要拿去做动画,基于镜头就会变成一个麻烦的事情了。

更优化的计算方式自然要求更复杂的参数设置,发光贴图参数面板如下:

这里又有一个新的概念了,作用非常像细分,它叫“比率(Rate)”,比率允许你进行比细分更加大范围的样本精度控制,它不以一个像素作为划分基础,它允许设置好多个个像素共用一个光样本(这叫不足采样under sampling),还允许在一个像素里“挤下”多个光样本(这被称为过度采样over sampling),图示如下:

仔细听哈,在这张图里,0那个方块的面积是一个像素,这是个8X8的棋盘格,上面一共有64个像素。

0代表在这一个像素里,有一个光样本(这个情形和确定性蒙特卡罗等价),1,这个像素被分成了4份,代表在这一个像素里,挤了4个光样本;-1,代表每个像素分到了1/4个光样本,就是4个像素共用一个样本;-2,代表每个像素只分得了16分之一个样本,16个像素共用一个光样本。

规律是什么呢,这个参数其实就是一个以4为底数的指数参数,4的0次方,是1,就是1像素1样本;4的1次方,1像素4样本。4的-2次方,1/16,1个像素1/16个样本,16个像素,一个样本。

所以呢,在最小样本处,我们一般填-4,-3这种值,最大样本处,正图我们一般填-1,0,测试时一般还是-3左右。

这个最大最小又是什么意思呢?

它的意思是对样本进行优化的采集,有细节的地方,使用最大的那个参数,没细节的地方,比如地面,使用最小的那个参数。

那什么是细节呢?

1就是图案复杂的地方(颜色突变多的地方,由颜色阈值控制)

2边边角角,表面转折大的地方(法线变化速度快的地方,由法线阈值控制)

3缝隙里(两表面距离近的地方,由距离阈值控制)。

那么这3个阈值有没有必要背,个人觉得不用,每次渲染的时候,通过这里读取就可以了,load一个基础参数,再去改其它的。

半球细分,默认值50,已经很高了,这里对应确定性蒙特卡罗的细分,50就是2500条散射光线,已经非常多了。

但是在渲染室内时,往往50还不够,房顶,背光的窗户上,容易有这样的斑,使用vray渲染的作品,最常见的瑕疵就是这种,我增加下对比度,会看得更清楚些:

针对这个问题,把半球细分提高到80,会有所缓解:

提高半球细分,会降低这种班,但是渲染时间是成平方极增加的。

想要更好地解决,就要把后面那个“样本”一同提高,样本提高到50:

样本,其实是插补样本,发光贴图允许不足采样,那么就会有绝大多数的像素分不到一个完整的样本,那么这些得不到样本的像素的颜色就由周围的样本进行插值计算得出,比如一个平整的表面,通常会是-3的采样精度,就是64个像素共用一个样本,如下图,一个亮点是一个样本,可以看到有大量的像素上没有样本,但是渲染的结果却很平滑。

这就好像每个样本都和周围的样本去进行渐变过渡,这样来生成彼此们之间的光照数据,可以想象,用这种方法渲染出来的平整表面,肯定要比确定性蒙特卡罗要平滑干净的多,因为可供参考的样本大量减少,颜色的过渡由计算机用插值计算填补了。

那么这个默认值为20的插补样本设置越低,则在不足采样的地方颜色过渡越不平滑,比如如果设为1,则颜色过渡像鳞片般生硬:

但是如果设置的太高,则会把细节部分细腻的光影变化都覆盖掉。光线充足的话,默认20建议不要动。

显示计算阶段,默认是勾选的,勾选的话,在帧缓存里会显示一遍遍的跑小方块的过程,每跑一编,就是计算了一个比率的采样级别,比如最小比率是-3,最大比率是0,那么第一遍先计算-3,然后是-2,然后是-1,然后是0,逐渐增加精度,每遍的速度也会变慢,在这里会显示计算到了哪一步:

1 of 4,这就是说从-3,到0,第一遍跑-3,然后-2,-1,直到0跑完为止。现在图中正在跑-3。

显示样本,勾选的话,就不会出图,而是出一张样本分布图,帮助分析设置是否得当。比如还是这个案例,勾选显示样本:

可以看到在左侧方块的下部,样本非常密集,基本上每个像素都有样本,是0的比率,球的下部由于进入了距离阈值的范围,样本比周围平地要密集。

这里我把距离阈值增大,这个值越大,就会把越大的距离判定为“缝隙”,从而增加采样比率,距离阈值由0.1,调整为0.5,可以预见到,球底部的样本会增多。

细节对比图如下:

显示直接光照,默认没有勾选,好像新版的默认是勾选了,我的经验是只要首次引擎用发光贴图,第一个就要把它勾上,因为如果不显示直接光照,那么场景在渲染帧缓存窗口会非常黯淡,会影响你在前期调整光线时的判断。勾选的话,在调光时可以第一时间预览到画面的亮度。

由图可见,勾选显示直接光照后,在刚刚开始渲染时就能预见到结果是否亮度适中,在反复调整时非常方便。

现在我们可以对比一下,使用确定性蒙特卡罗细分32,和使用发光贴图,-3到0,细分50

可以看到远看效果,两者在高参数下可谓旗鼓相当,但是细看则各有各的优势和缺点,但是就渲染时间来说,发光贴图的优势就很大了,这得益于非常优化的样本分布配置,计算都给了细节,好钢用在了刀刃上。

接下来介绍二次反弹的常用引擎,前文稍稍提过,二次反弹的常用引擎有两个,一个是确定性蒙特卡罗,我们已经讲过,另外一个是灯光缓冲。

首先来说一下二次反弹的意义,渲染软件追求模拟真实,首次反弹引擎的作用是把物体的边角,缝隙,颜色反差大的这些地方的光影变化都收集到,话句话说就是首次引擎负责细部的光影。但是仅仅这样还不够真实,现实中光线的反弹次数是“无数次的”,二次引擎的作用就是去尽可能收集这些不断反弹的,不断衰减的光线对于图面的贡献,来模拟真实。比如确定性蒙特卡罗就可以设定反弹次数,默认是3次,越高就越真实,当然越高计算量就越大。

使用确定性蒙特卡罗,会得到非常精确细腻的二次反弹结果,但是计算效率较低,得到相近的效果时间花费较大。但是确定性蒙特卡罗引擎有一个显著的特点,就是对内存的占用较小,它不像发光贴图,灯光缓冲这样,把发光样本全部积累在内存中,整张图计算完再进行调用,而是在出图时随时计算,每次只计算一小块,算完一块,立刻释放内存,再计算下一块:这个引擎可能对于一些电脑配置不够高,但是模型又比较大的同学是个可选办法,有的模型渲染时会因为内存不足而崩溃,这时候就可以尝试用确定性蒙特卡罗同时作为首次和二次引擎。

接下来介绍灯光缓冲引擎,灯光缓冲引擎是一个非常高效且易控制的二次引擎,面板如下:

之所以高效,是因为它和发光贴图一样,是基于相机采样的,工作原理是:它从相机处发射出样本,均匀分布于整个图面,去收集它所反弹到的物体表面的颜色信息,事实上这个引擎甚至没有控制反弹次数的参数,它只会让样本在空间中不断的反弹,直到其对图面的贡献可以忽略不计为止,但是在计算时间上却非常非常高效,几乎可以认为是一个完美的二次引擎。但是由于它是基于相机采样的,就导致了离相机近的地方样本稠密,离相机远的地方样本稀疏,假设在离相机非常非常非常远的地方,有一个点光源,这个引擎射出的样本,有可能打中这个光源,使其在图面上得到表现,更大的可能是打不中它,把它忽略掉。当然这只是理论缺陷,实际应用中不会困扰到我们。

灯光缓冲的主要参数有七个:

细分:如同前文确定性蒙特卡罗细分,发光贴图的半球细分一样,样本细分数即是参数的平方,1000即代表1000X1000个样本从相机射出。通常测试渲染设置200-300,正图渲染1000-1200。

尺度,取样大小这两个参数是一起调节的,尺度有两个选项:屏幕尺度或世界尺度,屏幕尺度用于静帧表现图,世界尺度用于漫游动画,一般我们不动这两个选项,如真的想提高参数,请把取样大小设为0.01,计算量会精细4倍,时间也会变成4倍。

线程数量,这个参数由你的cpu决定,如果是双核处理器,就设置成2,如果是双核超线程处理器就设置4,如果是现在比较热门的i7处理器,高达4核8线程,每个核心都是两个线程,所以就设置成8。如果你不知道自己的计算机是几核几线程,简单来说这个数字和你渲染时跑来跑去的小方块数量是一致的。下图就是8线程渲染,8个小方块,很高效。

储存直接光,这个参数很有意思,要知道其实灯光缓冲引擎是可以作为首次引擎进行渲染的,如果把首次引擎和二次引擎都设置成灯光缓冲,并且取消储存直接光的勾选,则可以得到一个还不错的渲染结果:

该渲染方式非常快速,这张800X600的汽车模型图片在我的两线程笔记本电脑上耗时仅29秒,但缺陷是远处的地面不够平整,阴影里也有斑点。

如果勾选储存直接光,会生成这样的结果:

可以看到阴影全部变得乱糟糟的,这个参数意义何在呢?

这个参数在实际应用中是很有用处的,可以节省光采样的时间,在实际应用中,如果不是特别受内存限制的话,我们一般会采用发光贴图作为首次引擎,灯光缓冲作为二次引擎,在计算时,V-ray会先计算二次反弹,即灯光缓冲,就是这样的画面,像点阵一样:

灯光缓冲建立完后,会进行发光贴图的计算。

我们可以注意到,在建立灯光缓冲时,已经采集了大量的光样本,而发光贴图仍然要再次重新采集一遍,如果勾选了储存直接光照,就会把灯光缓冲里采集到的直接光照信息直接转交给首次引擎——发光贴图去使用,避免了数据的重复计算。这样一来,在计算发光贴图时,速度会大幅增加。如上的这个模型,图幅1280X960,发光贴图参数-3,0,灯光缓冲800,勾选储存直接光照,光采样用时1分30秒,不勾选储存直接光照,光采样用时1分51秒,这增加的20秒便是重复计算的时间。这个选项勾选与否,对于光采样这个阶段大约会影响20%左右的时间。勾选后,速度快了,但会在一些细节角落出现瑕疵,一般来说是可以接受的。

最后是显示计算阶段和自适应,勾选自适应后,灯光缓冲会根据空间,细节对采样进行一定的取舍,而不是将其视为2d图像,勾选与否差别不是太大,因为毕竟是二次反弹,效果比较细微。

以上,间接照明采样器讲解完毕。

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

韩世麟

站长,天津大学研究生毕业,天津人
存为书签: 本文的固定链接.

36 条评论

  1. 一边看您教程一边对着vray窗口看,惊恐地发现2.0咋没有确定性蒙特卡洛!多了个brute force是个啥!

  2. 那除了性能方面的因素,怎么分情况选择不同的渲染引擎呢

  3. vray2.0灯光缓冲里面有个过程数是不是就是上面说的线程数量,我的是4核8线程的,我设定的是4,但渲染的时候还是8个框子,这个参数有什么影响吗?

  4. 间接照明引擎在新版的VRAY中的名称都不一样了。WHY?

  5. 那个关闭GI做视线分析的办法很有启发性,以前做设计的时候想要做视线分析,但是总觉得不够科学,看了这个案例还是很佩服老韩的

  6. 韩神解决了我很多原来迷惑的东西,网上也找不到答案的东西,真的非常感谢

  7. 韩神,VFS2.0的灯光缓存无法从文件?

  8. 师兄,为什么我的VFS2.0里面的options里面只有一个参数文件?

  9. 韩学长,二次发光引擎计算的是间接光的第二次反弹,那么首次发光引擎计算的是直接光还是间接光的第一次反弹?

  10. 哦,我明白了,谢谢韩学长!

  11. 学长,“色溢”我查了一下,是超出了色域值的意思。就是显示了RGB比CMYK多的那部分。

  12. 老师 首次反弹和二次反弹 采样时 都是依据光线追踪么??

  13. 啊呀,怎么回事,做个系列里边的插图怎么显示不出来啊!看了好多篇文章都是这样啊

  14. 赶快想想办法啊博主,求求你们了啊,这几篇文章对我这样的初学者很重要的,很想研究一下可惜图片没有了啊

  15. 文中说半球细分后面的“样本”一起提高到50指的是什么参数,是半球细分后面的插值采样还是帧插值采样? 我建立了一个图中的室内高3500,关闭天光。边上打了一盏矩形光源默认亮度改为10,打开了默认参数的AO,自己试了试半球细分和插值采样和帧插值采样,途中插值采样调50和调20差别并不是很大,同样是灰度的生硬,并没有像文中效果那么明显,有文中的模型文件吗 我想试试

    • @hu2322985 文中Vray是老版本,1.05。目前的版本这种现象已经极大改善了。样本是插值样本的意思,英文命令是interp sample。

      • @韩世麟 @韩世麟 韩哥我对渲染出图到底使用什么样的组合有很大的疑问,想向你请教一下。比如你做的渲染照片级的图两项都是用的brute force?还是说Irradiance MAP+brute force或者就是Irradiance MAP+Light cache。我看了你一些列教程,特别是建筑剖面的,亮相都用brute force细分我给到100的话有贴图的建筑模型渲染24小时只能走10%不到,感觉速度超慢。所以我想请教韩哥你做照片级模型时一般使用什么样的组合。谢谢。

  16. 韩哥我想问下 那三个阈值参数是数值越大代表相邻部分差的越多还是数值越大代表相邻的差的越小?

  17. 韩神,我是初次学v-ray,学得也是3.4版的。学的教程是你发布的《V-Ray 3.4 for SketchUp正式版测评(入门教程)》。现在在看你发布的2.0的教程,在该讲的时候,我自己试着模仿处理了一下色溢问题,发现和2.0版的有很大不同。也碰到了问题。我想把我的处理方式和您说说,看看我是否是对的,或者有更好的方式。我是看图说话的方式提问的,在这发表评论的窗口发不了图片。还有就是感些你有件回复我之前提的问题,我在回复你邮件的同时,我又在邮件田间了一些新问题和你探讨。先在我也想把在这讲碰到的问题以及我的处理方式,通过图解的方式以邮件的形式发给您。您有空的话话,和我探讨一下。

发表评论