谈谈Arnold之 PBR&Unbiased

最近Arnold很火,作为一个异常犀利的NB渲染器,arnold大有摧枯拉朽打倒旧社会的架势,然而貌似很多人尽管一直在谈arnold,歌颂arnold,却不明白为什么arnold这么屌,以及屌在何处。来自机器猫的博客http://blog.csdn.net/cuckon


防喷补丁.exe

Arnold个人也在研究阶段,这篇科普纯属个人心得,如有不对麻烦告知立马修正。来自机器猫的博客http://blog.csdn.net/cuckon

来自机器猫的博客http://blog.csdn.net/cuckon


Arnold为什么这么屌?

谈谈Arnold之 PBR&Unbiased_第1张图片
《斗战神》开场CG使用Arnold渲染,画面效果让“中国CG”朝“世界CG”迈进了了2年

Arnold是一个unbiased PBR渲染器,这分两部分,不但是PBR的,而且是unbiased。Arnold同时符合,而且效率拔群。来自机器猫的博客http://blog.csdn.net/cuckon

来自机器猫的博客http://blog.csdn.net/cuckon

关于PBR

PBR是说基于物理的渲染。这点和以前的Renderman时代的NPBR概念大为不同。NPBR是针对效果和现象的,比如要做fresnel可以用一个facing ratio控制一个ramp去模拟,很像那么回事,不用基于折射率去计算。这种大部分情况下计算量很低,控制很直接,也很自由,自由度不够了就去改shader,总之在NPBR下是不要求物理精度的,反正一切为了效果服务,在这个时代更加追求的是降低计算量以及提高自由度,让artist可以为所欲为。

而PBR是基于物理的,这个“基于物理”并不是说和光照模型完全是和照片一样一样的,而是说来自机器猫的博客http://blog.csdn.net/cuckon

  • 在这个系统中的能量是守恒的,最简单的理解就是出射光线的能量的总和不能大于入射光线来自机器猫的博客http://blog.csdn.net/cuckon
  • 遵循亥姆霍兹守则。即,那边一束光线照过来你从这看到的亮度是L,那么把摄像机和光源的transform互换一下,从摄像机看到的亮度同样是L。来自机器猫的博客http://blog.csdn.net/cuckon

不管bsdf如何换,这一条是arnold一直遵循的。NPBR的以计算效率和自由度为重,可以随意发明个光照模型,我就是要不守恒不符合bsdf咋滴,而PBR概念下的shader不用去发明什么光照模型,而是直接在引擎提供的bsdf基础上通过混合做起(比如mantra的各种bsdf节点以及arnold的brdf函数),可以说要做的话更多的是做功能上和程序纹理上的。这导致参数大都有物理意义,而不是和具体算法相关,艺术家不用去操心这个参数在算法里是什么意思才能调出好效果,只需要按照现实中的物理逻辑去思考就可以了。因为这个原因,artist的自由度是被限制了,但shader的参数的可预见性是货真价实的提高了,以前测试30次出来的效果可能遵循物理的思路5次就调出来了,节省了大量活人的时间,而不是计算机的时间。

自机器猫的博客http://blog.csdn.net/cuckon

关于Unbiased

这个话题是一个装逼卖点。来自机器猫的博客http://blog.csdn.net/cuckon

Biased和Unbiased的区别主要表现在对GI的计算上。Biased的计算是说,允许有“系统误差”的。我们知道计算机的数值世界里误差是必然存在的,但误差也分两种,一种是随机误差。随机误差是没法避免的,比如用float去算0.1+0.2它是不等于0.3的。而系统误差是这个算法决定的,人话就是,这个算法一开始就是一种近似或者其他目的而明摆着知道有误差。比如用经典物理学去求运动物体的物理属性,不管浮点的精度提高到多少,始终会有误差,因为算法本身决定了这是一种近似。再比如FLIP去求流体运动,这个算法已经决定了在particle和volume之间属性传递的时候有误差,这种误差产生于算法中,是不可能消除的。这段话如果没明白可以再看一遍,一方面可以帮助你理解arnold的unbiased,另一方面可以对其他人复述一遍来达到装逼的目的。来自机器猫的博客http://blog.csdn.net/cuckon

谈谈Arnold之 PBR&Unbiased_第2张图片

一张比较失败的效果图,可以看到车轮和地面交界处等地方非常缺乏光影细节,带来一种属于unbiased风格的淡淡的飘逸的感觉

而arnold采用了unbiased方式去计算,是说没有系统误差。在计算GI时MR等采用的是Finalgather、Photon map等,Renderman采用的是brickmap,pointcloud等,这几种方式都非常巧妙的省去了大量的计算量,但是毕竟是近似,所以就引入了系统误差。比如Finalgather,只是发射有限的FG ray去计算间接光照,一个FG point对应着一片像素,插值后应用到光照中,而间接光照本身就是低频的,所以最终的效果看起来效果差不太多。但是这个系统误差导致的结果就是动画上的闪烁啊,艺术家需要理解FG的radius啊,椅子腿儿看起来离地啊,不过这些和其省下的计算量相比都不是事儿。然而有句古话说的好,时间上来看计算机的计算能力一直成倍增长,但渲染时间基本是恒定的。这句话和摩尔定律一样出奇的和现实吻合。古时候渲染个反射都要用镜像模型等去模拟,后来机器发展了,可以raytrace了,所以到头来还是慢。后来机器又牛起来了,但时间又被各种GI等高级功能占去了,再后来机器再次的发展,但刚要哈皮起来又出来了个不省油的Arnold。来自机器猫的博客http://blog.csdn.net/cuckon

那arnold到底是怎么算的呢?yes,unbiased,生算。和FG类似却不同,arnold的每次sample所用的间接光照都是实打实的算出来的,而没有经过插值。这个在效果上导致的最大提升就是模型的高频地带光影细节非常丰富,完全不“飘”。当然这个是以计算量为代价的,所以拿个cornell box渲染时间去说arnold不是很快的可以省省了,因为虽然arnold的优化很棒,但是它的使命根本就不是为了节省渲染时间。这也是solidangle之所以出Arnold的原因,就是同样的30分钟,他们觉得艺术家的30分钟要比计算机的30分钟宝贵。当然,Arnold之所以这么生猛,有个原因就是因为在影视级别它的优化实在是很好,高面数+motionblur+dof一开普通的raytrace渲染器都让你内分泌失调了,但是arnold的渲染会让你感到喜悦。可参考风胸的这篇测试。来自机器猫的博客http://blog.csdn.net/cuckon


在这篇结束之前…

有两点思考,如果想明白了,那就真的理解了上面所说的: 来自机器猫的 博客 http://blog.csdn.net/cuckon
  • 为什么Arnold渲染的diffuse比maya自带的暗3倍左右?来自机器猫的博客http://blog.csdn.net/cuckon
  • 为什么都说Arnold不需要AO?
倘若不知为何且待下回分解 。 来自机器猫的 博客 http://blog.csdn.net/cuckon

你可能感兴趣的:(CG,Misc)