zoukankan      html  css  js  c++  java
  • [转载翻译] 西川善司3D游戏技术系列【LOST PLANET2】图形讲座

    翻译:胡文杰

    点开小图有大图和视频链接

    最近、iPadを持ち歩いている人が多いが、多画面マニアを自負するボクは 23インチの液晶モニターを持ち歩いている。液晶モニターの機種はスタンドレスで利用可能な重さ3kg未満のLGのE2350VR(フルHD)。 ノートPCとE2350VRを持ち歩き、E3、SIGGRAPHといった海外出張でも多画面環境で仕事をするようになった。先日も横浜で行なわれたCEDECでも小脇に抱えて横浜のホテルにチェックインした(写真)。もう完全な重度の多画面依存症患者だ。筆者のブログはこちら

    在2006年,capcom为了不输给欧美的开发工作室,集结公司的技术精英,构建起了用于公司内部开发用的图形引擎框架【MT FRAMEWORK】,在业界引起了广泛关注。之后,[MT FRAMEWORK]给日本游戏开发现状带来了巨大的影响。在CEDEC2008, CAPCOM的程序及开发环境部门获得了了CEDEC AWARD的荣誉。

    之后,在2009年,【MT FRAMEWORK】发布了第2代进化版,也就是【MT FRAMEWORK2.0】简称【MT2.0】,而2010年5月发售的【LOST PLANET2】就是采用【MT2.0】开发的第一款游戏。

    这次,我在介绍【LOST PLANET2】的图形技术的成就的同时,也会一同介绍新版【MTF2.0】的最新动向。另外,关于【MTF 2.0】,大家也可以参照去年我以预告片形式发表的【MT FRAMEWORK2.0】篇。


    ■ 「LOST PLANET 2」的图形特性

    我们先从LOST PLANET2」(「LP2」)的场景多边形数来分析。

    背景虽然根据不同的场景会有所变化,但大致在28万-50万多边形。人物角色的面数在9400个多边形左右。前作中由于主角形象使用韩国明星的原因,主人公多边形数大致接近2万。本作稍微加以了控制。本作由于有协助角色,一个屏幕内最多可能会增加到4个主要角色,因此角色多边形数需要进行一定的优化。

    【最终渲染结果和线框效果】

     

     

     

    同样,机械兵器的多边形在1.5万左右,而前作是3万。虽然角色的多边形数略微有所控制,但另一方面,场景中出现的物体数增加了,画面中更多的动态效果增加的画面丰富感也不比前作逊色。此外,BOSS角色的多边形数将达到5万的程度(根据不同的种类会有所不同)。

    关于骨骼的数量,人物角色在20-30根,机械类在37-38根,BOSS将达到一百多根。由于机械类的武器会变形的关系,骨骼的结构变得更加复杂了。

    LOD对应了低,中,高(近,中,远)3个阶段。但是,巨大AK的情况下,LOD模型在切换时的体积变动比较大,并且不会离角色很远,因此,不属于LOD的适用对象。

    【人形角色的3D模型】

     

    左:最终渲染结果 右:线框显示

     

    左:角色使用的贴图。中: 法线贴图。右:DECAL贴图。 右:打开骨骼显示的效果

    「LP2」中,像第一章中的BOSS AK那样巨大的AK,由于玩家能爬上该BOSS,应用了能直接互动的结构。因此,对于能直接互动的巨大AK来说,加入了SKIN碰撞模型。这和本连载《旺达与巨像》的介绍中所说的【变形碰撞模型】相当。此外,巨大AK因为多边形数达到5万,直接使用该模型作为碰撞模型的话,消耗太大了,所以大致削弱到大约9000多边形的程度。

    【巨大AK】

     

    巨大AK的最终渲染结果(左),线框显示(中),骨骼可视化显示(右)

     

    DECAL 贴图

     

    法线贴图

     

    前作中,由于游戏的进行方式是玩家操作主人公走剧情路线,所以采用了在游戏进程不需要停止的情况下在后台无缝地读取并载入数据的系统(dynamic load)。本作中,系统构成变更为在单位区域中进行数据载入。这样做的原因在于【LP2】中采用的是4人多人游戏的模式,在游戏中,多人的各种行动将变得不可预测,对无缝动态载入数据造成很大的影响。本作的场景,正是由于多人游戏的模式,就必然要进行细致的区域划分。

    因此,在[LP2]中,即使是直接能看到远处的回廊,游戏中的全员如果不全部到达区域边界的话,会使用看不见的墙壁来遮挡前进的路线。

    在前作中不仅有这样令人厌恶的限制,在大的场景中用到的所有和图形相关的数据都必须放到显卡内存中,而在本作,只需要在场景开始时把这个场景中需要的区域的数据读入,譬如在贴图容量方面,就需要先在显卡内存中载入大约前作1.5倍的贴图量。具体而言,即使一个场景左右的贴图量,本作就增加了150MB以上的数据量。也正因此,本作较前作,在场景视觉上的细腻程度,丰富感等方面有了进一步的提升。

    石田智史谈到“本作中,对于图形的制作方法也只是做了很少的改进。也是因为本作是在PC为基础上进行开发工作的。贴图方面,最细致的都是在2K的像素尺寸为基础来设计的。在移植PS3版,XBOX360版时,会根据每个场景的贴图预算来转换到低像素尺寸的贴图版本。也就是说在之后发售的PC版,会根据PC的相应配置,最高会使用2K高分辨率的贴图。”

    竹内润谈到“现在正在进行PC版的开发工作,虽然XBOX360版的内容只提供了一张DVDROM容量的内容,让玩家感到欣慰的是我们在PC版上提供了2张DVDROM容量的内容。而在PC版上也商量过出版蓝光版的计划,无论如何,都会给用户提供多样的选择。在PC版上的给用户提供的福利也是最优越的啦”

    渲染分辨率方面PS3,XBOX360都是1280*720。XBOX360对应2X的MSAA。FRAME RATE在基础30FPS的基础上采用可变FRAME RATE。关于帧速率,由于PS3和XBOX360版是共通的,所以为了保证PS3版帧数,我们关闭了PS3版的MSAA。PS3版和XBOX360版都会根据场景的不同,会个别出现低于30FPS的情况。由于加入MOTION BLUR的效果来进行调整,使得帧速率的变动变得不那么明显。

    伊集院谈到“[LP2]的开发是从[MTF 1.X]时代开始的,这意味着并不是完全在[MTF 2.0的基础上开发出来的。]”图形的效果,SHADER等基础设计是在[MTF 1.x]时期开始进行的,中途运用了[MTF 2.0]的技术后,进行了功能的移植,之后得以将开发进行下去。

    石田说 以在[LP2]的开发中用到的作为[MTF2.0]的机能,去年说到过的[meta shader]的结构为例。PC版上开发的SHADER,在运用了META SHADER的构架后,在XBOX360和PS3的GPU上分别以最优化的构架得以形成。因此,这次PS3版的PERFORMANCE 和 [MTF 1.x]为基础的作品相比较,有了显著的提高。

    竹内谈到[MTF 2.0]中,项目工程会根据不同的场景,把美术部门各个成员制作的SHADER收集起来并动态编译打包,即使到了开发后期,设计人员仍然能不断地更新Shader数据。根据[MTF 2.0]的Shader 架构,会自动对每个场景的shader进行优化,这样做提升了shader的组成的自由度。但是,由于在进行调整的同时,又必须重新对shader进行收集并再编译。。。这将是今后研究的课题。

    关于[META Shader],希望各位参照去年的[MT FRAMEWORK 2.0]篇,这里就简单地介绍一下[MTF2.0]中搭载的统一构架的Shader System。使用最上层的着色语言[通常是在pc平台上最新的DirectX环境下]写的着色程序,其功能能够根据针对的平台的GPU来对着色程序进行自动转换,并编译成最优化的着色程序。能够有效地使用各个GPU的特殊指令,并获得最大的PERFORMANCE,这是其最大的一个优点。此外,游戏开发者(主要是指项目程序员)只要能够学会使用最上层的着色语言,就不需要习惯不同平台的GPU各自的用法。这是其优点之二。

    【VS兵器的3D模型】

     

    左 兵器最终渲染结果,右 线框显示

     

    骨骼可视化显示, 左侧DECAL 贴图,右侧法线贴图


    ■ HDR 渲染方法采用了相对亮度范围和亮度范围压缩两种方法的结合方法

    关于[LP2]的HDR(High Dynamic Range)的渲染,其大致和生化危机5相同,采用了相对亮度范围的方法。

    PS3版的RenderTarget为R8G8B8的通常的LDR(Low Dynamic Range)Buffer,而Xbox 360版使用的是R10G10B10A2的Buffer。相对亮度范围方法作为模拟HDR渲染的其中一种技法,使用当前屏幕FRAME的平均亮度,动态对HDR信息进行TONEMAPPING,并在LDR Buffer上渲染出结果来。

    例如,系统控制场景的平均亮度为100,SHADER中得到的像素亮度为100的情况下,输出值为输入值的1/100,即1.0。使用这种手法就能将显示结果压缩在[0~255]LDR的数值范围内。由于系统控制了平均亮度,所有超过平均亮度的数值(例如240以上)的高亮度的部分会进行HDR效果的处理。在实际显示得到效果和HDR渲染的效果十分接近。这个方法在[HALF LIFE2]之后被大多数的游戏广泛的采用。

    在初代[LOST PLANET 1]中,最初是作为XBOX360独占游戏来进行开发的,采用的是使用XBOX360-GPU专用的7e3格式的10bit浮点小数(FP10)为RenderTarget的真实的HDR渲染方式。对此,由于[LP2]在开发当初就对应了PS3,XBOX360多平台,考虑到PS3的GPU限制较多,最好还是采用了模拟HDR渲染的方式。

    【HDR(High Dynamic Range)渲染】

     

    左HDR渲染关,右HDR渲染开

    HDR纹理等采用的是[LOST LANET1]时的独特的压缩,解压的方式。具体的压缩解压技术,请参照本连载的[LOST PLANET]篇。

        [LP2]中,各种粒子效果采用的描画方法和[LP1]有所不同。作为XBOX360独占游戏的[LP1],在粒子效果描画方面,利用了GPU的EDRAM的像素处理器的特长,利用了[FILL RATE4倍描画]的技术来进行。这种方法是经过MT的FRAMEWORK开发组的考察验证过的方法,所以将影响以后XBOX360各种图像开发方面的设计。而[LP2]中,如前所述,考虑到可能会移植到PS3的原因,因此放弃了这种技术。

        因此在[LP2]中,粒子的描画使用的是和KONAMID的[METAL GEAR SOLID4]类似的[BLEND BUFFER]的方法。半透明的粒子的描画负荷虽然很高,但数量越多,视觉效果越好。由于粒子效果通常都是很模糊的,所以没有必要采用高分辨率来进行描画。因此,设计了专门用于描画粒子效果的1/4屏幕分辨率的BUFFER(BLEND BUFFER),在这个BUFFER上将粒子效果逐个进行描画。由于分辨率越低,描画的负荷也因此降低了。虽然只有1/4的分辨率,但相应地可以多描画近4倍数量的粒子效果,还是很实惠的。:)

        像这样,把效果先描画在低分辨率的缩小BUFFER上,然后和主FRAME BUFFER进行合成的PIPELINE,在现在的3D游戏图形中作为常用的手段,被广泛使用。最早粒子效果主要是表现雪,烟,爆炸,闪光灯等不是很清晰的实体,由于缩小BUFFER导致的分辨率降低的问题基本上肉眼是看不到的。最后把描画完粒子效果的BLEND BUFFER扩大后和主场景渲染的结果进行合成。

       在BLEND BUFFER上进行粒子描画时,需要对1/4分辨率的场景Z BUFFER的内容进行TEST,要考虑到角色,场景等物体的前后关系,由于分辨率降低到了1/4,场景深度信息的精度也降低了。这会导致BLEND BUFFER和FRAME BUFFER进行合成时,会有一些像素的前后关系会有问题,应该被遮挡的像素会溢出。由于是比较模糊的效果都是主体的粒子效果,所以我们就忽略这个小问题了。

        还有,BLEND BUFFER的渲染也考虑到了HDR的因素,我们没有采用通常渲染场景时采用的相对亮度的手法,而是引入了固定小数点的概念,把最大到2倍亮度范围的效果压缩到LDR上的手法。我们称之为[亮度范围压缩]。具体而言,是在粒子的渲染中,把亮度范围控制在0-2.0的范围内,来进行模拟HDR渲染的方法。这种手法在本连载的[ヴァルキリープロファイル2]篇中有详细的介绍。

        通常的场景模拟HDR渲染和BLEND BUFFER的模拟HDR渲染的方法是不同的,能表现的亮度也不同,因此可以预计合成后的画面从物理上来讲,不是一个正确的色调。但是由于肉眼分辨不出,所以就忽略这个小问题。


    ■ 全局照明采用的是静态LIGHTMAP和AMBIENT OCCLUSION

        [LP2]中,主要场景是室外场景,动态光源作为实时光照的主要光照。全局照明(GI)的处理分成了几个部分来制作。

        首先,相互反射,间接光等二次光源的效果,我们使用MentalRay,来进行LIGHTMAP的烘焙。这个LIGHTMAP的效果在游戏运行期间是静态的。我们没有使用[BIOHAZARD5]中的球面调和函数来表现局部的全方位环境光。

        角色,物件的GI,使用的是烘焙到顶点上的Ambient Occlusion。

        这里所说的Ambient Occlusion,指的是对于动态光源的结果使用AO,使遮蔽处变暗的效果。比如腋下部位受身体和手臂的遮挡容易变暗。同样的还有鼻孔内部等处容易变暗。

        现在流行的3D图形管线无法计算本物体之外的其他物体的遮蔽关系。因此考虑的是,在前期先得到AO的值,使用这个值来调整光照的结果(变暗),来再现模拟的AO的表现方法。[LP2]中,像素单位的AO的计算是通过顶点上的值进行插值计算来得到的。

    【LIGHTMAP】

     

    只有直接光照的渲染结果(左)、只使用预先生成的LIGHTMAP的测试效果(中央)、直接光和LIGHTMAP同时使用的渲染结果(右)


    ■ 阴影生成采用的是LIGHTSPACE PERSPECTIVE SHADOWMAP的CASCADE改良版

        阴影生成方法使用的是和[LP1]相同的[LSPSM:Light Space Perspective Shadow Maps]。这个方法的具体说明可以参考本连载的[LOST PLANET]篇,在[Xbox 360グラフィックス/物理エンジン講座]中也有详细的解释,这里简单进行介绍。

        为了生成没有锯齿的高质量的阴影,必须生成高精度的SHADOWMAP,但是,像室外那种超大的场景,生成SHADOWMAP的效率是最重要的因素。因此,诞生了各种改良型的SHADOWMAP技术。[在视点近处位置生成高分辨率的SHADOWMAP,在远处,随着距离拉远,使用相应的分辨率的SHADOWMAP来处理]这种在光源位置基准坐标系下进行SHADOW描画的方法就是LSPSM。

        [LP2]中,根据场景,使用LSPSM技法的SHADOWMAP最大能达到3张,采用分层的的方式来实现。具体而言,根据离视点的距离分为近,中,远三个领域,分别生成3张SHADOWMAP。每张SHADOWMAP的分辨率为1024X1024像素。

        SOFT SHADOW(半影)的表现,和[BIOHAZARD5]等相同,使用2×2~4×4图素的临近比率FILTER(PCF:Percentage Closer Filtering)来实现阴影的虚化。在游戏中,考虑到性能的因素,主要使用2X2图素的FILTER来过滤。而在过场动画时主要重视图像质量,所以会采用3X3或者4X4的图素FILTER来制作。

    【SHADOWMAP】

     

    左图是3张分层的SHADOWMAP。由上至下分别是近距离,中距离,远距离的SHADOWMAP的内容。右图是场景最终的渲染结果。


    ■ 摇动的水面和草木的结构

        [LP2]的场景和[LP1]是在同一个星球上。[LP1]的是设定在冰河期的星球,随着地球化计划的进行,逐渐温室化,森林,沙漠等场景逐渐出现。因此,相比前作,水出现的频率将增多。

        [LP2]中和水面相关的效果大致分为两种,一种是微小波纹表现,主要通过法线贴图动画来进行。就是给水面一个模拟的凹凸来表现波纹的方式。

        另一种是通过在模型上改动顶点而产生实际的高度差来表现波纹的凹凸。这个模型级别的波纹会根据[风向源],[一种不会对光照产生影响的,但是会从中心源到一定范围产生风力的SHADER参数]来生成。

        这种风向源,不但能影响水面的波纹,还能应用到类似草木的摇摆上。每经过一定周期,从这个风向源产生风力参数,在影响范围内的草木模型的顶点会根据这个风向源产生的力的参数来运动,水面的顶点也会产生相应的凹凸波纹。

    石田说,在[LP2]中,在场景中会放置大约8个风向源。根据这8个风向源周期性地产生的力来使草木摇摆,使水面产生波纹。类似这个风向源形式的东西也会运用在动态角色上,在和草木产生碰撞的时候使草木产生摇摆。

        动态的角色在和草木发生碰撞时,我们不采用按照正确的碰撞来进行物理上的模拟使草木产生摇摆,而是在碰撞发生时在碰撞点上动态的放置风向源,来使草木产生摇摆的。这种方法还是很合理可行的。[LP2]中有很多在丛林中冲刺的情况,在这样的场景中,草木会按照角色的运动方向在角色身后“追踪”般地摆动,整个效果营造出了非常特别的整体气氛。

        在去年的[MT FRAMEWORK 2.0]篇中,介绍了树木的枝叶会被打断,对折断的树枝进行柔体模拟后,和地面进行碰撞,散落在地面上的效果。那个效果放在最终版的[ONLINE 对战地图[IN JUNGLE]]中,战役关卡中,由于对帧数的影响较大,最后放弃了应用。

    【草木的随风摇摆】

    根据爆炸产生的风力,草木产生了摇摆。动态放置的风向源,使爆炸时风的表现及走动时草木的摇摆能够完美实现


    ■ [LP2]中景深和运动模糊的制作方法

        [LP2]中,由于采用的是相对亮度范围的方法来模拟HDR渲染,DOF的模糊和运动模糊的模糊处理,其亮度也要参照场景的亮度范围。因此,高亮度部分的DOF模糊和运动模糊会进行高亮度处理。

        DOF景深表现的方法,是根据LENS形状,在远离焦点的地方进行巨大的LENS形状的模糊处理。在形状是多边形的情况下,常规手段是在渲染图上进行多边形形状范围内的点采样,并进行模糊处理。主要的问题在进行大半径的模糊处理情况下,通常会出现采样不足和锯齿的情况。

       针对这个问题,在[LP2]中,我们对渲染的结果,会取出所有的MIPMAP,在大半径模糊处理时,会使用低分辨率的MIPMAP来进行采样,也就是所谓缩小版本的对应方法。这个和本站连载的[End of Eternity]篇中介绍的方法是一样的。

        运动模糊基本实现方法和[LP1]中是相同的。角色的模糊会根据运动方向,对3D模型进行拉伸变形,把变形的模型在屏幕空间上的速度信息渲染出来(VELOCITY MAP)。远景的运动模糊基本等于CAMERA运动模糊,所以就不变形,直接把CAMERA的运动造成的速度差描画在VELOCITY MAP上。这个技术是直接把[LP1]中的实现方法拿来用的。

    【景深模拟】

     

    景深模拟关(左)和开(右)


    ■ LP2的AI和物理模拟

        [LP2]的AI,[LP2]开发团队方面的AI工作一直持续到了开发的最后阶段。

        竹内说[LP2]的设计重点放在了线上合作游戏。单人游戏中AI控制的本方角色会跟随玩家,但不能给予玩家本人过多的帮助,也不能代替玩家做所有的事情,那样会破坏玩家的体验感。所以相当难平衡。

       MT FRAMEWORK的工具中有基本的AI设计工具。在这个工具里可以生成场景引导物体(事先生成的AI行进路线),设定等待点(AI行进路线分叉点),设定有限状态机(根据外部因素和内部有限的状态来决定行动方式的AI基本形态)。[LP2]中由于有地形的变形和迁移,还必须根据地形变化来对应相应的引导物体。

        物理模拟方面,[MTF 2.0]最基本的内容是在公司内部开发的,基础设计在[MTF1.0]的基础上进行开发,但也和[LP1]一样,也采用了HAVOK的物理模拟系统。

    【碰撞】

     

    最终渲染结果和SKIN碰撞模型的比较


    ■ 前篇总结

    接受采访的三位开发者。

        [LP2]的图形系统,作为使用[MT FRAMEWORK]作品的集大成之作,展现了CAPCOM拥有的所有最先进的图形技术。

    [LP2]的游戏图形引擎既要同时考虑到PS3和XBOX360的硬件特性,又要最大限度发挥各自主机性能特长,可以说,其地位相当于用来检验现时代主机性能的BENCHMARK般的地位。

        但是,[LP2]作为[MTF 2.0]的第一款作品,实际上基本设计是基于[MTF 1.X]的基础的。因此,实质上只相当于[MTF 1.X]的最后期作品。因此,[LP2]还没有完全体现出[MTF 2.0]的所有实力。

        在本连载的后篇中,我将对项目名还未公开的下作中将采用的'超越PS3,XBOX360极限的次时代渲染技术'进行介绍。 

  • 相关阅读:
    Delphi XE5 android 蓝牙通讯传输
    Delphi XE5 android toast
    Delphi XE5 android openurl(转)
    Delphi XE5 如何设计并使用FireMonkeyStyle(转)
    Delphi XE5 android 捕获几个事件
    Delphi XE5 android listview
    Delphi XE5 android 黑屏的临时解决办法
    Delphi XE5 android popumenu
    Delphi XE5 android 获取网络状态
    Delphi XE5 android 获取电池电量
  • 原文地址:https://www.cnblogs.com/oiramario/p/2061579.html
Copyright © 2011-2022 走看看