zoukankan      html  css  js  c++  java
  • 【翻译】西川善司为了3D游戏粉丝的[生化危机5]图形讲座(后篇)

    http://www.opengpu.org/forum.php?mod=viewthread&tid=7558&extra=page%3D1 

    西川善司为3D游戏粉丝的[生化危机5]图形讲座(后篇)
    MT Framework 1.x的成熟图形魅力的新表现是什么?


    http://game.watch.impress.co.jp/docs/series/3dcg/20090601_170531.html

    翻译 Trace
    校对 千里马肝

    2009年4月收录


    会场:卡普空总公司

    在[生化危机5]图形讲座的后篇中,要接触到的是最近在本连载中刊登次数增加的全局照明技术(Global Illumination )技术。还有,让大家看看现在的3D图形里的经典表现,在「BH5」中的[阴影生成]、[水面表现]等独特的实现方法,还有大家在意的PS3和XBox360版的区别等。

     [生化危机5]中的Global Illumination技术


        在本世代的3D游戏图形中,开始倾向于重视环境光的处理。不仅有从设置在场景里的光源而得到的直接照明,还要考虑光源在复杂的反射后,布满空间的间接光照来实现照明的动感效果,使整体变得活跃。

        这种复杂的照明效果被称作全局照明(Global Illumination),通常被简称为GI。[GI方面的考虑],说起来比较简单,但现在的实时3D图形的标准渲染管线中,只有直接光的照明(Lighting)手段。为了转换由GI来执行,必须要有特殊的方法来实现。

        GI最符合定义的实现是[光线追踪(Ray Trace)]等方法,但想要把这个在实时3D图形上实现,现在的GPU性能还不够,所以现在的主流是采用预先计算的模拟GI的方法。日本的游戏里,致力于采用这种模拟GI方法的有[索尼克世界大冒险],这个在之前的连载里也有,在基础方面希望参考这篇。

        在「BH5」中,玩家虽然可以体验到动感丰富的舞台(Stage),这些都是在关卡设计师(Level Design)(舞台设计)的巧手中完成的,实际上很意外的是做成了一个整体的“箱庭”(译者注:这里可以理解为把游戏里一章的所有舞台都做在一个大场景里)。也就是说,即使玩家是认为自己在自由行动,实际也只是在游戏系统的手掌上打转。虽然听上去不太好听,但这样构造的原因是为了让设计师和美工可以更容易控制。

        场景是如此得接近玩家,为了让玩家的视觉印象感受深刻的地方,需要手动的进行环境光的设定。在表演舞台和影像的设置上,要在关键地方加入环境光。具体的,要先设定舞台中的重点位置的影响范围,再设定支配这个影响范围的环境光。

        这个环境光本身,开始是在MT Framework的工具上,使用CubeMap(6面构造的的全方位纹理)来进行设定,对进入影响范围的3D物体对象给予全方位6方向的环境光的形态。CubeMap的构成,是把这个场景给予的动态和静态光的影响,还有精确的全局照明一起进行预先计算(也可以让设计师手工制作CubeMap)。

    [CubeMap]




    上图是CubeMap的影响范围的可视化截图,在范围内的部分表现有被特别设定的全方位环境光。
    中图是最终效果截图。
    下图是场景内设定的CubeMap。

        由于「BH5」舞台的箱庭结构,需要大量给予环境光的CubeMap,而实际上这种CubeMap在运行时需要在内存管理上做大量辛苦的工作。所以在「BH5」中,把CubeMap用有9个系数的球谐波函数来做近似表现的实现。

        关于球谐波函数的基本概念,可以参考本连载的[杀戮地带2(KILLZONE2)]。简单得说,就是把全方位的放射能量分布近似化的进行不可逆压缩的方法。「BH5」中,把9个系数分配到RGB来存放,虽然多少会粗糙点,但能够复原出来自全方位的环境光。


    译者注:杀戮地带2和生化5都是采用了l=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/papers/envmap/)。使用这个方法,从3次(9个系数的)球谐波函数在Piexl Shader上复原全方位的环境光,就可以取得对应阴影处理对象法线的环境光。如果9个系数可以展开为10个左右的指令的话,那么恢复为CubeMap的方法在Pixel Shader上的成本更少。]

        根据石田先生所说,可以分析出,就算使用SPU等芯片制作CubeMap,也无法实现低GPU负荷的将CubeMap恢复的方法。顺便说一句,PS3专用的[杀戮地带2],采用了使用SPU来恢复CubeMap的方法。

    [SH Lighting] 





    此图是实现不使用纹理(Texture)内存,直接从球谐波函数得到所需方向的环境光的方法的实现。


    卡普空第一程序制作室 程序员 上田干夫先生

        对了,根据场景的不同,特定的环境光CubeMap要可以设置在哪些区域(Area)产生影响和那些区域不产生影响。特别是屋外不能应用特定CubeMap的区域很多。这些区域,要选择使用全局设定的环境光CubeMap。具体的,屋外情况使用全局环境光CubeMap,要设定从天井方向而来的天球光和地面方向的地面反射而来的地面光。

        还有,放在邻接的CubeMap之间的3D物体对象的情况,采用插值表现两者的球谐波函数系数,在通过球谐波函数,来计算出全方位环境光的方法。

        上田干夫先生[环境光以外的静态光源,也要一起细致的设定影响范围。例如,从小屋向屋外看时,Bloom的出现方式要由设计师来调整。在「BH5」中的情况,比起基于物理正确的照明,更重视为了在印象上使照明看上去更容易印象深刻的“基于设计师视觉正确的照明”。]

         关于环境光,和连载里刊登的[合金装备4(MGS4)]的手法非常相似。当然,虽然与[把预先生成CubeMap通过球谐波来获得]的实现等级不同,但舞台中环境光的配置,通过设计师来设定这些的影响范围等制作的风格上有相似的地方。虽然「MGS4」和「BH5」游戏类型上不同,但制作方对于画面要实现电影般的照明效果的重视,这方面是非常近似的,因此才有了一样的照明概念吧。

    [由球谐波函数得到的环境光照明]



    上图是没有球谐波函数的环境光,下图是根据球谐波函数得到的环境光(最终效果截图)
  • 相关阅读:
    1-5-03:均值
    1-5-01:求平均年龄
    1-04-t6993:二进制位处理
    1-4-20:求一元二次方程的根
    1-4-19:简单计算器
    1-4-18:点和正方形的关系
    1-4-17:判断闰年
    1-4-16:三角形判断
    1-4-15:最大数输出
    停止IIS服务
  • 原文地址:https://www.cnblogs.com/oiramario/p/2420531.html
Copyright © 2011-2022 走看看