【Vray教程】揭开了V-Ray DMC采样器的神秘面纱

2 八月, 2014
273
0

引言
这篇教学里面我将给您DMC采样器(sampler)的基本技术背景, 但在谈DMC采样器的技术细节之前, 我们先复习V-ray里面另外一个采样器— Adaptive Subdivision采样. 我不会谈固定的采样(fixed sampler)技术, 因为固定采样很直觉. 自适应细分采样(Adaptive Subdivision sampling)是一项技术, 用在几乎所有偏差算图引擎(biased render engine)上, 这是相对旧的技术, 在大部分的状况应用的非常棒.

(注: DMC的全名是Deterministic Monte Carlo, 也就是确定性蒙特卡罗)

自适应细分采样可以给你很干净, 采样好的影像, 用来渲染静态图片真是太完美了. 但是跟DMC采样相比, 通常会对影像的同一个地方过度采样(oversamples), 即使你只需要用少量的反射模糊采样(glossy reflection samples)就足够了. 正如我说, 细分采样器存在于大部分的偏差算图引擎中, 但我觉得有些积极正面的VRay用户, 却开始采用另外一种采样器演算法. 我知道有个渲染器用了类似于DMC的技术. 两个算图器, 越来越被用在高阶的制作环境上面, 原因是DMC目前是基于raytracing, 最佳的在可接受的时间里面, 计算摄影机景深与3D动态模糊.

自适应的采样的采样过程
所有偏差的引擎大部分是用自适应的(adaptive). 这表示, 让我们先把状况简化一下, 比如说有一个3X3像素解析度的区域, 当你算图的时候, VRAY一开始的时候会用9个采样来算, 表示每个像素有一个采样, 我们会先假定采样的位置位于每个像素的正中间.

VRay_DMC_01

3×3 INITIAL SAMPLING
1 SAMPLE PER PIXEL

数量为3×3的启始采样
每个像素有一个采样
如果你不是很了解raytracing运作的方式, 让我们很快速地复习一遍. 这很简单, 想想看你有摄影机, 在摄影机前面有个格点(grid), 呈现出你最终算图的解析度.如果你场景中有某些物件, 当Vray开始算图, 它会从摄影机射出线段(称为eye ray, 眼睛射线)一直到像素的中央区域. 像量实际上是由摄影机射出去, 它会勇往直前, 会直线前进直到遇到场景中的物件才会停止.

眼睛的视线撞击到某物体的点算图器就会开始计算该点上面的色彩, 反射, 折射的资讯. 这些会回传收集的资讯给vray, 告诉它说这就是在该像素的颜色. 从摄影机发出的射线称为眼睛射线, 或是一级射线. 所有其他从材质射出的射线用来收集GI, 灯光, 反射…称为二级射线. 请记住这点, 因为我们会谈到这两种射线. 让我们复习下面图示, 让我们更了解什么是raycasting.

这个有九个像素的grid上面的每个像素, 都会进行上述的程序, 最后你就会得到算图的影像. 这边的问题是—每个像素只有得到一个采样, 而这个采样只会回传该无限小的点的颜色资讯, 这是从眼睛射线到场景中与物件交错的点. 然而实际上, 如果你把grid放在摄影机前面, 你最后应该要得到的是, 该像素无限个点的平均采样, 而不是只有一个点而已. 由于这对算图引擎几乎是不可能做到的事, 你不可能射出无限个射线, 因为这样会耗费无穷尽的时间. 程式设计师开发了一个聪明的方法, 怎样解决特定像素的过度采样—-这个叫做自适应的采样(adaptive sampling) 射线的自适应是根据算图图像的复杂度, 所以像素对比强的地方会有比较多的采样. 假设它会射出25个射线到一个像素, 然后平均化结果, 在该区域我们有单一的色块, 它就只会放出一个采样, 而不会浪费时间在过度采样该像素.

VRay_DMC_03

(左图) 在初始的算图采样之后, 会回传该像素的颜色

(右图)根据阀值所定义的差异程度, 算图引擎会在该像素投射更多的采样, 而颜色也会更新.

VRay_DMC_04

上图展示了自适应采样的优点: 第一个例子是每个像素只有一个采样; 第二个是对每个像素固定用100个数量的采样; 第三个是用自适应的技术, 每个像素最小采样是1, 最大采样是100. 你可以很清楚地发现当使用固定采样, 跟自适应采样相比, 浪费了多少时间, 但自适应采样却能获得几乎相同的品质.

恩, 自适应细分采样与DMC采样这两者相同的地方是两者都是自适应的(adaptive), 但是以不同的方式运作. 让我们先看看细分采样, 因为这是最古老的技术,我想要点出使用DMC的优点, 在不了解细分采样以前这观念很难解释清楚.

细分采样(Subdivision sampler)
上一段落我提到采样, 提到启始的采样是怎样射到像素的正中心的, 细分采样其实是用不同的方式运作的, 并不是把采样放在像素的中心, 而是把采样放在像素的边边. 如下图:

VRay_DMC_05

 

细分采样会把起始的采样放在每个像素的边边

在启始射线射到场景并收集资讯后, 细分采样会分析资讯决定哪个像素需要更多采样, 哪些不需要. 每个像素, 在其边边的采样都会拿来比较, 如果颜色比颜色阀值(color threshold)要高, VRAY就会把该像素再次细分一次, 在该像素产生更多的采样.

VRay_DMC_06

依据在算图选项里面Clr Thresh (Color Threshhold) 阀值所定义, Vray会检查是否在该像素的边边采样比阀值要高, 如果是, 那就会在该像素里面投射更多的采样;如果不是, 就会终止采样的程序, 会回传最终的像素颜色.

范例A
起始的采样会投射到每个像素的边, 然后收集颜色. 第一个像素非常接近于第二个像素的颜色, 因为颜色差异低于算图设定定义的阀值, 算图器就会决定不值得对该像素做出更多采样.

范例B
第一个与第二个像素的差异非常高, 超过了颜色阀值(Color Threshold), 这表示算图器会针对该像素传送更多的采样. 最大的采样是由Max rate所定义, 在本例里面表示每个像素最多有16个增加的采样.

这个操作会执行好几次直到达到颜色阀值或者是达到由Max rate所定义的最大的每个像素采样点. 请记住在Subdivision sampler所设定的max subdiv最大细分, 并不代表每个像素最大的采样数目, 它所表示的是像素会被细分几次. 所以当等于0的时候表示有1个采样, 1=4, 2=16,3=64依此类推. 请记住有些采样会被两个像素间的边所共用, 因此, 基本上如果你把Max Rate设定为2 实际上对该像素只会有25个采样. 以Max Rate=1来说, 每个像素都采样一个, 与其他像素共用8个. 我们来看下一张图片, 有更加直觉得解释:

VRay_DMC_07

自适应的细分采样(ADAPTIVE SUBDIVISION SAMPLER)
有些像素会有比较多的采样, 有些比较少. 这全都是根据颜色的对比与像素边的采样差异. 本例将Subdivision sampler设定为最小为0, 最大为2. 这表示最初的采样是每个像素1个采样. 因为每个边共享像素, 根据颜色的差异, 过度采样每个像素可以达到16个采样.

现在, 最大的问题是, 细分采样器(subdivision sampler)只会根据像素的边所收集到的资讯来做决定. 它基本上并不知道像素周围的全部色彩资讯, 它只知道像素的边的资讯, 这样的机制用在某些场景是没问题的. 但是若是在有很多细小的物件, 材质有许多细节, 颜色采样的资讯只是根据像素边的资讯是不足的. 我们需要在像素周围完整的色彩资讯, 才能让过度采样做出最佳决定, 这就是DMC sampler在做的事情, 这也就是为什么具有很多细节的场景, 比方说有很多很细的线段, DMC采样会做出更好的决定.在场景中增加采样点, 特别是针对动画产生会更干净, 更稳定, 每个frame到frame之间不会有明显的变化. 下一张图要讲的是:

VRay_DMC_08

做出投射采样的决定
在像素里面的射线, 是根据在像素周围的边的色彩资讯所决定, 这是Adaptive Subdivision sampler特有的方式, 当场景有很多细节的时候会出现问题, 所以要得到每个个别像素完整的颜色资讯会比较有效一些.

VRay_DMC_09

(左图) 自适应的细分采样(ADAPTIVE SUBDIVISION SAMPLER)
对有场景中有很细的物件会发生很大的问题, 这里的简单例子, 你可以看到线段算出来是断掉的. 在需要采样的地方没有给予适当的采样, 原因是细分采样是根据像素的边来决定采样的. 在本例里面, 我已经把颜色阀值设定到0.01, 最小的细分(Min subdivs)设为0. 这表示一开始的时候是以每个像素一个采样, 最大的细分(Max Subdivs)为3, 表示如果需要的会它会投射最多64个采样. 最大64个采样应该是绰绰有余了, 但是vray没办法从第一次投射里面获取场景中足够的资讯.

(右图) DMC采样
…就没有这种问题, 因为它是根据完整的像素收集的采样. 因为如此, 它可以侦测到非常细微的线段, 用很有效率的方式, 而且不会产生错误, 而本身有具有细分采样的特性, DMC 设定为最小为,一最大为八的细分. 这本例里面意思是代表它一开始的时候会投射每个像素一个采样, 而最后会在需要的地方最大投射64个采,样颜色的阀值设定为0.01, 跟细分采样一样.

当使用细分采样, 为了要取得干净的结果, 场景中的每个区域都使用某中过度采样(oversampling) .例如反射模糊, 折射, brute force, GI, 景深与动态模糊, 都会用完全相同数量的采样来处理. 所有的东西会一起平均化以后, 结合到颜色资讯里面, 而颜色资讯会跟周遭的样本相比, 决定是否要对该像素进行过度采样. 这表示如果对于景深有20个采样,对动态模糊有10个采样, 对反射模糊有100个采样, 你就很有对每个像素都要计算超多个采样数目了. 虽然这样可以产生好的, 干净的结果, 但却要消耗大量算图时间, 因为在像素里面, 每个多的采样, 你都会投射X个增加的采样, 给动态模糊, 景深, 反射模糊…等等, 才能得到一张好的渲染图像, 而这就是为什么, 中心化的自适应演算法, 如DMC这样的科技会出面. 实际上它会控制每个区域, 找到那些需要超过一个采样才能取得干净的资讯(例如反射模糊)的地方

在我们跳入DMC采样技术以前, 我们先复习一下VRay DMC采样的选单. 请注意这个选单并不只是会在你启动DMC sampler的时候才会启动, 它在当你切换到fixed sampler的时候也会启动, 唯一的差别是, 当使用Adaptive Subdivision sampler时, 影像的处理会与二级的射线无关, 例如材质的模糊反射, 而DMC会合并这些选项(影像采样, 与其他场景中的细分采样).

DMC采样的选项
让我们一个一个的复习, 你可以查看VRay help, 但是我们会用更简单的方式来解释. 我会解释: 当X数量的反射模糊射线从材质射出来, 这是在当影像的采样由摄影机穿过像素, 当射线打到某物件, 而具有反射模糊的材质被呼叫. 谨记这是很极端的例子, 会跟你的场景有所不同, 主要是为了让你了解原理, 但是实际状况可能不会有这么大的差异.

自适应的强度(Adaptive amount) 例如, 如果你材质有100个采样(10 subdivs) 用来对反射模糊做采样, 将adaptive设定为0.,5会让Vray 投射固定的数值为50 (也就是100X50 %=50) 的反射的采样. 然后接着会决定你是否需要投射更多的采样. 实际上在初始的50个采样以后. 更多的采样会一个一个地被投射出来. 如果需要. Vray会比较那些已经投射的采样的平均颜色, 如果这个数值不是很高, 它就会停止进行更多的采样, 因为它发现做更多的采样没什么道理, 对目前已经算出的东西没有么帮助. 如果将adaptive amount设为0.7, 你会投射30%的100个采样. 如果设定为0的话会投射所有的100个采样, 会投射以Min Sample的数值为基准的采样, 而在这之后会进行自适应计算.使用需要用来清理反射模糊的采样. 最小采样在这个例子里面算是保险措施, 因为有时候Adaptive amount设为1 ,Vray无法做出正确的决定, 是否在初次的两个采样之后还需要添加更多的采样, 因此有了最小采样. 你可以确保不论Adaptive amount设为多少,对反射模糊而言都能有最小量的采样数目(同理可套用到折设, 阴影…等等)也就是8, 在这之后就会开始自适应.

ADAPTIVE AMOUNT 0
所有材质的反射采样, 每个眼睛打到地板的射线都采用
ADAPTIVE AMOUNT 0.5
50%的反射模糊采样会在进行反射模糊计算的时候, 这个操作是自适应的, 也就是说在杂讯阀值的条件下, 只有需要的时候才会投射采样.
ADAPTIVE AMOUNT 1.0
当Adaptive设定为1 , 最小的采样就会启动, 起始的反射模糊采样会是8, 在之后就会依照杂讯阀值的条件, 投射需要数量的采样. 请记住我的raytracing图解, 让我们再次复习一遍, 但是从不一样的角度来看.

VRay_DMC_11

杂讯的阀值(Noise threshold) —如果adaptive amount设定为0.5, 而如果反射模糊材质具有100个采样(10 subdivs) , vray就会投射50个采样, 在其后它会以自适应的方式, 根据杂讯的阀值, 这表示在启始的50个采样, 每个新的采样都会被平均在这50个采样里面, 如果这50个采样所提供的数值超过杂讯的阀值,它就会送出更多的采样, 直到达到杂讯的阀值. 但是如果它提供不够高的话, 在阀值以下, vray就会停止对反射采样, 对反射模糊做最终计算以下表示当改变杂讯阀值的时候, 影像反射的品质. 这是非常重要的参数, 最终的数值最好在0.005-0.01之间.

 

最小采样(Min Samples) 如果自适应性设定为1 (也就是完全自适应), 即便是你有100个反射采样可供反射模糊使用, Vray还是只会投射1-2个反射采样, 也无法做出智慧的判断, 是否需要增加采样. 为了避免这种状况, 最小采样是采样数值的最后防线, Vray会对每个反射模糊的数值至少采取8个采样.

全局细分采样(Global Subdivs samples) 这是一个针对场景中所有需要细分采样的参数, 可以用来作场景微调. 可以对area shadows ,area light的subdivs或是反射/折射的细分, 动态模糊的细分,景深的细分…等等. 因此, 例如你把反射模糊射定为10 而Global Subdivs设定为2, 那么最后的反射模糊细分会是20 (10X2=20) ;如果设为0.2, 那就会把反射模糊的最终细分值变为2, 把这个数值调高会让你得到干净的结果但是缺点就是算图时间增加. 请记住这会影响到场景里面所有的细分, 我建议你如果有采样的问题,请到特定的材质去修改细分, 会比更改Global Subdivs samples要好.

欢迎来到不直觉的世界 DMC sampler
现在我们已经累积了够多的知识, 要了解DMC sampler的运作方式会比较容易. 首先我们必须知道, 这是DMC sampler很重要的功能—-也就是完整的像素资讯, VRAY会纳入考量,是否在该采样点需要更多的采样, 这个技术的效果我们之前已经看过了, 也就是那个茶壶的范例. 但请看以下不同的范例:

VRay_DMC_15

自适应细分采样(ADAPTIVE SUBDIVISION SAMPLER)
细分采样只会在像素的边做考虑是否需要更多的采样
DMC SAMPLER
有了DMC sampler, 会使用在像素周围完整的色彩资讯, 依此决定是否中央像素需要更多的采样.

或许听起来不是很重要, 但其实非常重要! 因为这个技术真的帮助我们捕捉到场景中微小的细节. 跟DMC sampler相比, 当初始的采样在像素的边, DMC sampler会在第一个采样里面, 每个像素内部产生随机的点, 决定是否要进行过度采样, 它的判断不像一般的自适应细分采样. DMC采样的分布会更加随机, 不会有固定的图案. 虽然deterministic表示它会呈现某种图案, 但跟早期用在vray的QMC相比, 事实上它是根据low discrepancy numbers.

很多人好奇为什么拿DMC sampler处理景深可以比Subdiv sampler算的更快, 原因是DMC sampler控制与影响场景的方式不同, 它只会在我们需要过度采样(细分). 因此你只会针对你需要的地方投射很少的采样,​​ 而不会在不需要的地方过度采样, 因此不会影响到最终品质.

技术上, DMC sampler有设定DMC的最大采样数目, 会对每个系分数值做细分灯光, 材质等. subdivision sampler就不会做上述的工作, 这是这两个采样器最主要的差异了

让我再重申一遍. 例如, 某材质有反射模糊, 而你把它设定为40 subdiv, 场景中灯光设定为shadow subdiv=10, 把DMC max samples设为5, 反射模糊的最大采样数值会是8 (40/5) ,灯光阴影的最大细分会是2. 请记住, 我们是以每个射到场景的眼睛射线的采样数目. 但是, 如果, vray采样的像素需要超过一个眼睛射线的采样数目的话, 例如果们需要DMC的最大采样为subdivs=5, 那么5×5=25采样vray来是有可能使用材质球所有的subdiv =40的反射模糊, 因为每个眼睛射线会投射8个subdivs(64个采样) , 因为会投射最大为5 DMC subdiv samples (25个采样) , 5×8=40个反射模糊采样. 搞混了吗? 这可是我花了好几天才搞懂, 因为这些观念没有些在VRay官方文件里面.

这里用简单的图示用来说明DMC是如何处理场景中模糊数值的细分的. 材质中的反射模糊预设值为100个细分设定. 在第一组例子里面DMC最多对眼睛样本有5次细分因此最后会使用比100要少的20个采样. 最后的一例子是DMC可以细分像素为50, 最多可以做出25000个采样. 既然如此, 你会对像素做出数次的过度采样, 所以就算是反射细分只有2也可以产生不错品质.

VRay_DMC_17

因此我们知道DMC对每个场景细分数值的细分. 我们可以再次复习自适应性以及自适应性如何处理场景的细分数值. 在Adaptive subdivision sampler里面是很直接了当地, 因为该采样器并不会影响场景中的细分数值(例如材质与灯光)

因为DMC运作的方式以及它如何对场景中的数值做细分, 需要多次采样, 如果你把DMC Max samples设定的很低的话, 自适应的选项会扮演某些功能. 如果你把DMC Max Subdivs设为1, 关于第二次采样会对反射, 折射, 阴影所需要的采样, 你会的得到跟Subdivision sampler一样的结果. 但是, 因为DMC演算法的本质, 把Max DMC提高到非常高, 例如50好了, 某些程度上自适应性是无效的, 可以忽略它, 为什么呢? 因对当你把Max DMC设为50, Vray就会把场景里面的所有细分数值改为1, 也就是投射到场景中的每个射线采样, 对反射模糊来说只有一个采样, 灯光也是一个, 动态模糊也是.
为什么VRay要这样做? 因为它知道它能投射出50 subdivs的采样, 大约就是2500个眼睛采样, 即便是眼睛只会对反射模糊投射一个采样而已, 还是能取得相当好的反射模糊.

这很有用, 原因是, 例如场景的3D景深, 动态模糊, 大量的反射模糊, VRAY会试着投射最少量的采样以产生最干净没有杂讯的结果. 这种状况, 它会把DMC数值设的很高, 如果需要的话, 你可以进到场景材质里面, 个别设置材质. 通常动态的物件, 你并不需要投射太多的反射采样, 因为到最后还是会模糊掉. Subdivision sampler并不知道这种状况, 它会从眼睛采样就可能地投射高数量的样本, 即便反射模糊在最后的算图里面不具有重大影响. 下个很简单的例子, 我采用Adaptive subdivision sampler 与DMC sampler两种采样, 你可以很清楚地看到DMC 采样胜过Adaptive Subdivision.

VRay_DMC_18

DMC采样的最大缺陷是很容易令人搞混, 设定上也很不直觉. 有时候场景有很多细节, 很多灯光, 动态模糊与景深, 最好把DMC设定设的高一点, 例如Min 1 Max 50 . 因为如果把Max DMC设的很低的话, 例如4, 会大大增加算图时间. 让我来看以下实际的例子

范例一: 头发
头发很难采样, 头发具有大量的细节. 大部分的raytracers无法用很快, 又有效的方式处理头发的采样. Adaptive subdivision samples在本例里面效果更差, 这种采样器无法决定哪边要放更多的采样; 相反地DMC的表现就相当好, 它可以很快地对头发采样, 而不会有Adaptive subdivision samples那种错误. (断掉的头发, 闪烁的问题) .同样的frame分别用DMC与Adaptive Subdivision sampler算图, 前者会胜过后者. 在图片里面我们可以很清楚地比较出来.

VRay_DMC_19

这边我用的设定是DMC Min 1, Max 50, Color threshold 0.02. Adaptive Subdivision 的采样器我的设定是Min 0, Max 2, Color Threshold 0.5. 我使用了相当高的阀值针对Adaptive Subdivision. Adap Sub 估计算图时间会花上20分钟.

现在就剩下的问题是我们该怎样针对头发来做设定. 通常我会把DMC Minimum samples设为1或2 ,Maximum设定为50. 如果你在​​制作动画里面有侦测细节的问题, 把min改为2可能可以把问题修掉. Color threshold可以设为非常低, 例如0.02或是0.05, 忘了在DMC sampler选项里面的设定吧, 因为自适应性基本上会被忽略掉, 因为Max DMC设为50, 会把场经中所有的细分数值细分为1, 这表示每个眼睛射线vray只会有1个采样来计算阴影, 1个用来计算反射模糊. 本例里面, 效果很棒, 而头发本来就需要相当多的眼睛射线.

VRay_DMC_20

如同你所见, 第三张影像效果最好, 画面中的一切看起来很平顺, 我可以保证你不会看到任何闪烁, 即便是在渲染动画. 在Blur那边工作的时候, 我通常把我算头发用另外的pass算, 设定为Min 1 与Max 50的采样. 其余的模型设定为matte (vray 属性). 接着我在后制里面把头发合成进去, 因为没有必要对场景中其它物件使用DMC Max 50来计算.

范例二: 平坦的表面, 反射模糊
有趣的是, 在某些状况下, 把DMC设为4可以得到干净的影像, 算图时间快. 这是真的, 因为对于地板反射模糊不需要有太多细节, 你会更专注在对材质采样而不是对几何体采样.

VRay_DMC_21

让我们来看看采样器发生什么事, 当把DMC Max由5改为50的时候, 你会看到投射出更多眼睛射线到场景里面.

VRay_DMC_22

很奇怪不是吗? 第一张影像DMC sampler Max设为5, 实际上获得的采样比DMC Max 50要少很多. 还记得当我解释DMC Max细分每个模糊数值吗? 恩, 这就是原因了,对于材质模糊反射, 我设定细分数值为50, 表示在第一个案例里面, DMC Max设为5 每个眼睛射线打到模糊反射的地板可以最多投射100 (10 subdivs)反射采样; 但是当DMC射定为50时, 它只会投射一个采样. 这表示. 当DMC设为50, VRay无法以很少的眼睛射线得到干净的反射, 因此它就会对该像素射出更多的眼睛, 就算我们在如此平坦的区域不需要这么多采样.

第二排用的是DMC Max 50, 但是我调整了材质的反射的细分. 对地板与墙壁你可以很清楚地看到, 藉由改变Refl Subdiv 你会得到大量个DMC sampler (眼睛射线), 因此, 在这样的状况下, 不要害怕把Refl Subdiv拉高到300, 因为当DMC Max 50,这样的细分你只会得到每个眼睛射线六个细分而已, 这样可以真的加速算图而得到平滑的反射效果.

范例3 Subpixel mapping (位在V-Ray:选单里面)

大部分的时候, 我会开启subpixel mapping,来算场景与动画. 如果你要算静态画面, 你可以把这个选项关闭, 这样可以得到最写实的效果. 但是当算动画的时候你会用到摄影机3D动态模糊与景深效果, 这时候开启subpixel mapping会是明智的决定, 因为这样算图时间可以变短, 而可以用更少的采样来计算干净的景深与3D动态模糊效果. 开启或是关闭subpixel mapping的差异在于: 当开启subpixel mapping的功能, 每个眼睛采样进行的时候, 当对像素采样时, 会先进行tonemapped, 然后再跟下一个采样平均化, 如果Vray有对该像素过度采样的话;当subpixel关闭时, 这些样本会先平均化, 然后当你得到最终像素颜色的时候, Vray才套用tonemaping. 用下图来说明:

VRay_DMC_23

当SUBPIXEL MAPPING开启
当Subpixel mapping开启的时候, 每个在像素里面的新样本将会先进行tonemapped (把颜色压缩到你定义的尺度里面, 可以在Color Mapping选单里面或是Camera exposure做设定) , 然后再跟现有的像素颜色合并.

当SUBPIXEL MAPPING 关闭
当Subpixel mapping关闭的时候, 每个采样都会先计算, 然后合并, 最后当采样完成整个像素颜色会进行tonemapped, 形成每个像素的最终颜色. 这个过程可以产生更写实的结果, 但是会产生杂讯, 特别是当使用3D动态模糊与景深的时候.

实际看起来会像这样:

VRay_DMC_24

DMC MIN 1 MAX 50
SUBPIXEL ON
DMC MIN 1 MAX 50
我们可以很清楚地看到对最终影响的影响, 右边的图示把subpixel mapping打开会产生比较干净的结果, 会算的比较快, 但是会失去某些亮度, 不够真实的结果.

SUBPIXEL OFF
DMC MIN 1 MAX 1
SUBPIXEL ON
DMC MIN 1 MAX 1
把DMC Max数值改为1, 表示反射模糊的细分不会减少每个眼睛射线传到像素的采样量, 我们可以藉由把subpixel关闭得到相同的结果.

这就是为什么会有差异发生, 当DMC设为1 , VRay从像素放出一个眼睛射线, 当它打到反射的地板, 它会花30个模糊反射采样, 反射采样会一起平均, 跟diffuse 数值与tonemapping一起合并. 因为VRay对单一个反射模糊计算用了30个反射模糊, 由与subpixel mapping关闭了, 所以就这30个的亮度维持一样. 跟我把DMC设为50相比较, 这表示透过像素,模糊细分的数值会降到每个眼睛射线只有一个采样而已, 而采样会跟跟diffuse元件一起平均化, 然后合并到采样, 一起进行tonemapped. 因为我把DMC设为50, 所以VRay我射出更多的眼睛射线到场景, 用来清理反射模糊, 而每个眼睛射线只会有很少量的眼睛采样.

这可以藉由到材质设定里面, 使用比较高的反射模糊采样来弥补(少的眼睛采样). 我的例子里面, 如果我把DMC设到50, 我可以把材质里面的反射设定为500 这表示(还记得刚刚讲过的桌子吗) , 每个眼睛的光线VRAY 会投射10个反射细分采样,到场景里面, 如此会让反射变得非常亮好似我们把subpixel mapping的选项观调了一样, 可是你却还能享有把subpixel mapping打开的优点.

范例04: 场景中的区域光 (AREA LIGHS)
如果场景有大量的区域光源, DMC可以帮很大的忙, 特别是你要套用动态模糊与景深的时候. 下两张图展示了, 我用了100展区域光, 你可以看到DMC sampler胜过Adaptive Subdivision sampler. 这两张图片的杂讯几乎一样, 甚至在DMC那张某些地方还要更加地干净, 而Adaptive Subdivision sampler甚至杂讯更多. 但是请记住, 我在DMC sampler使用的是Max 50采样, 算是相当高了. 为了计算场景中的反射模糊, 场景中又有这么多盏灯, 把Lightcache打开会帮助很大. 所以请记住, 当你遇到这类型的场景时候要采用DMC SAMPLER.

VRay_DMC_25

范例05: IRRADIANCE GI品质也会受到DMC设定所影响
要记得的, 当你想要移除杂讯或是Irradiance Map造成的闪烁的时候, IR Map也会受到DMC Sampler的参数所影响.

VRay_DMC_26

这个问题通常在Adaptive amount设为1的时候会出现, 我假定IR map并没有投射这么多固定数量的GI采样, 因此, 就没办法有效地决定是否需要投射更多的光线, 这可以藉由把adaptive amounte改成比1小的数值来解决, 也就是第二张图所采用的0.5. 你可以很清楚看到GI的差异, 或者可以把Min samples提高到128解决这个问题.

结论
希望我写的每个东西都很容易理解, 虽然有时候还是会令人搞混. 我看到有人对DMC sampler搞混因为它统一的核心, 所以又改回去用subdiv sampler, 因为用起来比较可以预测效果. 但相信我, 一旦你搞懂DMC sampler采样的威力, 你会维持住思考力, 因为你对算图采样演算法有了完全的控制力, 你还可以利用这个统一的核心发挥其威力, 做出更快的算图, 更干净的效果, 祝算图愉快.

转载: http://interstation3d.com
翻译:Hammer Chen