本文对于渲染师或者渲染爱好者来说是一道技术大餐,但你要有耐心,跟着笔者的思路从头到尾看完,除了看图之外更要看字,这道大餐才算是能真正吃上。
在进行渲染测试以及撰写本文的时候,我尽量站在严谨、客观的角度去看待Arnold、Vray和Mentalray这三款常用渲染器。写这篇文章最初的想法源于这篇帖子:《用一个场景打破AR的神话》,里面讨论的内容有所受教,但关于“Vray GI偏暖,ArnoldGI偏冷”的观点本人持怀疑态度,抱着打破砂锅问到底的原则,我决定深入测试Arnold、Vray、Mentalray三款“通用渲染器”在室内渲染中的异同。帖子里那个测试场景非常典型,于是我拿来用到这个场景并做了轻微修改。本文少讲表面操作,多讲技术原理,有兴趣的请往下看。请尽量不要跳着阅读,否则思路会乱。看完后也许你会对这三款渲染器有新的理解。
本文着重讨论以下四个内容:1、为什么Vray适合做室内效果图渲染?2、Arnold、Vray、Mentalray,他们的全局照明技术差距在哪里?分别有什么特点?3、在理解的基础上用三种渲染器实现基本一致的渲染效果(更深入的了解Arnold、Vray、Mentalray的全局照明系统,解决Arnold的色彩bug)。4、Biased GI vs. Unbiased GI vs. HybridGI?
感谢百度贴吧的Jaminna提供的场景文件,我稍作修改以更好的适应本文的内容。我调节好的场景测试文件:点此下载文件版本分别是:maya2013 64位maya to arnold 1.0.0.1vray for maya 2.30.01mentalray for maya 2013.0 - 3.10.1.4(maya2013自带)
-----------------------------------------------------------------------------
场景描述:
场景的模型和材质非常简单,全部的shader都是lambert,不携带任何光泽反射(specular)、镜面反射(reflection)、折射(refraction)、3s等内容。总而言之就是简化成一个纯diffuse漫反射环境,这样能够专注于测试漫反射全局照明在arnold、vray、mentalray中的异同。
全局光,其英文名叫GlobalIllumination,翻译过来叫全菊照明,哦不对是全局照明,也可以叫间接照明,我个人更接受间接照明(IndirectIllumination)这个叫法。英文简称叫GI,在常用渲染器中,全局照明通常指的是全局漫反射照明。
测试灯光环境搭建:
1、测试场景中使用了一盏平行光来模拟太阳直射光,然后根据渲染器的不同,arnold用了aiSky来作为蓝天的间接照明,vray使用了OverrideEnvironment的内容来作为蓝天,mentalray使用了Image BasedLighting来作为蓝天背景。天空的颜色与颜色强度在三个渲染器中我都设置为完全一致。但是Arnold的aiSky中颜色设置有bug。
2、场景中平行光在Vray和Mentalray渲染层中的灯光强度为2,在Arnold渲染层中相对应的强度值为2*3.14=6.28,我不能很好的解释为什么在本场景中arnold的灯光强度要乘以π才能得到实际等值于Vray和Mentalray中2的灯光强度,但经过测试的结果确实如此。
3、本次测试在三款渲染器中全部使用线性工作流程。
注:你可以下载打开测试文件看看,对理解本文更有帮助。
-----------------------------------------------------------------------------
一、用户常用默认设置下的测试结果对比:
一款商用渲染器的好坏,易用性是一项很重要的评判指标,我拿到这个场景后根据arnold、vray、mentalray的基本特点,使用了一般情况下最常用的设置,打开了全局光(arnold的diffuse的反弹次数为3,vray使用irradiance+lightcache,mentalray使用finalgather),并把采样设置到产品渲染级别,其他的参数尽量使用渲染器默认的设置,得到了如下三张图的效果:
看到这张图的亲们,请先不要激动,不要产生偏激的想法,先把本文看完再做评论。
在最常用的设置下,三种渲染器得到的结果差别很大,arnold整体照明偏冷,vray偏暖,mentalray偏黑且质量低下,渲染时间上arnold最慢。
用户常用默认设置下的结论:Mentalray的常用设置渲染的结果基本没法看,从这一点可以看出mentalray的易用性偏弱。
-----------------------------------------------------------------------------
接下来让我们来做一些改进,一是去掉arnold中aiSky偏色的bug,二是把mentalray渲染的挫效果进行提升。
1、解决aiSky的偏色bug。在这里我也提到过arnold在aiSky使用纯色的情况下,颜色有bug,在nuke中取色颜色明显不对,也就是说你在aiSky里设置一个<<0.8,0.9,1.0>>的颜色值,渲染得到的结果并不等于<<0.8,0.9,1.0>>,而且这个bug和gamma值什么的一点关系都没有。解决的方法就是建立一个gammaCorrect节点,设定颜色为<<0.8,0.9,1.0>>,gamma参数保持为1,然后连接给aiSky的Color通道,见下图:
aiSky渲染的颜色和之前在maya中指定的颜色<<0.8,0.9,1.0>>完全一样,bug得以解决。
上图是使用arnold渲染器的情况下有颜色bug的渲染图和去除bug之后的渲染图的对比,可以看到原本的浅蓝色天空在出bug的情况下,变得更深,因此房间的间接照明偏冷,去除bug后房间的冷色调明显减少。结果更接近Vray使用经典的Irradiancemap+light cache得到的渲染效果。2、增强mentalray渲染的效果。
这个场景属于半封闭场景,因此间接照明的使用是否得当将直接影响到室内环境的光线充沛度,在仅仅采用finalgather作为间接照明技术的情况下,mentalray只能得到反弹一次的间接照明采样,对于室内场景来说远远不够,这就是为什么mentalray只开fg渲染室内特别黑的原因。
所以,让我们同时开启mentalray渲染器面板中的GlobalIllumination的勾,并在平行光下开启mentalray选项卡下的emitphotons,调节相关的值,又提升了一些finalgather的参数,得到如下渲染结果(注意mentalray在渲染为exr格式并勾选EnableColor Management并将设置都改为sRGB的情况下,输出的结果在nuke中和在renderview中看到的不一致,因此请关闭Enable ColorManagement并在nuke中查看mentalray渲染出来的exr,并且一定记得把exr位深设置为32bit):
这个结果更进一步的接近Vray渲染的结果,只是黄色调更重一点,暗部更暗一点。那么经过这两步的调整之后,我们得到——
改进过的测试结果对比:
改进设置后的渲染结论:
1、Mentalray与Vray和Arnold相比,需要花费更多的参数调节时间去得到理想的效果。
2、Arnold的aiSky的颜色bug确实存在,但可以解决。
-----------------------------------------------------------------------------
从上图可以看到,三种渲染器得到的结果是越来越一致了,但现在仍然存在两个问题:1、arnold渲染的结果为什么还是偏暗?2、mentalray渲染的结果为何过于偏黄?
第二个问题我本人目前没找到答案。
关于第一个问题“Arnold渲染结果偏暗?”我们可以好好探讨下:
影响间接照明充沛度的关键因素是什么?是间接照明反弹次数,在不同的渲染器里有不同的叫法,比如gi bounce、raydepth等,arnold渲染器默认的漫反射照明的反弹次数为1(见下图)
这样的默认设置的好处是渲染会很快,坏处就是间接照明效果比较弱!角落很黑!
而我在本文中之前渲染所使用的diffuse depth=3,效果比1要好的多,但还是比较暗,角落照不亮,如果我把diffusedepth设置为30呢?我们来看下图分别设置diffuse ray depth=1、3、30的渲染效果对比:
通过上图可以看到gi的反弹次数对于间接照明的效果影响有多大。
那么我们回过头来看看arnold的diffuse raydepth=30的渲染结果和之前Vray和mentalray渲染结果的对比:
从上图可以看出,Arnold在diffuse raydepth=30的时候,渲染结果与Vray的渲染结果已经十分接近了(但渲染时间变得很夸张),因此可以判断Vray和Arnold在GI算法设计上遵循着同样的能量守恒原则,并不存在“这个渲染器的渲染风格偏文艺,那个渲染器的渲染风格偏小资”这种感性的说法。Mentalray的GI效果与Vray也是类似,只是更加明显的倾向于“模拟近似算法”、“糊糊的”、“细节不足”等感觉。差距就在于mentalray使用的GlobalIllumination技术过于老旧。这点是硬伤。我们之前说过,影响间接照明充沛度的关键参数是GI反弹次数,Vray使用Irradiance map+Lightcache技术得到效果直接默认就很好,根本就不用像arnold那样需要去人为调节什么ray depth,这是为什么呢?导致Vray渲染间接照明灯光充沛的的原因,要归功于Vray独有的LightCache(LC,灯光缓存)技术。灯光缓存技术牛逼在于它默认的raydepth=100,更牛逼的地方在于无论这个depth设置为多高,都不会明显减慢渲染速度。
看上图,如果我把这个Depth设置为3,那渲染效果就和Arnold diffuse raydepth=3的效果一样了,下图见分晓:
从上图我们也能找到些许ar和vr在全局照明技术上的共通点。所以这也解释了为什么渲染室内效果图大部分人都选择Vray,因为Vray的IR+LC的组合渲染室内又快效果又好,全局光看着最舒服,转角细节也保持的不错,再加上光子烘焙技术,室内室外游览动画也都不会闪。在室内效果图渲染这块领域,arnold不是不行,而是arnold要得到一张成品图要更慢。从效率和效果上综合来说,必然是Vray占优势。有人会说我可以在窗户上用area light(portal light)发射天空颜色进行直接照明来弥补raydepth不足导致的暗角,这方法是可以,但仅仅是一种提升的手段,即便用了arealight仍然无法在室内效果图领域与Vray抗衡。
关于GI反弹次数的话题,我们一直在讲arnold和vray,Mentalray其实也有类似的参数,它在GlobalIllumination的选项下面,见下图:
写到这我发现了自己之前的一个错误,mentalray的gi默认的photon reflections和phontrefractions的值是5,被我直接开到100了,也就是说之前mentalray开FG+GI渲染的结果都是100的参数渲染的,按照默认的情况下我应该以5的值去渲染,抱歉。如果把photon reflections和phontrefractions的值设置为5,结果和在arnold中将diffuse raydepth设置为5的结果类似,同理,如果把photon reflections和phontrefractions的值设置为3,结果和在arnold中将diffuse raydepth设置为3的结果类似。Mentalray的结果我就不上图了。最终我们基本统一了arnold、vray、mentalray三种渲染器渲染同一个室内场景的效果,见下图:
如果arnold的depth开到100,效果应该会更好一点,但是渲染速度基本接受不了。最终统一渲染效果的结论:
1、在三种渲染器中,得到理想的室内全局照明效果,mentalray所花的人工调节测试时间最长,Arnold渲染时间最长,Vray使用IR+LC模式速度最快,质量最好。
2、在三种渲染器中,合做封闭、半封闭场景的照明渲染,Vray表现最佳,也就是说做室内效果图渲染首选Vray。
3、在三种渲染器中,Arnold使用起来最简单,最容易上手,但要成为进阶用户需要不少渲染理论知识。
4、在三种渲染器中,Vray技术花样最多,但技术封闭性比较好(也就是很多用户不需要去理解Vray渲染背后所发生的事情)。
5、在三种渲染器中,Mentalray界面最不友好,操作最繁琐。
以上就是对于这个场景我所理解到的东西,希望对各位理解三种渲染器的GI技术有所帮助。
-----------------------------------------------------------------------------
接下来我们讨论另一个关于GI的话题,就是物理算法(unbiased,无偏差算法)与模拟算法(biased,有偏差算法)的比较。
长话短说,我直接给我了解到的结论:
渲染器 | GI技术 | 特征 | 噪点类型 | 备注 |
Arnold | Arnold GI | Unbiased(物理算法) | 小颗粒噪点(noise) | |
Vray | Irradiance Map | Biased(模拟算法) | 区域闪烁(flicker) | |
Vray | Light Cache | Biased(模拟算法) | 区域闪烁(flicker) | |
Vray | Brute Force | Unbiased(物理算法) | 小颗粒噪点(noise) | 算法类似arnold GI |
Vray | Photon Map | Biased(模拟算法) | 区域闪烁(flicker) | |
Mentalray | Final Gathering | Biased(模拟算法) | 区域闪烁(flicker) | 算法类似Irradiance Map |
Mentalray | Global Illuminantion | Biased(模拟算法) | 区域闪烁(flicker) | 算法类似 Photon Map |
如果你在Mentalray中采用的是FG+GI的组合,对应到Vray中就是Irradiance Map+PhotonMap的组合,也就是说FG与Irradiance Map是类似的技术,GI与Photon Map是类似的技术,遗憾的是PhotonMap比较老旧,效果也不够好,已经被更好的Light Cache所取代,而mentalray还只能继续用GlobalIllumination。
Mentalray没有物理算法的GI技术,Vray既有物理算法又有模拟算法,Arnold只有物理算法。
Vray的Brute-Force(暴力准蒙特卡洛算法)与ArnoldGI的算法是类似的,也就是说,如果在Vray中采取BF+BF的GI组合,得到的渲染结果与Arnold的渲染结果会更加相似(几乎一模一样),见下面4张图:
以上两张为Arnold与Vray中depth=3时,同时采取暴力算法的渲染图对比
可以下载图片到nuke里认真比对,图片我上传的是无损png文件。
通过渲染测试数据我们可以发现,Vray采用BF+BF的GI算法的情况下,得到的渲染结果与Arnold几乎一模一样!在同样采取暴力算法的情况下,Arnold较Vray的渲染速度优势在于低depth的情况下,一旦depth变得很高的时候,Arnold的暴力算法会比Vray更慢。当然,我只是针对这个场景的测试结果说话,并不敢保证在所有场景渲染中都能得出这样的结论。
至此,Arnold是不是一个“那么神奇”的渲染器,我想认真的读者可能会在心里小小怀疑一下了!
-----------------------------------------------------------------------------
最后我再说说Vray GI的物理算法+模拟算法的混合模式(hybridGI)。在Vray中,采用混合模式的组合就是BF与IR、LC、Photon map的组合搭配,比较常见的组合有:
Irradiance Map+Brute Force(目前没发现这个组合有什么好的地方)
Brute Force+Light Cache(有效减少BF+BF的噪点问题)
下面上测试渲染图对比(注意观察噪点情况):
不得不服,用Vray的Light Cache技术去计算二次GI照明,配合BruteForce去计算一次GI照明,无论是画面质量还是渲染时间都远远优于纯暴力算法。
在本文的所有用到Vray Light Cache渲染的图片中,LC的参数除了depth外都保持的是默认值。
以上的结论都是针对静帧渲染。动画渲染的结果会是怎么样?是不是各种GI技术会出现大跌眼镜的结果,也许我会另写一篇评测文章,还请继续关注我的博客,不用记地址,只要百度搜索“cg风火连城”或者“cg烽火连城”即可。
作为本文的扩展,来说说个人目前对这三款渲染器的认识(与本场景无关):
关于Mentalray:
1、俗话说得好:不怕不识货,就怕货比货。只要你用过Arnold或者Vray,你就不想再回到Mentalray的世界,因为在不带二次开发的情况下,他的界面不友好,不亲切,不好用(相对而言)。
2、Mentalray的硬伤在GlobalIllumination这个技术上,虽然现在新出了个什么IrradianceParticles技术,但好像是用来取代FG的,GI仍然没有改变。也就是说,你用Mentalray很难得到高细节的全局照明渲染效果。
3、Mentalray的另一个硬伤在于同时开启FG+motionblur,速度能慢十倍以上,基本不能用。在可以预见的未来这几年,直接开运动模糊渲染的片子应该会越来越多,而Mentalray基本不能让你这么干。
4、总而言之,mentalray已经老了,不怎么进步了。我的意见是你想用arnold或者vray就去用吧。
关于Arnold:
1、Arnold是目前逼格最高的商业渲染器。最好入门,界面最简单。看起来就像是深刻了解了艺术家不喜欢看大量参数的特点,因此参数不多,但如果要深入了解Arnold或者在实际工作中碰到了问题的话,Arnold也需要不少的渲染器理论知识才能顺利解决问题。
2、Arnold的IPR非常优秀,交互性非常好,这点上完胜Vray和mentalray。Vray的IPR是另一套模式,那套独有的IPR模式居然不支持3s材质,导致VrayIPR的实用性打了折扣。
3、Arnold在实际生产使用过程中,一定要学会节约计算资源,也就是说,你要懂场景为何渲染慢了,慢在diffuse、glossy、reflection还是透贴?怎么提速?如何寻求效果与质量的平衡点?否则你有可能碰到慢的惊人的情况,如果你不懂优化,说不定你会开始怀念Mentalray。
4、Arnold的暴力算法决定了它的渲染时间与场景精度设置几乎呈线性关系,也就是说你场景中每像素的采样光线如果是100的话,那么你的采样光线增加到1000的时候,渲染速度恰好慢十倍。关于这个知识点我有空再写一篇博文。
5、采用了暴力算法的渲染器(arnold与使用brute-force模式的Vray),噪点只能随着精度的提升而减少,永远无法消除,颗粒感永远伴随着你,只是精度高了可能会看不出来。
6、Arnold的暴力算法没有传的那么神,速度也没有多快,没错低精度确实很快,但精度开高了也真能慢的你服气。在高GI反弹次数的时候,渲染效率甚至不如Vray使用BF+BF。
关于Vray:
1、在三款渲染器中,Vray是商业化程度最高的一款,UI设计非常人性化,各种模块分布也让你能感觉出来这款渲染器充分考虑到了用户的需求和使用习惯。Arnold的界面设计倾向于简单粗暴,Vray的界面设计倾向于贴心,而Mentalray的界面设计让你感觉“你爱用不用,不用拉到”。
2、Vray同时拥有模拟GI算法与物理GI算法,还可以混合使用,在技术选择上十分灵活,但灵活的代价就是你要掌握更多的GI技术知识才能用好它。
3、你也许没听说过,但Vray和Arnold一样,可以同时开间接照明+置换+景深+运动模糊,只要选择好gi引擎,渲染也不算太慢。
渲染器说白了就是对像素进行数学运算的工具,是纯理性的玩意儿,要说“mentalray能实现的渲染风格arnold就实现不了”,或者“只有arnold能做写实风格,其他都不行”等观点,本人无法苟同。在把工具用好的基础之上,渲染效果上的差距只在于渲染师的艺术功底。
全文完
本文仅代表个人观点,如果有不正确的地方欢迎指出。
欢迎有不同见解,可以博客留言或者微博留言,也可以加Vray&Arnold渲染技术交流群:84745035 讨论。
对于网友留言的补充:
1、arnold的aiSky的颜色bug,在使用hdr与jpg贴图的时候,不存在,只有在直接赋予rgb颜色的时候,才有bug。