本文是对Arnold渲染器的首席构架师Marcos Fajardo的采访。转载自http://www.x-graf.com/
MarcosFajardo 是 Arnold 渲染器的首席构架师。先让我们看一些 2000 年 Arnold渲染的图片,由于使用了半球和全局照明,这些图片的真实感是以往渲染器很少达到的,这使得 Arnold引起了不小的轰动以及不少制作公司的注意。不过后来,Marcos 和 Arnold淡出了人们的视线,没有维基百科的文章,很少有网页提及他们,公司网站也一直处于“建设中”。你可能很难猜到最近你观看的某部电影是用Arnold渲染的。
Marcos生于西班牙,14岁的时候开始对计算机图形学产生兴趣。和我们中的很多人一样,他开始使用的是8bit的电脑,使用BASIC和汇编语言编写小的图形程序。他原本想学习数学,不过1992年就读大学时却选择了计算机科学专业。一个朋友向他介绍了Vivid以及POV-Ray光线追踪渲染器,让他心中一亮。数学能被用来创建这些超酷的图像让他兴奋不已,从1994年起他开始编写自己的光线追踪渲染器。互联网在那个时候开始逐步发展起来,他的第二个指路明灯是The RayTracing News— 一个关于光线追踪的新闻网站,这让他了解到其实很多人已在这个领域取得了很棒的研究成果。RTNews就像一张地图,为他提供了相关的SIGGRAPH论文和书籍的名录。白天他会去大学图书馆复印相关的文献,晚上阅读它们,有的时候甚至通宵达旦,只睡一两个小时,这严重影响了他的学习,甚至到最后都没有完成全部学业。
他在网上发布了一些自己渲染的大气氛围效果的图片,于是他开始得到一些公司的工作,包括马德里的REYESInfografica 和英国的LightWorks。1997年他去了SIGGRAPH,在那里看到了最新的研究成果,开拓了眼界。
Marcos并不想只替别人工作,他想编写自己的渲染器。他看了几种已有的hybridrenderer(混合扫描线和光线追踪的渲染器),把它们和Kajiya对path tracing所作的研究进行了比较,觉得纯随机光线追踪将是未来的发展方向。1997年 Marcos开始构建 Arnold的框架,那年他 24 岁。
从1997年起,他作为独立咨询师参与了不少项目,不断改进和完善他的软件,并始终保有软件的知识产权。这往往需要额外协议,就像和Sony达成的一样,但这些问题对一个好律师来说不难解决。保有知识产权使他签的合同不可能有太高的价码,但毕竟这使他继续成为软件的拥有者。
1997年,他留意到一家位于多伦多制作表现图的 CAD 公司,并向这家公司展示了为 Arnold 最新添加的大气漫射效果,于是他们雇佣了他并将 Arnold 用于制作。当然Marcos仍然拥有 IP(知识产权),他的薪水不高,特别是对于他所做的特殊工作来说,甚至这些薪水都无法为继他在多伦多的生活。不过,这是非常好的经历,他可以按照自己的想法自由工作,改进软件,同时还能遇到很多业界的专业人士。这一模式— 受雇于公司来为Arnold添加新的功能 — 是他过去 13 年的生活模式。Blue Sky的电影动画短片 Bunny
在 Siggraph1997,他打地铺留宿在 Bel Air 的一些朋友家,这些朋友向他介绍了他们的朋友,其中一个是在 Blue Sky 工作的动画师Justin Leach。Justin 知道 Marcos 在研究渲染,于是向他介绍了 Carl Ludwig — Blue Sky的创始人,也是 Blue Sky 渲染器最初的开发者之一。Carl 带他参观了公司,并花了一些时间一同讨论光线追踪的话题。BlueSky 是第一家全部使用光线追踪进行渲染的公司,看到他们的渲染,特别是 John Cars渲染的一张利用天光进行照明的图片,Marcos 佩服得五体投地,这也更坚定了他的看法:全随机光线追踪应该是 Arnold的方向。Blue Sky 制作的Bunny(1998奥斯卡最佳动画短片)就是使用随机光线追踪,当然兔子本身没有使用间接照明(代价太大了),这也许是第一部使用unbiased蒙特卡洛辐射算法的电影。
2001年一部个人动画电影50 PercentGrey获得奥斯卡提名,该片使用了Arnold渲染。它的成功对Arnold是标志性的:完成全片只使用了几台电脑,显示了随机光线追踪可以在小成本的CPU投入上完成高质量的图像制作。
2004年他开始受雇于Sony PicturesImageworks。他的一个朋友PepeValencia 正在Sony制作动画电影Monster House的动画和previs,Pepe将 Marcos介绍给这部片子的视效总监和副导演JayRedd。Jay脑中已有了Monster House的大致效果,他认为角色看起来应该更接近物理真实,而不是CG,所以全局照明对他来说很重要。他们尝试了其它渲染器,但要达到他要的效果速度都太慢了,于是他们测试了一下Arnold,结果非常振奋人心,当然Arnold还缺少很多面向制作的功能,例如物体归档的延时读取、贴图缓存系统、毛发物体等等。所以Sony组织了一个由经验丰富的渲染开发人员构成的小团队,紧密工作,来为这部影片提供支持,让渲染器满足制作的需求。在此期间,Arnold的渲染速度,特别是运动模糊,有了明显的提升。
Marcos原计划在洛杉矶呆一年,但项目一个接一个,他实际在那里呆了3年。5年后Sony已经成为一家全Arnold渲染的制作公司,Arnold参与渲染了很多影片,例如MonsterHouse、Beowulf、EagleEye、Watchmen、2012、美食天降、爱丽丝梦游仙境,以及一些即将发行的影片。美食天降是第二部全部使用Arnold渲染的动画电影,也是第一次运用了Arnold的全部能力:运动模糊、次表面散射、毛发等。虽然这篇文章主要讲的是Marcos,但Arnold的这些功能也要归功于Sony的开发团队,特别是CliffStein 和ChrisKulla — 两个神奇的渲染黑客,还有ReneLimberger, Scot Shinderman, Eduardo Bustillo, SolomonBoulos, 以及后来的LarryGritz, Alex Conty 和AngelJimenez。2010 年 1 月 Marcos 不再直接为 Sony 工作,取而代之的是另一份合作协议。2009 年 Marcos在马德里成立了一家名为 Solid Angle SL的公司,带着所有在 Sony及其它公司工作期间改进后的代码,他希望让 Arnold 作为商业渲染器出售。目前 Arnold 支持 Maya 和Softimage,用户可以访问插件和 shader 代码,使用 Trac 来跟踪 bug 和新增功能。Arnold本身是一个原生、跨平台、使用 Doxygen 文本编写的 C/C++ API,某些客户可能只要求获得 API 的授权许可。
Arnold是一个包含API的批渲染程序,一帧典型的电影画面大致需要单个处理器3-4小时进行渲染,别忘了它是一个unbiased随机光线追踪渲染器!不用处理eye rays的rasterization技巧,没有灯光的irradiance缓存或者photonmap。运动模糊和景深效果削弱了rasterization的优势,但这些特性是随机光线追踪的一部分。Arnold不是一个 hybrid渲染器(混合扫描线和光线追踪),这样的好处是:只需要存储一个版本的模型,不用一版给rasterizer,另一版给光线追踪,内存是渲染巨大场景的关键因素,这显然可以起到很大的帮助。另外Arnold还使用数据压缩和降低精度来减少内存消耗。不用混合渲染方式也避免了其它一些头疼的问题:维护两个独立渲染系统,修正两个系统间不一致的问题,等等。
Arnold避免任何irradiance缓存意味着最少的渲染预处理时间— 基本上只有效率构架需要建立,渲染可以立即开始。和progressive渲染(图片先渲染粗略效果,然后不断细化)相结合,Arnold使得艺术家和 TD 可以更快地进行渲染调整。另外场景的大小也是非常重要的因素,因为内存的限制,取消irradiance缓存意味着这方面的内存消耗没有了。Irradiance缓存还会带来抖动,通常这种算法需要用户调整一系列参数(可能有12-15个),用户需要很好的掌握这些参数才能在有限的时间内得到高质量的图像。相反Arnold只有一个参数,就是sample(采样),这使用户更容易掌握软件。Arnold面向的是动画电影的制作,所以不像建筑动画那样需要再利用已有的irradiance缓存。
Marcos的目标是让Arnold尽可能物理真实。以往用户通常需要灵活的可调性,但最近几年一些客户提出了基于物理参数的控制需求,例如使用IOR(折射率)来控制金属的反射,并且越来越多的艺术家开始适应了这些参数。
Arnold 是基于纯 CPU 运算的,它不能使用 GPU 加速。虽然看起来有点糟,因为 GPU可以大大加速渲染,但是目前大部分的渲染农场都是纯 CPU 的。GPU 渲染也有缺点:不同的编程模型,显存容量不足,以及必须保证 GPU代码和 CPU 代码具有相同的渲染结果(包括 NaN 黑点、无限远的处理等)。可以阅读 Sony的Larry Gritz的相关论述。
Marcos也尽量有限地使用 CPUSIMD(SSE等)类型的操作代码,因为那会消耗更多的编程时间、维护成本以及可读性。它们被有限地使用,仅在那些计算耗时的部分。他在Arnold项目上工作了13 年,保持干净、高效及可靠的代码远比短期内10%的性能提升来的重要。
为啥起名叫Arnold呢?1999年 Marcos在洛杉矶Station XStudios 工作时,和两个朋友去看一部阿诺斯瓦辛格出演的电影“End ofDays”,在此之前他的渲染器一直称为RenderAPI,很乏味的名字,于是他的朋友就开玩笑的建议他改名为Arnold。Arnold的名称很快被人们接受,Marcos曾想起一个更专业的名称,但Arnold已树立了品牌,所以他暂时打消了改名的想法。
那么,渲染问题解决了吗?Marcos认为虽然研究领域还时不时有新的效果诞生,但显然已经越来越少。例如,他注意到EGSR 2010一篇关于非均匀介质折射的论文,由于体积中折射率的不同,会产生有趣的效果。Marcos也提到了predictiverendering 的研究,让渲染可以进一步模拟诸如偏振、荧光、双折射等效果。体积散射(volumetricscattering)依然是研究的热点领域—虽然基础方程已经诞生好几年了,但精确模拟同时保持高效和实用仍然很困难。
Arnold目前主要是满足电影动画行业的需求,因为它是经典的pathtracer,生成焦散等效果耗时而且容易产生噪点。但Marcos发现没有电影客户需要真正的焦散效果,对他们来说更好的全局照明和面光阴影要重要得多。
他的大部分研究都是围绕着效率,优化光线传递路径和采样方法,他认为采样方法还有很大的提升空间。其它的效率问题也未完全解决,因为不同场景和不同系统的差别太大了:各种效果,各种数据类型,还有不同的内存容量都需要考虑。在“爱丽丝梦游仙境”一片中,1-2亿的polygon数量是常有的事,需要让它们适应4G的内存(8G 是你运气)。贴图一般不是问题,因为缓存的使用降低了内存消耗,Arnold使用开源的OpenImageIO(LarryGritz 编写)作为贴图缓存。
我问他EGSR 2010上有什么喜欢的内容,他列举了几篇与Arnold相关的论文,或其技术很容易集成到Arnold中:
“Bounding the Albedo of the Ward ReflectanceModel”改进的 wardanisotropic 光照模型
“Two Methods for Fast Ray-CastAmbientOcclusion”实现光线投射式环境遮挡计算的两种方法
“Compressive estimation forsignal integration in rendering”可以减少运动模糊和景深中随机采样的噪点
“InvisibleSeams”隐藏不同贴图间的缝隙
对于最近业界的一些成果,Marcos特别喜欢PantaRay 引擎,由 NVIDIA和Weta Digital开发,可以光线追踪十亿级三角面的场景。在电影Avator中该引擎被用来完成所有ambientocclusion 的预计算。Readmore
文章最后,来看一条使用Arnold渲染的游戏片头:“Assassin’s Creed: Brotherhood” gametrailer。
本文翻译过程中删除了某些过于专业的章节,这是英文原文