1、http:/game.watch.impress.co.jp/docs/series/3dcg/20090601_170531.html西川善司为 3D 游戏粉丝的生化危机 5图形讲座(后篇)MT Framework 1.x 的成熟图形魅力的新表现是什么?2009 年 4 月收录会场:卡普空总公司在生化危机 5图形讲座的后篇中,要接触到的是最近在本连载中刊登次数增加的全局照明技术(Global Illumination )技术。还有,让大家看看现在的 3D 图形里的经典表现,在BH5中的阴影生成、水面表现等独特的实现方法,还有大家在意的 PS3 和 XBox360 版的区别等。-生化危机 5中
2、的 Global Illumination 技术在本世代的 3D 游戏图形中,开始倾向于重视环境光的处理。不仅有从设置在场景里的光源而得到的直接照明,还要考虑光源在复杂的反射后,布满空间的间接光照来实现照明的动感效果,使整体变得活跃。这种复杂的照明效果被称作全局照明(Global Illumination),通常被简称为 GI。GI 方面的考虑,说起来比较简单,但现在的实时 3D 图形的标准渲染管线中,只有直接光的照明(Lighting)手段。为了转换由 GI 来执行,必须要有特殊的方法来实现。GI 最符合定义的实现是光线追踪(Ray Trace)等方法,但想要把这个在实时 3D 图形上实现,
3、现在的GPU 性能还不够,所以现在的主流是采用预先计算的模拟 GI 的方法。日本的游戏里,致力于采用这种模拟GI 方法的有索尼克世界大冒险,这个在之前的连载里也有,在基础方面希望参考这篇。在BH5中,玩家虽然可以体验到动感丰富的舞台(Stage) ,这些都是在关卡设计师(Level Design)(舞台设计)的巧手中完成的,实际上很意外的是做成了一个整体的“箱庭”(译者注:这里可以理解为把游戏里一章的所有舞台都做在一个大场景里)。也就是说,即使玩家是认为自己在自由行动,实际也只是在游戏系统的手掌上打转。虽然听上去不太好听,但这样构造的原因是为了让设计师和美工可以更容易控制。场景是如此得接近玩家
4、,为了让玩家的视觉印象感受深刻的地方,需要手动的进行环境光的设定。在表演舞台和影像的设置上,要在关键地方加入环境光。具体的,要先设定舞台中的重点位置的影响范围,再设定支配这个影响范围的环境光。这个环境光本身,开始是在 MT Framework 的工具上,使用 CubeMap(6 面构造的的全方位纹理)来进行设定,对进入影响范围的 3D 物体对象给予全方位 6 方向的环境光的形态。CubeMap 的构成,是把这个场景给予的动态和静态光的影响,还有精确的全局照明一起进行预先计算(也可以让设计师手工制作 CubeMap) 。CubeMap上图是 CubeMap 的影响范围的可视化截图,在范围内的部分
5、表现有被特别设定的全方位环境光。中图是最终效果截图。下图是场景内设定的 CubeMap。由于BH5舞台的箱庭结构,需要大量给予环境光的 CubeMap,而实际上这种 CubeMap 在运行时需要在内存管理上做大量辛苦的工作。所以在BH5中,把 CubeMap 用有 9 个系数的球谐波函数来做近似表现的实现。关于球谐波函数的基本概念,可以参考本连载的杀戮地带 2(KILLZONE2)。简单得说,就是把全方位的放射能量分布近似化的进行不可逆压缩的方法。 BH5中,把 9 个系数分配到 RGB 来存放,虽然多少会粗糙点,但能够复原出来自全方位的环境光。译者注:杀戮地带 2 和生化 5 都是采用了 l
6、=2 的球谐波函数。运行时上述的照明(lighting)是如何实现的呢?单纯的考虑,就是使用了 9 个系数的球谐波函数(SH)来复原环境 CubeMap,再通过这个,使用 IBL(Image Based Lighting)的方法?石田先生不是这样,没有使用恢复为 CubeMap 的方法。使用的 SH Lighting 是比这个更简便的方法。原理上使用了斯坦福大学的 Ravi Ramamoorthi 的An Efficient Representation for Irradiance Environment Maps方法(地址是 http:/graphics.stanford.edu/pape
7、rs/envmap/)。使用这个方法,从 3次(9 个系数的)球谐波函数在 Piexl Shader 上复原全方位的环境光,就可以取得对应阴影处理对象法线的环境光。如果 9 个系数可以展开为 10 个左右的指令的话,那么恢复为 CubeMap 的方法在 Pixel Shader上的成本更少。根据石田先生所说,可以分析出,就算使用 SPU 等芯片制作 CubeMap,也无法实现低 GPU 负荷的将CubeMap 恢复的方法。顺便说一句,PS3 专用的杀戮地带 2,采用了使用 SPU 来恢复 CubeMap 的方法。SH Lighting 此图是实现不使用纹理(Texture)内存,直接从球谐波函
8、数得到所需方向的环境光的方法的实现。卡普空第一程序制作室 程序员 上田干夫先生对了,根据场景的不同,特定的环境光 CubeMap 要可以设置在哪些区域(Area)产生影响和那些区域不产生影响。特别是屋外不能应用特定 CubeMap 的区域很多。这些区域,要选择使用全局设定的环境光CubeMap。具体的,屋外情况使用全局环境光 CubeMap,要设定从天井方向而来的天球光和地面方向的地面反射而来的地面光。还有,放在邻接的 CubeMap 之间的 3D 物体对象的情况,采用插值表现两者的球谐波函数系数,在通过球谐波函数,来计算出全方位环境光的方法。上田干夫先生环境光以外的静态光源,也要一起细致的设
9、定影响范围。例如,从小屋向屋外看时,Bloom 的出现方式要由设计师来调整。在BH5中的情况,比起基于物理正确的照明,更重视为了在印象上使照明看上去更容易印象深刻的“基于设计师视觉正确的照明” 。关于环境光,和连载里刊登的合金装备 4(MGS4)的手法非常相似。当然,虽然与把预先生成CubeMap 通过球谐波来获得的实现等级不同,但舞台中环境光的配置,通过设计师来设定这些的影响范围等制作的风格上有相似的地方。虽然MGS4和BH5游戏类型上不同,但制作方对于画面要实现电影般的照明效果的重视,这方面是非常近似的,因此才有了一样的照明概念吧。由球谐波函数得到的环境光照明上图是没有球谐波函数的环境光,
10、下图是根据球谐波函数得到的环境光(最终效果截图)-特意的让实时渲染看起来有预渲染风格?给予胶片质感的技术电视噪音 Television Noise纹理的一种,与这个做 alpha 乘算合成后就会出现胶片颗粒(Film Grain)的效果。在BH5里并没有把渲染的影像直接的显示,而是通过后处理(post process)添加了胶片的风味。这个是在电影等方面经常使用的手法,把色彩和渐变(gradient)用(艺术的风格)来调整的技术, BH5里,为了能做出电影的质感,把色彩过滤,渐变补正,对比补正,亮度补正等使用实时滤镜的形式实现并使用。石田先生在制作失落的星球时,实现了 4 个左右的独立滤镜,虽
11、然不能太奢侈的使用,但在BH5中因为整合成一个来实现,所以把负荷减少到了失落的星球时的一成左右,这样就可以积极的利用了。平林先生也加入了因为胶片的老化,在影像外围附近的红墨感,还有周边减光(影像的四个角附近会变暗,用镜头捕捉影像的特有现象)等效果。这些是将预先绘制好的上述效果的纹理,应用在 Sample 上。上篇有稍微介绍过,在BH5中,Movie 场景中会插入薄薄的胶片颗粒一样的噪声(银盐胶片引起的颗粒状的粒子噪声,虽然终归是“噪声” (译者注:正常考虑,噪声是不好的。 ) ,但为了胶片风味,有些情况要适当的加入) 。这样,突出了胶片的质感,根据场合也可以看到好像动画压缩一样的噪声,故意的引起这是预渲染影像吗?这样的误导。虽然笔者个人认为是胶片颗粒效果,不过在开发者里是把它称作电视噪声的效果来使用的。这里,把准备好的随机噪声纹理(Random Noise Texture) ,一边进行适当的纹理动画,一边做乘算的 alpha 合成的结果。虽然简单而普通,不过确实作出了前面所说的光学的老化效果和胶片老化效果等复合技术,作为视觉效果,风格上让人有相当类似的感觉。在BH5中,附加内容(译者注:印象中是要通关后用奖励点数购买) ,不只是对应 Movie 场景,还有游戏本篇,准备了可以把这种电视噪声最大化的游戏模式,有兴趣的人可以试一试。电视噪声 Television Noise