【Vray教程】Vray最佳设定:Light Cache与Photon Map篇

2 八月, 2014
442
1

vray_photon_01 (1)

V-Ray的最佳设定 Light Cache
大家好, 之前各位有仔细读过两篇关于GI算图的教学:

Vray最佳设定—Irradiance Map篇
揭开V-Ray DMC采样器的神秘面纱

现在进入到第三篇. 如果你还是不了解前面两篇, 我们诚挚地建议你再复习一下, 特别是, 要知道GI的大致概念, 也就是要对Brute Force和Irradiance Map这两种演算法有扎实的概念. 在这篇教学里面, 我们将学习有关于GI反弹算图, Photon mapping与Light Cache, 我们也会学习Light cache每个细项功能, 以及最佳化的设定方式.

本教学将回答下列问题
photon map是什么? 运作的方式?
使用photon map的缺点是什么?
photon map的修改版—- Light cache演算法的运作方式是什么?
Light cache的cell是什么?
Light cache是​​如何储存直接光照的? 以及计算不同的diffuse反射
Light cache filter的运作方式?
Pre-filtering与Filtering的差异?
Light cache的参数要怎样设定才能得到最佳的效果?

传统的Photon map
这是过时的算图引擎, 基本概念是光源在发射光子在场景中反弹, 然后, 就会在场景中形成所谓的光子图photon map. 这是一个三度空间的光子打到物件表面所形成的, 每个点都储存了亮度与间接照明的颜色资讯. 基本上, 这样的图的产生方式跟Irradiance map产生的演算法差不多.

光子贴图的原理很容易理解
在Irradiance map GI Map的取得是由摄影机开始, 取得场景中的一个点, 确认可能会对表面照明的光源. 这样, 我们就可以假定射线从摄影机发出, 检查其他的rays, 直接由光源或是间接到达该点. 用这种方法, 只会考虑到场景中摄影机会看到的区域. 从这样的角度来看, Photon mapping的算法比较粗糙.

除了摄影机角度发出的向量以外, 它也会投射光源所有角度的向量, 称为光子. 所有的表面, 以及场景中所有的点都会被计算, 因此浪费掉了许多运算资源. 这个演算法在场景中散布光子, 即便是在不会被摄影机看到的地方也一样.

再者, 光子贴图演算法不会提供足够的自适应功能, 侦测场景的细节, 也因此得到的品质也不好. 光子贴图在物件的边缝处会产生错误, 这是该演算法的主要缺点. 然而, 实际上来说, 光子贴图的最大区点是无法从间接的光源计算亮度, 光子只能由传统的光源来产生.

例如, 他无法侦测到由VRayLightMtl产生的自发光照明, 或是GI Environment (skylight) 或VRaySky的照明效果, 这样光子贴图在户外或是室内场景变得无用武之地.

光子贴图演算法的唯一生存优势, 有些老派的3D用户还在使用的原因是, 它相对来说物理比较精确, 因为光子演算法够正确地计算diffuse反射, 例如焦散效果与次表面散射效果.

然而, 因为某些限制与不合理, 你不应该再使用过时的光子贴图GI演算法. 在光快取(Light cache)这套更棒的演算法推出之前, 光子演算法很流行. 用来计算第二次反弹.

最新的光快取技术
光快取(Light cache) 原本是高科技的算图引擎, 跟光子图的全局照明很类似, 但是跟光子图相反的是—射线(rays)计算的方式有所不同. 这个演算法的本质是光快取, 是由摄影机产生一组的射线, 在这些射线与场景物件交错的点上面, 产生全局照明的图,

这些射线(rays)并不是GI的射线, 这些是从观察者角度所产生的路径. LC ray 投射到场景的物件, 在接触的地方计算颜色, 取得材质的属性, 以及打到他的光线, 不管是直接光照或是间接的. 跟光子贴图相比, LC演算法把光子贴图的所有缺点都拿掉了!

LC只会考虑到场景摄影机看得到的区域, 它会处理微小细节, 而且不会在物件的边缘产生黑边, 而且, 最重要的是LC可以处理任何类型的光源, 包含了间接照明.

vray_photon_02

Light Cach的主要参数
这是V-Ray:: Light cache的间接照明选单, 包含了计算参数, 重建参数, 模式…等等还包含了subdivs, sample size, scale, number of passes, store direct light, show calc. phase, adaptive tracing, pre-filter, use light cache for glossy rays, filter, interp. samples, mode, don’t delete 与autosave等参数

vray_photon_03

Subdivs这个参数决定了LC rays的数量, 从摄影机到场景, 决定采样的颜色.
LC演算法一般会把场景切割成小的区域(称为cell). 在切完之后, 就会决定每个小区域的颜色, 藉由投射LC射线, 从摄影机过来的, 也就是说, 每个小区域都是独立的颜色采样, 最后会用在GI map上.

范例场景的渲染, 这边显示了光快取采样的马赛克细胞(masaic cell)分割区域, 当然Subdivs的细分越多, 就会有越多的马赛克细胞, 也会得到越精确的颜色. LC射线的实际数目等于Subdivs的平方 .

一般来说, Subdivs约有2000-3000对于大部分的写实算图很足够了, 但是一开始只要设为1000就够了, 而这个参数如有需要再调高就好了.

Sample size 控制了采样的大小, 当你指定了cell的大小, LC的演算法就根据这个数值对图像细分. 在之后, 他会追踪射线, 决定每个cell的颜色, 每个cell颜色的确认都至少需要一个射线, 让我们假定由Subdives决定的射线总数会比cell的总数要少, 所以视觉上看起旯好像增加了某些细胞的大小, 换句话说视觉上cell的大小也间接地跟Subdives的数值有关.

Sample size的数值必须要有足够的LC射线才可以达成, 例如当LC射线大于cell总数的时候, 某些cell会被数个射线计算, 也就会产生比较精确的颜色, 也就能够改善最终算突的品质. Cell的尺寸只会在当场景具有大量细节的时候才须改变而LC map无法呈现足够的细节, 在大部分的状况, 把Sample Size设定为0.02, 对于大部分的场景已经很足够了.

Scale参数在下拉式选单里面,​​ 让你可以指定cell size的单位, 有两种数值: 萤幕与世界单位(Screen and the World).
萤幕模式让你可以指定cell size的数值, 依据最终算图大小的比例, 例如Sample size=0.02, 而Scale 设定为screen, 那表示cell大小为整个萤幕大小的2%. 你也必须知道, 这样cell大小是相对于萤幕解析度的, 这表示在场景中靠近银幕的cube的面, 与在墙壁上的两个cell大小是一样大的, 尽管在位置上面他们跟摄影机的距离并不相同.

而以World作为单位, 让LC根据3ds max单位来决定cell size. 以这样的模式, cell size在空间上面是一样大的, 但是在萤幕上面会根据他们在场景空间上面的位置来决定大小. 这样, 在墙后面的cube的cell大小会比在cube前面的要小, 而且, 由于LC会对影像的每个位置用固定数量的射线, 在小的cell里面会用比较少的LC射线. 跟大的cell相比较, 这样会让小的cell产生比较差的品质, 在最终算突的时候, 可能会产生比较多的杂讯或是错误.

对LC cell使用场景单位, 会产生很均匀的LC map, 这对于镜头飞跃的动画(fly-through animations)很有用, 这个方法让LC cell的大小都很均匀, 用在动画上不管摄影机的移动都可以得到一样大小的LC cell. 对于静态场景渲染与动画. 当LC map的每个frame都是独立计算的, 不能合并在一起时, 我们就必须要用Screen模式, 这会减少错误. 这就是为什么在预设的状况下LC cell是设定成screen 模式.

Number of passes是LC计算有几个pass. 一般来说LC的计算并不是用多执行绪的, 但是可以分割成好几个passes, 让整个电脑的多核心能够完全载入使用. 例如: 如果LC计算是用四核心处理器计算的话, 我们就不能打断LC的pass, 也就是说Number of passes设定为1, 换句话说, 在计算LC的时候, 就只会单一的, 四核心处理器, 剩下的三核心就会闲置, 不会参与LC的计算. 因此, 为了要加速LC算图, 必须要强迫把pass切割数量切割成系统的核心数量. 当今, 常见的处理器核心数目不会超过8个, 例如, 八核心的系统, 有两个四核心的Xeon处理器. 在大部分的电脑, 把umber of passes设为8适合大部分的状况.

Store direct light是LC演算法的功能, 让你可以不只是储存GI资讯, 而且可以储存关于场景中直接光照的位置. 我们知道LC会追踪由摄影机到场景的物件, 当这些射线跟场景交错的时候, 演算法会检查物件的shader决定其颜色, 然后继续追踪从光原来的点, 照亮物件, 决定物件的亮度. 换句话说LC演算法, 根据它运作的原理, 也会检查直接光照落在场景的点. 因此, 一开始的时候它会收集关于场景中直接光照的资讯, 能够储存质将光照, 让我们可以快取, 储存场景中直接光照的资讯.

传统上, 在GI render element算图之后, Vray分开计算直接光照, 对场景中直接光照进行采样当然会耗费计算资源, 光线的快取, 例如先前储存在LC的资讯, 之后要用到就可以马上使用, 如此可以增加算图的效率, 节省了以运算的方式得到直接光照所需要的时间. 我们可以想像的到, 用这种方法得到的直接光照, 品质会比传统的采样要糟糕. 当然这要看依你LC的品质而定.

这种作法只在场景中有大量的光源的时候才有意义, 因为计算直接光源可能会耗费好几个小时. 再者, 用这种方法产生的光照会有明显的缺点, 会暴露出CG算图的感觉, 会产生模糊的阴影. 如果目标是照片级写实的算图, 用这种做法不是很好, 就算考量到可以节省量的运算资源也一样. 所以在预设的状况下Store direct light是关闭的.

vray_photon_04

Show calc. phase 显示计算阶段这个功能很棒, 让我们能够显示预览的效果, 在几分钟内就看到大概效果, 这排除了用低解析度算图测试的需求. 在预览的时候你不需要等待所有阶段的算图过程, 确保开启这个功能. 当然啦, 这预设值是勾选的.

三张比较图, 左边这个是萤幕截取, 是比较粗糙, 只用基本的shader. 中间这张是在几分钟算图过后, 非常接近右边这张,右边是最终算图效果, 具有高品质.

Adaptive tracing这个功能能让我们使用关于场景中照明的资讯, 对每个LC采样, 然后在场景中光源比较多的地方添加更多的射线. 在某些状况下, 能够帮助我们移除掉LC产生的杂讯,​​ 例如, 如果场景有焦散, 但是, 这个选项会消耗记忆体资源, 而只有在Adaptive tracing parameter勾选的时候, 才能勾选Use directions only的选项. 基本上, 在大部分的场景, 勾选这个功能不会有明显的差异, 所以在预设的状态下不应勾选.

重建Light Cache map
下个选单是Reconstruction parameters area, 里面包含了几项设定, 跟LC map的后处理有关, 对最终算图有影响.
Pre-filter预先过滤这个功能跟LC cell采样的内差有关Pre-filter的内插功能让LC sample map变得更平滑. 只有在勾选的时候, 它会把map传给最终算图. 而内插的强度是由Pre-filter后面那个数值所决定, 越大的数值可以产生越少的杂讯, 但是结果会比较模糊, 也因此会造成某些小细节消失. 而小的数值会产生比较多的细节, 但也会变得比较多杂讯.

vray_photon_05 vray_photon_06

两张算图范例, 这边显是了有勾选Pre-filtering演算法与没有勾选Pre-filtering演算法的结果, 第二张图是有勾选Pre-filtering, 看起来比较平滑.

vray_photon_07

Filter提供下拉式选单, 让我们可以选取更多的内插演算法, 如先前提到V-Ray在计算LC之后会把计算好的LC map,传递到最终的算图演算法. 使用LC filter让我们可以做出更多的LC内差效果, 一旦LC把map传递给最终算图演算法, 也就会开始计算每个shading poin,t 这也就是算图的基本单位. 如果我们选取了其中一个filter (请不要与Pre-filter搞混) 当他计算每个shading point的时候, 会内插LC sample map的资讯.

None是Filte下拉式选单的一个选项, 用这个选项就关闭使用LC filter. 在这种状况, 最终算图演算法会使用LC map, 不会进行过滤功能. Nearest是LC的filter 在某个数值条件下最接近的采样做为内插的条件, 会涉及到过滤的最接近采样的数目是由Interpolation samples所决定.

当开起了filtering Nearest, 会产生非常平滑但又维持细节的效果. Fixed类型的filter很类似于Nearest, 差别只在于涉及采样的点是根据GI map点的方形区域.

Filter size的单位是由Scale来决定. 请注意, Fixed的滤镜只会处理落在Filter size里面的区域, 结果看起来很像一片一片的方块, 而其他的区域变成黑色的背景.

vray_photon_08

这个算图范例展示了用比samples尺寸还小的Fixed Filter算出来的结果. 看起来就像在黑色的背景贴满了N次贴那样的效果. 为了避免LC map产生如此明显的错误, 我们必须要把filter的尺寸弄得比sample的尺寸要大, 至少要是两倍大.

但是只有在算动画的时候, 使用Fixed类型的滤镜才有意义. 把尺寸设定为Screen模式, 在其他的状况, 用Nearest filter还是比较好.

根据Pre-filter与Filter的运作原理, 这两者最后个功能都是一样的. 两者会把LC map平滑化, 产生更平均的效果. 两者只差别在技术的应用面, Pre-filter演算会对LC map的所有采样进行内插, 但是缺点是这个计算只支援单线程处理运算, 不管你电脑有多少线程. 同时Filter的演算法会计算的比较精确, 因为它是根据不同的算区域来进行处理的.

这个方法需要更多的电脑运算资源, 让V-Ray在每个算图区域计算内插, 尽管如此, Filter的运作, 以最终算图, 都是支援多核心的, 也会使用电脑所有的可用线程, 对于单核心或是双核心的电脑, 会建议你使用Pre-filter或是合并使用Pre-filter + Filter, 让采样分配的数目降低为一半.

大部分的高效能工作站, 甚至用在玩游戏的电脑主机上, 都具有超过4线程的运算能力, 对于这种硬体, 就很适合使用Filter演算法, 对于分散式算图尤其有意义, 在算单张图的时候, 有多台电脑参与计算.

在大部分的VRay设定里, 我建议只使用Filter: Nearest把Interpolation samples设为10, 这样可以的到好的结果, 也不会把GI细节模糊掉, 不会有明显的错误.
Use light cache for glossy rays是个选项, 让我们以LC计算场景材质的diffuse reflections 与refractions 这让我们减少了运算资源. 当然啦, 用这种方法算出来的材质跟直接计算相比较品质会较低,最终算图的品质跟你LC map的品质有关. 在Store direct light的选项的目的类似, 计算间接照明的资讯, 也包含用来计算diffuse reflection的资讯.

当然啦, 场景材质用这种方式计算出来会比较模糊, 无法满足照片写实算图的要求. 这种状况, 可以用LC的设定来改善, 取得好的高光模糊与折射模糊, 但是是否真能节省时间还是个问题, 对于分散式算图尤为重要. 很不幸地, 现在的VRay 版本并不能用分散式算图来计算LC Map, 就算你是用网路算图算图速度也跟单机算图没有差别.

vray_photon_09

算图范例中的球, 套用蓝色反射模糊材质, 你可以看出使用Use light cache for glossy rays 这个选项会导致非常多杂讯的反射模糊, 因此在预设值的时候不会开启这个选项.

LC最后面的两个选单是Mode与On render end, 这跟IM里面的选项很类似, 专为动画算图所设定的.

结论
在这个教学里面, 我们探讨了两种GI算图演算法, 也就是Photon mapping与Light Cache, 然后对最重要的部分深入研究. 特别是, 我们学习了所有细节, 为调了LC的GI算图, 能够很清楚地知道所有的范例. 各位朋友, 我们很诚挚地希望您认真的阅读这章节, 我们也希望你在阅读之后够驾轻就熟地使用LC里面的各种参数.

理解这些重要资讯让你可以轻松地设定, 取得适当的GI maps, 计算写实的3D算图效果. 在下次的教学里面, 我们介绍各种GI引擎的最佳搭配, 除此之外, 我们也将揭开如何消除角落的黑点问题.

祝各位有美好3D算图效果. 下次见~

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