🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
http://renderwonk.com/publications/s2010-shading-course/snow/sigg2010_physhadcourse_ILM_slides.compressed.pdf http://renderwonk.com/publications/s2010-shading-course/snow/sigg2010_physhadcourse_ILM.pdf siggraph10上面physically based lighting course里的文章。 由Industrial Light and Magic带来,原来的标题是《钢铁侠》和《终结者》中的image based lighting和physical shading,但是实际上这个paper覆盖了IML多年的积累,包括《珍珠港》,《绿巨人》等电影。 同时里面的很多做法,对realtime graphics也非常的有指导意义。 **film reality** 一点需要澄清的是,cg开发者的终极目标是film reality,不是真实的人眼可见的那种reality,这个限制来源于存储介质是LDR,所以在这个限制下,很多东西要考虑到这些因素。 **90年代** ![](https://box.kancloud.cn/2016-04-28_572155427c961.jpg) 在90年代的时候,是捕捉一个LDR的环境贴图(当时是LDR的,后来是HDR),来作image based lighting,当时使用cook torrence来做specular公式。 一些hack:比较典型的是一些ambient的光照,这个没法非常准确的进行capture,并生成shadow信息,会使用大量的spotlight来模拟: (简直就是irradiance volume) ![](https://box.kancloud.cn/2016-04-28_572155429877b.jpg) 《珍珠港》 michael bay(《勇闯夺命岛》《珍珠港》《变形金刚》的导演)挑战IML说要一个比以往电影中cg渲染的飞机要更真实的效果,IML一顿捣鼓,结果大家都看到了,不说还以为是真实拍的飞机呢,如同战争比10所大学更能推进技术进步,需求真的是技术进步最好的助燃剂。 到了90年代晚期,raytracing(光线追踪)技术已经比较成熟,但是IML还是没有使用,源于在如此复杂的场景中使用不太现实,而且他们习惯使用的软件(renderman)中还没有这个功能(嗯,不错的实战经验),所以继续他们的image based lighting。 在珍珠港中,添加了 - reflection occlusion,从image中读取的光照信息,加一个occlusion,防止在犄角旮旯的地方,应该比较暗,还很明亮的反射环境 - ![](https://box.kancloud.cn/2016-04-28_57215542b29f8.jpg) - ambient environment - ![](https://box.kancloud.cn/2016-04-28_57215542d137f.jpg) 来以手头拥有的资源,以很低的消耗(开发消耗和生成实际图像的运算消耗)达到了接近raytracing的GI质量。 最终到达了这样的质量:(coooool) ![](https://box.kancloud.cn/2016-04-28_57215542ef1e6.jpg) 《绿巨人》(<hulk>) 到了绿巨人这里有了一个进展,就是环境贴图改成hdr的了,并且分辨率也进一步加大。 《钢铁侠》 ![](https://box.kancloud.cn/2016-04-28_572155431511c.jpg) 到了《钢铁侠》这里主要是处理的材质上的事情,在环境贴图等image based lighting上面的工作已经比较成熟了(稳定的使用高分辨率的HDR环境贴图),但是在钢铁侠中的对材质高要求带来了新的挑战,很快项目组发现材质上的BRDF不够好。 这里必须要提的几个是:可见做一个很棒的最后结果,中间有多少积累工作需要做,他们很多的工作甚至不会再最终产品中露头 - 在《变形金刚》中,ILM已经成功的做了不少的适用于车上的材质,这为钢铁侠中的工作铺垫了不少 - ILM使用BRDF探测器(记录材质如何对光进行反射,bungie在halo上也做过这样的事情), - 但是发现chrome合金部分过于复杂,以至于没法收集足够的信息。 - 收集的信息很棒,但是美术想做点改动就非常的难(估计一大票莫名参数直接眩晕了) - 最后探测BRDF工作没有使用,但是却帮助项目组更好的理解了材质的BRDF 基于这些分析,最后ILM使用各向异性的specular function来做超酷金属效果: ![](https://box.kancloud.cn/2016-04-28_57215543362a2.jpg) 各向异性的brdf的研究也比较多了,ILM用的是在一些矢量方向上使用不同的specular exponent。 使用brickmap来做ray traced reflection surface caching。 ILM在钢铁侠开发期间也遇到了不少问题,其中一个就是很多参数(影响的factor),这些有些过于复杂,美术一顿调之后存在个人之间很不同,同时也会出现不真实的情况,简化等问题在后面的《终结者》的开发中有了很多进步。 这里ILM说的一个挺不错:ambient和diffuse其实是一个东西,reflectance和specular其实是一个东西。 《终结者》 到了《终结者:救赎》,ILM希望能够解决在之前项目开发中的一些头痛问题(比如太多参数调节的窘境),并迎接新的挑战(终结者中的一些场景的变化更加剧烈等)。 ILM采用更加基于物理的材质光照系统(physically based lighting)来: - 达到一个更加简单,更加直观,更物理正确的光照渲染系统 - 这里包括: - 能量守恒的材质 - normalized specular - more physically plausible specular falloff - more heavily image based - importance sampled raytracing 能量守恒 这个是物理光照中基本都会有的一项,就是保证反射的光强度不会超过入射光。 同时ILM把ambient和diffuse合并,specular和reflectance合并,这样只要平衡diffuse和specular就好了(不像原来要平衡4项)。 normalized specular 一个光在粗糙表面上反射,那么反射面会更大,同时亮度降低,其实这也是能量守恒的一种。 原来ILM没有这一项,是通过人手动来调的,现在做到specular公式中,那么结果不用调就比较自然了。 ![](https://box.kancloud.cn/2016-04-28_572155434cfa6.jpg) ![](https://box.kancloud.cn/2016-04-28_5721554360e62.jpg) normalized Importance sample raytracing importance sample就是通过去采样主要的部分来尽可能有效的去采样场景。 这个让我想起ue3的塞玛利亚人里面的反射就只反射霓虹灯,而建筑物什么的一概不管的这种,这应该也算是一种importance sample。 实际应用的时候,importance sample包括: - 主要采样image中比较亮的点 - 在粗糙表面的时候,会对反射的方向做一些改变,指向最有效的部分 最后结果和标准raytracing差不多,但是效率却好很多。 变革的烦恼与收获 ILM在做了这些技术改变之后,和很多公司一样,有几点痛楚: - 对生产的影响,ILM在开发的同时也在制作电影,于是就沿用原先的系统来做原先系统可以处理的很好的部分,比如里面的摩托车机器人,然后在系统开发好之后,在做有挑战的部分,比如骷髅机器人 - 开始技术的改变也导致了工具的效率问题(如果到游戏上还得加上bug和crash),开始做好的工具效率颇低(相比于原来) - 习惯于原先hack的美术们,对这个新系统的使用也颇有不习惯,ILM内部甚至引发了一场“圣战”,简而言之,费了好多力气才把新的系统(energy conservation, normalized specular等)推行下去 - 不过到了后面的项目(《钢铁侠2》)的时候,痛楚期过去,全线转入新的物理材质光照系统,品质和开发效率都更加的高 最后来个图,钢铁侠是这样拍的,感觉演员拍的时候应该不会很high吧: ![](https://box.kancloud.cn/2016-04-28_572155437d892.jpg)