【Vray教程】Vray最佳设定:Irradiance Map篇

2 八月, 2014
236
0

哈啰!大家好~我们继续讨论在V-ray里面如何设置GI, 在上个教学里面, 我们讨论到间接照明的原理, 我们也学到什么是全局照明以及为什么需要全局照明. 本教学, 我们将讨论原理, 参数与用Brute Force 和Irradiance Map做为第二级的GI反弹演算法.

这篇即将回答以下问题:
Brute force GI引擎运作的方式?
Quasi-Monte Carlo GI引擎跑去哪里了?
Irradiance Map演算法运作的方式
irradiance map在3D空间中看起来是如何的?
IM怎样侦测场景中的细节?
什么是IM的prepass?
为什么我们不能把Min Max Rate设为同一个数值?
Detail enhancement opt​​ion细节增强的选项是怎样运作的?
什么是Multipass?
怎样的参数可以达到平滑的, 但却有很多细节的Irradiance Map?
为什么算图结果里面有亮亮的点, 要怎样消除掉?

不会针对细节来调整采样(Indifferent)的Brute force
Brute force GI 是一种基本的演算法, 使用固定数量的光线(Rays) ,由原始的光源打到场景中的某点, 在该点使用固定数量的光线(Rays)反射. 如果你还记得的话,我们认为当光线自光源发射出来, 打到场景中的物件表面, 会再分裂成很多光线, 打到场景中其它物件. 当然了, 越多从间接光源产生的反弹光线(diffusely reflected rays) 那最终的算图结果杂讯就会越少.

vray-Irradiance-02

在间接照明选单里面的Brute force GI参数, 这里有两个参数可调: Sebdivs与Secondary bounces.

Subdivs这个参数意思很简单就是反射射线的数目. Subdivs的数值不等于实际的二级射线的数目, 而是该数值的平方, 也就是说Subdivs=2, 就表示原始的光会在反射后分裂为4, 如果这个数值是4, 那二级光线就会是16…依此类推.

Secondary bounces这个参数会指定光线会反弹几次, 只有在Brute force演算法最为第二级反弹的演算法的时候才会出现.

如果Brute force设定在第一级GI反弹, 那bounces parameter这个参数就会变的没有作用. Brute force演算法并非自适应的, 它只会计算每个像素的GI, 并不会依照复杂度, 颜色, 与物件的细节来改变采样的细致程度. 因此, 很耗费电脑运算资源, 不管是场景中重要的画面, 还是不重要的地方都以相同的运算来处理.也难外它会被称为Brute force 蛮力法. 我们也可以知道Brute force的计算是以Quasi-Monte Carlo (QMC)的方法来计算的, 这也是Vray早期版本的名称, 有时候会让旧用户搞混, 他们还在找Quasi -Monte Carlo (QMC)在哪里.

这种蛮力的演算法是很不合理的, 它会用很漫长的时间算图, 即使是很简单的场景也一样. 因此, 不值的用这种引擎在第一级或是第二级GI引擎. brute force这样的演算法只会在特殊状况会用到, 当其它算图演算法, 因其自适应性导致无法计算微小的细节, 这时候就会需要用到brute force演算法.

Adaptive Irradiance map
Irradiance map是一种自适应(adaptive)的演算法, 用来渲染全局照明的反弹​​效果.它的主要功能是找到场景中重要的区域, 计算GI与对GI采样比较稀疏的地区以内插的方式补充起来. 为了要了解Irradiance map演算法运作的方式, 让我们来看看它产生的图—-称为irradiance map.

vray-Irradiance-03

这个测试算图显示Irradiance map的采样, 这张图显示大量的白点, 呈现GI采样的位置. 在场景细节比较多的地方, 会有比较多白点, 在平坦的区域白点比较少.

这张测试图, 之前的GI教学有用过, 为了清楚说明, 我们把纹理贴图先拿掉, 让我们不会受到干扰. 请仔细看最密的白点区域, 这是房子的内部, 圆角的ChamferBox, 每个靠近的位置或是球面对方块的那的地方, 还有方块跟墙的接触面, 这些地方有很多GI细节表现.

这些是irradiance map的点, 这些点包含了该点的GI的颜色与亮度, 其他区域则填满了灰色, 灰色区域是不含有GI资讯的部分. 但是, 会由irradiance map以内插的方式填充起来. 换句话说, Irradiance map只会计算最重要的区域而那些不重要被忽略的区域, 没有计算, 只以内插的方式算出来, 拿那些有计算的点来推算出亮度与颜色.

很显然, Irradiance map的自适应性就是在这里了. 相对于Brute force (以下简称BF), Irradiance map (以下简称IM)不会计算场景中所有的像素, 它只会计算重要的区域, 因为这样能够节省电脑运算资源.

vray-Irradiance-05

irradiance map的3D呈现出采样的分布, 在摄影机机看不到的区域就完全不会有采样.我们可以用Irradiance map viewer检视器来查看, 我们可以很清楚地看到不只是irradiance map的3D结构, 我们还知道跟摄影机的观看角度有关, 特别是在摄影机无法看到的那面, 完全没有GI采样点.

vray-Irradiance-06

在算图的时候会跳出算图视窗, 这里显示是IM计算的状态, 是4段prepass的第一段. IM的计算, 会用很优雅的方式找寻场景中需要放置GI采样的位置, 它会用到之前我们提到的低采样(undersampling)的技巧. 一开始的时候, 整个场景的GI会低解析度的方式计算, 通常会比算图的解析度要低, 这个计算不只是自适应的, 像在用BF演算法算图那样, 之后, 利用第一轮计算取得的资料, 决定出最重要的区域, 对该区域进行精确的算图.

于是就用更高解析度的方式算图, 但只针对需要的区域, 这样个步骤会重覆几次每一次都增加解析度, 直到达到你在IM里面所指定的最高解析度. IM算图的最基与最高解析度, 每次计算的差别都是以2的倍数增加解析度, 也就是原本低解析度的四倍的像素, 例如: 算图解析度设定为800X450, 下一步的低采样就会是400X225, 在下一步就是用200X113…等等. 请注意, IM可以进行低采样与过度采样也就是说IM可以计算比实际算图解析度少或是多的解析度(解析度的差异都是2的倍数).

每一次GI算图的阶段称为pass, 那个用来决定重要区域的pass称为Prepass. 这个pass计算的过程, 是当下是在哪个阶段,可以从算图视窗观察到, 会在开始算图的时候跳出来讯息.

vray-Irradiance-07

四张显示采样的算图效果. 在Irradiance map里面有四个, 逐步的prepass. 第一步不会对场景中比较细节多的地方添加高密度的采样, 其他三个步骤就会. 最后一次的prepass显示最终采样的分布状况, 每个算图都显示了IM解析度. 在本例里面IM的最大解析度是800X450, 跟算图最终解析度一样. 为了完全找到重要区域, 首先会用三个低采样的prepasses, 以低的解析度来计算: 100X56, 200X113, 400X225, 跟最后一个的prepas一起, 总共有四个IM的prepass.

请看第一个prepass, 你可能会发现, 它没有找到任何区域, 整个影像跟BF演算法的精度一样. 但是在第三与第四张影像就完全不同, IM演算法会找场景中细节较多的区域, 然后在那些区域洒下GI采样. 而在平坦没有细节的区域减少GI采样, 不重要的区域例如墙, 平坦的表面…等等. 这些地方只给予少量的GI采样, 然后之后用内插的方式计算出来. 而且, 我们也可以很快地看到, 在不同的prepass采样的大小有不同. 因为高解析度的IM算图, 会有比较小的单一采样数值, 也会有比较精细, 更精确的IM. 我们可以很容易猜出GI map 由IM算出来的, 即便是最终解析度的来算图, 不使用prepass, 就像BF演算法那样, 最终的算图时间会跟BF一样冗长.

算图的时候勾选显示IM采样, 这里看起来好像没有采样点. 事实上有很多很密的采样点, 很平均地放置在场景中, 即便是在那平坦, 不重要的区域.

vray-Irradiance-08

这张图显示irradiance map, 在最终算图之前算了一次prepass. 仔细看看, 好像没有采样, 事实上正好相反, 在这张图里面, 全部都是采样. 这些采样紧紧地靠在一起.因此, IM 并没有在某些区域增加密度, 它只是从摄影机的角度把场景布满采样而已, 为了取得如此密的采样, 耗费了许多计算资源. 特别是, 之前所有四次的prepass, 才消耗了五分钟, 而这次才一个pass就花费了50分钟.

差别很明显, 不要误会第二的例子, 它的品质还是比第一个例子要好很多. 因为很密的采样, 而场景中不重要的区域, 通常就是那些平坦的面, 只具有单一颜色, 而该GI的颜色, 很均匀. 在两个例子里面, 都没有细节. 然而, 场景中重要的区域, 有的会, 有的不会用自适应来计算有高度的细节. 这也是为什么没有必要花费10倍的电脑运算资源在计算那些平坦的区域, 因为做出来的结果是一样的. 我们相信所花费的时间, 使用IM与使用BF来比较, 差异是很明显的.

一旦计算场景中重要的采样点(含有GI颜色资讯)计算出来了, 那些缺乏GI采样点的区域也开始进行内插计算出来. 而在以BF计算的那个例子里面, 在算图的时候, 进行计算固定数量的二级光线, 以半球的方向发射. 在前一篇的教学有提到.

IM的基本参数
对于那些IM演算法认为重要的区域, 每个IM采样点的二级射线的数目, 对整个场景的细节程度决定的解析度. 这些参数都可在V-Ray:: Irradiance map选单中找到.

这是V-Ray:: Irradiance map选单, 显示每个参数, 预设的数值可用下拉式选单找到. 基本的参数包含了Min rate, Max rate, HSph, Subdivs, Interp. samples, Clr thesh, Nrm thresh , Dist. thresh, Interp. Frames . 选项区域则提供了Show calc. phase, Show direct light, 与Show samples parameter. 进阶选项则有zones as Detail enhancement, Advanced options, Mode,与On render end.

vray-Irradiance-09

目前的预设值, 提供IM 主选单的快速设定参数, 下拉选单里面可以找到每种预设值的类型, 这些预设值从名称你就可以明白它的意思: Very low, Low, Medium, Medium animation, High, High animation, Very high. 然后, 最重要的是客制化的选项, 让你可以调整IM的每项参数, IM是以High做为预设选项.

下一个, 是基本参数选项. Min rate 决定了GI的第一次prepass的解析度. Max rate 决定了最终GI算图的解析度或是最后一次prepass的解析度.

我们已经知道了, IM演算法会搜寻到场景中细节最多的区域. 如果你看以上的范例, 你会看到rate的数值, 决定了当前的prepass解析度.

当rate等于0的时候, 表示GI解析度跟最终算图的解析度是一样的. 当Rate=-1的时候, 表示GI的计算会是最终解析度的一半. 当Rate=-2, 表示GI的计算会是最终解析度的1/4. 同理, 当rate=1的时候, GI计算的解析度会是最终影像的解析度的两倍, 这跟采样不足与过度采样计算反锯齿的观念是完全一样的. V-Ray Adaptive subdivision演算法也是

Irradiance Map的演算法很具有弹性也是高科技的工具, 尽管逻辑上面把最终的GI prepass以最终算图的解析度来设定. 也就是Max rate=0, 其实没这个必要, 因为在品质上仅有很小的差异, 却会造成计算量的巨大负担.

vray-Irradiance-10

用不同的Min Max Rate来进行场景测试. 第一张图效果很棒, 算图也最久. 第二张算图, 则是可接受的品质, 却只花了1/5的算图时间.第一张影像IM的计算效果, 在球的下面有清楚与较密集的阴影, 跟第二张图片相比. 同时在cube底下有清楚且锐利的阴影, 特别在左方的角落地方, 这是因为在第一张IM有很大量的小细节, 而第二张比较小解析度的IM. 然而, 算图时间第一张在max rate=0的时候花费的时间是(max rate=-3)的那张的五倍时间.

5分钟又3秒跟57秒相比, 高解析度或更复杂的场景的话, IM的效果会更加明显. 同时, 高解析度例如2500X3500像素, 两者的算图差异会更不容易看出来,因为最终的解析度已经提高了. 除此之外, 这种小的模糊问题可以在几分钟内以2D软体修掉. 实际上, Min rate -5 与Max rate -3已经够好了, 效果很接近照片写实的效果, 这样的参数应该做为Vray的起始参数.

HSph. Subdivs的参数是GI射线的数目, 从场景物件的表面反射出来的. 这个参数决定了有多少的diffuse light光线, 在每个IM二级点上面. 就像我们之前提到到, 方向是以半球的方向发射. 这个跟BF演算法里面的Subdivs参数很类似, 大部分的情况, Subdivs=80对大部分的状况都很够用了. Samples是决定了IM内差计算的品质. Interp. Samples决定了在不重要的部位, 灰色部位的内插品质. 内插的采样位高, 内插就越高, 会产生越模糊的GI; 相反的, 如果内插采样越低, 影像就比较不会模糊, 但是容易会有杂讯产生. 预设的内插数值为20, 已经很足够不需要改变.

我们已经知道, IM会帮助prepass来辨识出场景中细节的区域. IM能做到这点全是因为prepass所得的资讯, 而且是根据三大细节属性: 第一是颜色, 法线的差异以及物件的相对位置. 在IM里面, 这些参数是分别以Clr thresh, Nrm thresh与Dist thresh来控制的.

Clr thresh控制颜色的阀值, 这个数值越高, IM就越不容易察觉颜色差异, 把数值变小, 敏感度就会提高,会产生更细致的算图效果. 把这个数值设定为0.3 对大部分的场景都很适合.

Nrm thresh法线的阀值, 用来控制IM对场景几何体, 特别是法线的变化的敏感部. 把这个数值降低, 越多场景的细节会被视为重要区域, 也就能算出更高品质的影像. 将数值设为0.1, 适合大部分的场景.

Dist thresh定义了场景中相邻的几何体表面距离的阀值​​. 场景中相邻的表面距离越远, 就会被认为是越重要的区域, 因此可以算出越细致的图片. 请看以上例子你可以马上看到, Dist thresh与Nrm thresh两者的差异. 如果从Nrm thresh来看会决定场景中IM的密度, 而Dist thresh会决定物件与物件靠近的区域. 要注意的是, 当Dist thresh数值低的时候, 它只会考虑物件与物件之间比较小的距离, 因此就会减少IM 采样. 请注意这个参数跟Clr 与Nrm thresh是相反的, 后两者减少数值会增加算图品质, 这个参数设定为0.1 适用于大部分状况.

最后一个参数, 在Basic parameters那边. 也就是inactive Interp. Frames .这个参数控制了有几张irradiance maps, 从不同的frame 计算而来的Animation (prepass) 用来计算当前的动画frame上面. Animation ( rendering) mode, 我们在另辟专栏来讨论关于这点的设定.

V-Ray:: Irradiance map的选项, 让你可以清楚看到当前是在哪个IM prepass阶段显示GI的直接光照与prepass算图, 你可以查看到采样的位置. Show samples显示采样, 这些都只是帮助你看到状况, 并不会影响IM算图的效果.

下一个参数是Detail enhancement.
我们都知道IM的强项就是用低解析度在prepass的时候找到场景的重要细节区域. Option Detail enhancement的选项让你产生介于自适应的方法, 但是却有点是模糊的IM演算法的采样, 以及在细节区域采粗略的却又精确的Brute Force方法.

当你启动了Detail enhancement的选项, 还是会一如往常地在prepass的时候找寻场景中的细节区域, 但是在最后一个pass的计算, 当场景的细节资讯取得以后, Detail enhancement演算法就会开始作用. Detail enhancement基本上就是在重要的区域采用全解析度地, 用Brute Force来计算, 而不是用采样不足的方式计算(undersampling);其他区域(不重要的区域) 还是以正常的IM计算, 计算内插.

Detail enhancement的演算法用来决定场景中哪些重要区域的采样必须要计算, 是根据一种很类似AO的演算法, 但是跟AO不同是, Detail enhancement演算法会考量到光线的方向性(direction of light ).

要注意的是, 当启动Detail enhancement的时候, IM的功能只拿来用在决定场景中细节的区域, 而真正去计算细节区域的是用BF演算法, 既然知道这点, 如果你勾选了Detail enhancement, 我们就可以把所有的IM参数降到最低, 除了Interp. Samples的部分. 甚至可以把Interp. Samples设成比较高的数值, 当你勾选了这个选项, 其他像是Scale, Radius和Subdivs mult也可以让您设定.
Scale定义了Radius这个参数的使用单位. Radius是半球的半径,定义了BF从参考点的GI采样的计算, BF参考点的位置. 如前面所述, 在prepass的时候由计算场景细节的那个阶段所决定的.

Subdivs mult.事实上跟BF的Subdivs参数很像, 也是用来决定diffuse光线的数目它是以目前的HSph. Subdivs的百分比来设定的.

为了要更了解半球半径的意义(radius of the hemisphere), 我们必须要再复习一下AO的观念, 但那已经不是本文的重点了, 我们会在VRayDirt map教学里面提到而这边的Detail enhancement选项, 会减少IM的自适应性, 会对GI算图有显著的增加, 这也是为什么只再需要的时候才勾选这个选项, 当然VRAY的预设值也没有勾选.

Irradiance Map的其他选项
进阶的选项: 下拉式选单让你可以选取IM采样的内插计算方式, 这里提供了四种算法Weighted average (好/强大), Least squares fit (好/平滑), Delone triangulation (好/真实) Least squares with Voronoi weights. 技术上来说, 这四种方法是以不同的数学原理计算的, 没有必要去探索这些数学到底是怎样计算的, 用户只需要知道, 每个参数的意义, 最佳的内插方式为Least squares fit, 这也是Vray的预设值.

Sample lookup 提供了下拉式选单, 让你选取用怎样的方法决定, 当IM在计算内插的方式, 总共有四种方式, 分别为:Quad-balanced (good), Nearest (draft), Overlapping (very good / fast) and Density-based (best). 这些也都是演算法, 透过特殊的数学模式来计算, 没必要去探究细节. 跟内插的内行一样, 你可以从名称就可以判断每个类型的意义, 预设值Density-based (best)就是适用于大部分的状况.

Calc. pass interpolation samples这个数值决定了在最后一个pass时候引导IM计算内插采样的使用采样数目, 预设值10个采样已经够用了.

Multipass
Irradiance map的运算会完全地利用电脑资源, 也就是以多线程的, 多核心的方式处理资料. 一开始的时候, IM会以多线程计算, 每一块的IM都是不同的线程在计算, 都是相互独立的. 这些资料只有在前一次的prepass才会被取用, 因此, 在不知道彼此资讯的状况下, 就会产生不同区块不一致的结果, 你就很容易看到很明显一块一块的算图区块.

vray-Irradiance-11

把Multipass关掉来算图的话, 你会发现IM的采样会一块一块的, 每块之间有明显缝. 勾选了Multipass function让IM演算法能够使用当前prepass采样的资讯.

也就是说, 在渲染每一块的时候, 他让IM演算使用邻近的区块的资讯, 这样每块才能产生连续的采样. 因此, 实用上, Multipass让你的IM每个区块之间能够有很平顺的采样, 而不是像磁砖一块一块地. 这个选项预设是打勾的.

Randomize samples随机化采样, 这个功能让你的IM采样用随机的方式排列, 这样会让IM的效果更加写实, 就算是勾选了Multipass, 这个功能还是有作用的. 可以看以下图片看效果:

vray-Irradiance-12

关掉随机化采样点(Randomize samples)的测试场景, 预设的情况, IM会以可预测的方式排列, 但是会产生比较不写实的算图效果.
为了要打破规则性, 采样点会预设随机化分布, 所以预设的状况会勾选Randomize samples的选项.

Check sample visibility 让我们可以使用IM的采样的内插, 只考虑那些看得到的采样. 经常, 因为IM密度过低的原因, 在处理采样的内差时, 会在该采样点的周围一定的范围采样, 即使在那个范围里面的采样是在场景的可视之外的地方.例如: 书架后面放了一片木板.

光线可以直接照明书架. 而在书架后方, 光线无法穿透. 尽管如此, 在书架后方的木板却显示出明亮的光点. 虽然光线理论上根本不会这样穿透过去, 会发生这种原因是因为IM会利用相邻的采样点进行内差计算, 而不会考虑到实际的几何体状况, 为了避免这种状况, IM内插的演算法必须要知道采样点之间, 是否能直接看到彼此. 当然, 如果你勾选了这个选项, 会耗费更多的电脑计算资源.
我建议你​​看看V-Ray Help的范例, 里面很清楚地说明这个功能运作方式.
这是很好用的功能, 然而, 在大部分场景, 不会出现上述的错误缺陷(artifacts) .也没有必要去检查采样的可视性, 也没必要浪费电脑资源, 在大部分的状况, 应该不需要勾选这个功能.

最后一点要注意的是, Irradiance map只能被用在第一次diffuse反弹. 也就是说用在Primary bounces GI engine, 从IM的演算法我们可以很清楚地知道, 在第一次反弹后计算了大量的GI射线, 就会使用IM的prepass模式. 当你要选取第二次的diffuse bounce引擎的时候, 你没办法找到IM这种引擎.

结论
在这篇教学里面, 我们很彻底地认识两个GI算图演算法的设定方式, 也就是Brute Force 与Irradiance Map. 特别是, 我们很彻底地研究了各种细节, GI引擎的自适应参数, Irradiance Map, 用几个范例里面能够清楚地理解.

转载:http://renderstuff.com/
作者:Anton, Max
翻译:Hammer Chen