查看原文
其他

【程序猿】《合金装备V:幻痛》制作技术特辑(下篇)

2016-12-28 Traceyang Gad-腾讯游戏开发者平台

合金装备系列是游戏史上最为经典的系列之一,小岛秀夫先生历经数十年时间为玩家打造了一个庞大的游戏世界,今天,小编为大家带来了合金装备系列最新作【合金装备5 幻痛(METALGEAR SOLID V: THE PHANTOM PAIN)】。希望通过这篇文章,能让小伙伴们能了解游戏背后的技术!
 

本特辑目录


制作 MAKING


① 背景和光照 (BACKGROUND & LIGHTING)


② 机械和武器(MECHA & WEAPON)


③ 角色(CHARACTER)


④运动(MOTION)


特效和模拟(EFFECT & SIMULATION)


演示(DEMO) 


备注:①②③篇内容尽在→【程序猿】《合金装备V:幻痛》制作技术特辑(中篇)


运动


在开放世界中的自由潜入的实现上,游戏主人公Snake为首的角色动作也担当了非常重要的作用。来看看在【合金装备4】的基础上大幅增加了动作数量并力图效率化的这个工程。
 
Making4
Motion
通过连接运动的增强来实现流畅的动作


为了实现本作中玩家自然的动作,提出了以增加运动数量为目标。前作游戏中玩家运动有1700种,本作最后差不多有2900种。使这么大的数量可行的是通过效率化来提升工作速度。


MGS4的基本运动是从急速到走到停止的3种运动。本作的移动是对应步行,慢跑,跑,冲刺的速度制作了4种样式,被准备来分别对应从急速到移动停止的连接运动。另外因为角色是被设计为正面,45度,90度以及45度倍数的方向前行的,作出了从移动开始迈步的10个运动, 开始跑的12个运动,以及开始冲刺的12个运动


而且,效率化的方法上,使用了通过倾向值(Trend)来做运动的混合或叠加,用有限的运动做出了高品质的动作。另外,还有实时的修正运动在游戏里播放的功能,以及程序化Rig等功能的附加,也和性能提升紧密相关。那么来看看每个的详细信息。
 
运动的基本设定


主人公Snake的运动扩展


【合金装备4】中的基本运动是一直持着武器的这样移动,在本作中,武器的变化也大幅度增加了,基本移动变成了空手的。主人公Snake方面,有站立,下蹲,匍匐,仰起的姿势变化,同一姿势端着武器移动也成为可能。图A~图C,是站立,下蹲,匍匐姿势的比较。图D是登上1.5米的台子时,通过进入角度来展示运动的差别的画像。除了正面,也准备了90度进入运动,表现出了自然的动作。为了表现出Snake的角色性格,不能太花哨或太普通的,合理的动作的同时,不能做的太过于时尚,可以说是最重要的一点。“不光是Snake的确定姿势,运动的尺度张驰和姿势也要稍微修正,注意最终看起来可以感觉很好”负责员工回顾到。


运动捕捉 Motion Capture


游戏运动的捕捉


  在进入运动制作前,开发团队内部先是试做的(Pre-production)进行临时运动的运动捕捉。把临时动作在真机上做确认,无论动作是如何轻微的印象也不会被抹消掉。于是,本作也有监督的意向,为了让角色可以作出外国人特有的动作,一部分基本移动是使用外国人做运动演员。还有,敌兵的步行运动也是实际的穿着重装备的状态来采集的,楼梯和斜面等大道具也准备了与实际游戏中登场的尺寸相匹配的物件来做采集,以控制后面工程的修正工作。“楼梯的上下走动,不同步幅的修正相当的费功夫,因为用更接近的情况来采集,就可以高效的工作了。”



演示部分运动的捕捉


  图A是为了制作大型机械的演示场景,把实际的背景的3DCG数据投影在采集区域,在很容易理解场景状况和移动规则的状态中让演员进行表演。图B是有狗登场的场景,对真实的狗捕捉。把标记设备附着在索具上,也尝试让在较温和的狗的衣服上附加这些,最终是使用假牙的粘合剂直接把标记设备附着在狗的皮肤上来进行采集的。“想采集一个动作,却怎么都不做出想要的动作,总之非常麻烦”。相当多的部分需要手工修正。图C的扑向围栏的狗,实际是用诱饵诱惑奖励来采集的。而且,可以把采集的捕捉数据传输到这个场景的模型在真机上进行确认,在乘车(图D)和骑马(图E)的场景中使用了(图FG)。还有就是因为无法进行马的运动捕捉,负责的动画师去骑马训练学校观察马的动作,用手工方式制作了运动。



动画(Animation)实现的工作流


动画做成的流程


  简单解说下Softimage制作的动画数据实现在真机上的流程的。图A是捕捉数据读入到Softimage,选择Clip,使用ClipTo Rig来生成Rig。还有,公司采集捕捉数据是要先做标记处理和Retarget的。使用图B的【FoxFramesView】的动画功能,对运动进行修正。FoxFramesView中搭载了姿势匹配(Pose Match),运动匹配(Motion Match),镜像功能(Mirror)等动画制作必须的功能。再从FoxFramesView进行动画的输出(图C),在FOX ENGINE的MotionEventEditor中加入事件(图D)。在各工程中进行检查和精炼,完成最终的动画。



运动图(Motion Graphic)


  本作中,为了可以直观的设计动画的转换,在FOX ENGINE上开发了叫做【MotionGraphEditor】的工具。把空闲(idle)和循环(loop)通过线来连接,一连串的运动转换就完成了。图A是站立移动时的设定画面全图。图B是显示这时状态的状态节点(State Node)。右半部分是右脚向前的状态,左半部分是左足向前的状态。米色(Beige)的节点是基本节点,青色的节点是为了可以平滑关联的必要运动用的节点,根据不同节点颜色作用也不同。在图A的状态节点的右边是现实状态节点内容的混合树(Blend Tree),用紫色节点来表示运动,绿色节点表示混合处理。图C是举枪状态的运动转换。可以看到和站立移动相比混合变得复杂。



处理大量数据的各种效率化方法


运动的Retarget


  所谓的Retarget,是把做完的动画适用到体格不同的角色上的功能。使用捕捉数据的话,实际捕捉的演员和角色的差别,要用多高的精度来Retarget呢。当初Retarget的精度低,了解了数据处理倾向后,手动的工作减少了,速度得到提升。画面中是把敌兵的运动适用到骨骼不同的少年兵上的状况。而且把Retarget的设定在Softimage上再现了,主要为了制作和Retarget的动作关联的动作而使用。



GamePlayView


  为了本作中在游戏中实现的动画可以在Softimage上做修正,把场景马上做转换和预览的功能被加入了(图A)。首先是选择输出运动的角色(1), 然后选择要反映到的运动文件(2),点击预览后(3)就可以向游戏实时的输出了(图B)。因为场景增加的调整可以确认,工作效率大幅提升了。


 

程序化Rig


  人型角色的Rig基本上沿用【合金装备4】的没有变化,人型以外的制作是使用【Procedural Rig Generator】来做成Rig的。这个是使用基础的IK绘制骨骼来Rig化,这种简单的工具,因为节点是在基本的规定的范围内生成,规格的统一也容易。图A是支持方向盘的车轮的Rig,图B是狗后足的Rig状况。“用程序化的话,因为在没有太大变更的情况也是支持Retarget,修正非常轻松”。



特效和模拟


  本作中武器使用的火焰和爆炸,以喷血效果为首,雨的濡湿和水滴的表现等,特效的展现也涉及到很多方面。一个个,都凝聚了非常细致的手法。
 
Making5
EFFECT&SIMULATION
为了给合金装备的世界添彩的各种创意方法


  在【合金装备5:幻痛】中,枪击战引发的火焰和爆炸,喷血来展现华丽的场景也有,广阔的地图中重点的对海和水边做了漂亮的绘制,另外一方面电影那样的演示场景中对应不同场面的特殊后处理效果提高了临场感受。这种丰富表现和演出是由特效组担当的,注意着“一边基于现实世界的真实表现,一边加入电影的华丽演出”的来制作。其中对应24小时变化是最为辛苦的地方。
  还有,处理负荷也成为非常头疼的问题。游戏开发中,半透明绘制和后处理绘制都是绘制负荷高的一类。特别是半透明的绘制出乎意料的高,所有平台都是导入到缩小的Buffer里,在把半透明用LDR(LowDynamic Range )来处理。这样看起来60fps的难度很高。“提高外观的品质的话负荷增加,降低负荷的话就不得不在消减外观的困境中奋战”(负责员工)。按照时间来做调整的本作的特效,完成了非常值得一看的表现,为了实现这样的品质,确实是各种方法和技术所驱使的。
 
特效制作的主要工具


特效编辑器


  本作总使用的特效编辑器成为了基于节点的GUI。编辑器内多个橘黄色的节点是发射器(Emitter),把这些集中在右侧的大的节点中构成一个特效。还有,绿色的节点叫做过滤(Filter)节点,用来指导连接的Emitter在哪个世代的硬件上使用,可以改变旧世代机和新世代机的特效的表现。可以在旧世代机减少粒子数量,今世代机上变为丰富的表现。编辑器变为基于节点上,据说【追加功能很轻松】,【通过节点的组合发现了没有想到的使用方法,表现的幅度很大】。



使用多个工具的Texture制作


  图A是本作中的火焰的表现,图BC是实际使用的火焰的Texture。图B是颜色通道,图C是Alpha通道。在Maya的Fluid里制作,再做成循环动画。本作的火焰,爆炸,烟雾,也有使用FumeFX,使用交叉渐变(CrossFade)模拟的像素内的密度和速度信息的方法,保证基于模拟的自然动作作出可以循环的动画。图D是水面的表现,图EF是这个场景以外,表现液体和血的Texture,图E是Alpha用的Map,图F是Normal用的Map。用thinkingParticles制作基本的动作,用FROST使用Mesh化的物体对象的屏幕空间的法线信息来制作。水花类的特效中全都有使用,通过shader内的反射率,透明度,Specular的调整也可以作为血和泥来使用。
 

 
关于水的各种表现
水的遮蔽


  降雨的情况下周围的物体对象的质感会变成濡湿的状态,就这样屋内也全都濡湿了。这种遮蔽雨的技术也被设计出来了。图A是美术师配置的遮蔽信息的板型多边形,设定了和建筑物的形状对应的MaskTexture(图C 图D)。画面左上角显示的,是基于Snake周围配置的板型多边形实时生成的高低差信息。基于这个在屏幕空间进行遮蔽处理。图B是显示Roughness信息的画面,白色领域是被遮蔽的,这个区域的地板和Snake的半个身子没有被濡湿。还有,在相机前的降雨也是,对进入领域的雨做透明化处理来对应屋内没有降雨的情况。图EF是沙尘遮蔽的应用例子,可以看到图F中眼前的沙尘消失了。另外废话几句,因为完全透明的特效也有绘制负荷,本作中加入了把顶点颜色的Alpha值为0的粒子做缩放(Scale)为0的处理。


 
海面的波浪和泡沫


  图A中,海面的形状是用快速傅里叶变化来求得,把倾向和高度Texture化在Shader里使用。几何体的变形只在近距离有,远处是稍微简单的Shader。利用了物理正确的光照模型,为了提升外观用美术师制作的Texture来加入颜色变化。海面波浪的白泡(foam)也被真实的描绘,这个是使用图B中的Texture来表现。泡沫的密度有3个阶段,保存在1张Texture的RGB通道中。水上的建筑物【Mother Base】的脚部是无视干涉,日落时太阳的反射也是,可以肆意的加大。
 


河底的摇晃波纹


  图A的河底的摇晃表现,是使用延迟渲染结果的画像。使用和延迟渲染同样的光照模型进行24小时的对应,为了减轻绘制负荷光源是只有环境光和平行光被反映。反射使用了Cubemap,把白天晴朗的Cubemap,根据时间和天气进行颜色修正后来使用。角色在水面上走时显示的波纹,在别的通道中上把渲染在屏幕空间上的BumpMap(图B)转化为法线信息,再和基础的法线通道做混合。
 

 
特效数据的差分变化


  画像中过场动画中用的水花特效,对应场景的状况分为3个等级的反射率来使用。这3个特效是使用1个数据制作的,把反射率不同的变化设定用差分信息来包含。这样即便是做出3个特效,也可以很小的控制内存使用量。



同时作出画面的说服力和负荷减轻的细致方法


对应曝光值的亮度变化


  游戏中的昼夜变化,室内外和日照,背阴的状况,画面内的曝光值经常会变化,【Constant  Shader】在不受光照影响时自发光的特效的时候,像图A那样明亮的场景特效发暗,相反的黑色场景中曝光过度的案例很伤脑筋。为了解决这个问题,加入了动态的把对应场景曝光值变化的Constant  Shader自身的亮度提升处理。图B是加入了曝光变化的对应,不论昼夜火焰都是相同的亮度被显示的。像“这个曝光时是这个亮度值”这样来决定上下的限制就可以调整亮度的范围,从光照小组哪里请教光照的范围来设定基准。作为副产物,相反通过在黑暗场景中设定明亮,在夜间可以让特效发光,得到了这样的效果。


 
粒子的简单物理


  背景和粒子的碰撞判断上因为在画面外的碰撞也要处理,不能使用Zbuffer的基于GPU的方法,采用了基于CPU的方法。为了最低限度的控制计算负荷,机能上被相当的压榨。因为粒子自身作为点来判断的,木片一类表现有刺入到地面的可能性,如果不想这样的话在地面平整的前提条件下调整旋转速度来表现。在功能上设置碰撞检测的次数,最后把粒子停止放置在地面上,然后再消失的来设定。再多说几句,合金装备5的世界中全局风向被设置为1个,粒子可以设定受到多少程度风的影响。还有对应天气改变风的强度,例如沙暴的风速是10m的程度。时间不会改变风的强度。



粒子LOD


  本作中的粒子也有LOD功能的对应,可以对应到摄像机的距离来减少粒子的数量。但是,因为造成绘制负荷高的是摄像机跟前的,摄像机近处也要进行消减一定数量的用法,可以说是逆转的想法。同样的因为枪的跳弹特效要在远处显示很难确认(图A),用距离相机越远越放大的方式来处理(图B)。考虑了倍率瞄准镜和双筒望远镜的变焦状况,采用了不仅仅是距离还有屏幕空间的面积比的处理方式。还有,在处理负荷高的场景中设定粒子产生数的百分比,对应状况自动减少数量的功能也有。



其他的特效表现


轮胎痕迹(Skid Mark)


  地面上残留的车辆的轮胎痕迹(Skid Mark),是沿着轮胎的通过地面实时的生成多边形,在Normal Map上绘制加上凹凸来进行表现。图A是实际的游戏画面,图B是调试显示生成的多边形的样子。



附加在摄像机上的水滴


  下雨时附着在画面上的水底,是屏幕空间上生成Grid,通过各点上带有的多少分量的水滴的信息来进行渲染。一些程度变得比较重的水滴会流动(向下面的Grid移动),通过表面张力的模拟,一边在吸收Grid上的其他水滴,同时也改变流动的表现。



高速(High Speed)表现


  游戏中的高速摄像机(缓慢)的表演的探查,是通过后处理来增加周围减光,色差,景深Bokeh。还有演出时的雨的表现变成颗粒状。因为气氛的色彩变化,效果有很高的印象。



LensFlare


  LensFlare有利用画面内的亮度差,自动产生的屏幕空间的类型,和演出时生成的类型两个种类。图A是屏幕空间类型的例子,把画面内高亮度的部分在摄像机中心反转改变光的颜色(图B)。再把这个画面合成来表现。这时,要和同样是后处理的Bloom同时适用把GPU负荷控制在最小。屏幕空间Lens Flare之外是演出中有意图的产生的Flare,看Emitter在画面的2D坐标系的哪个位置绘制来进行生成的控制。



演示(DEMO)


  说到合金装备系列的魅力上,好像看电影一样的演示部分也是不可缺少的。本作中让玩家更加深入故事以“无缝(Seamless)”为关键词,各种演出被实施了。
 
MAKING6
DEMO
感觉不到切换的“临场感”的演出


  本作的演示部分的制作上,玩家不真正感觉哪个空间的风光就无法演出临场感么,从哪里入口,游戏和演示的无缝关联,在这些要点上努力。因此演示不做基本的分镜分割,而是要在一个分镜里演出,游戏到演示,演示到游戏的相机转化也是成为无缝的调整,成为了玩家不会感觉到切换的构造。


  在开发时,演示组以前是以3ds Max为主要工具,但考虑到与使用Softimage的运动和角色组的交换数据,本作变更为Softimage。进而,因为庞大的工作被省略化了,和AutoDesk一共开发了基于Softimage的演示开发工具。"和AutoDesk方面可以很好的交流,内部构造也请他们调整了。演示部分做成了全部5个半小时的体积。这些制作的实现要归功于这个工具"负责的员工回顾到。
 
可视化预览(Pre Visualization)


  本作中,大体上全部的演示都是可视化预览来制作的。使用公司内制作的简易运动数据,在对运动捕捉实施时的数据量计算和演出的验证,现场中印象的共享都有被使用。然后把做成的预览数据与游戏组合,游戏体验的验证和调整也是在早期阶段进行。这些也在角色,机械,程序等各个部门中共享,吸收武器的使用,光照等各种专业的意见后反复的对游戏的平衡和演示的数据量做讨论。图AB是预览,图CD是相同场景的完成画面。



与AutoDesk共同开发的演示制作工具


  演示制作工具【SoftimageDemoTool】是由专用编辑器【Sequence】和分成3个的预览窗口构成。Sequence是DopeSheet, Animation Mixer,FCurveEditor等功能的复合体,对场景内的摄像机和模型进行集中式管理,可以高效的进行动画的加过和实施定制工作(图A)。作为工作工程,首先是角色模型和动画数据读入到Sequence加工。然后设定摄像机,调整播放速度在FOX ENGINE上输出,再调整光照和特效这样的流程。图B是分配的动画数据用Animation Mixer调整的状况。还有,演示工具中也搭载了可以给多个摄像机制作各自的分镜,在Time line上通过分镜编辑来确认关联的状态的功能。


强化临场感的视觉演出


游戏与演示之间的无缝转换


  本作的游戏和演示是无缝关联的,图A是游戏中的摄像机,图B是进入演示时的摄像机,图C是从游戏摄像机向演示摄像机位置转移的示意图。从玩家自由操作的游戏相机,通过程序计算出演示摄像机的坐标,无缝的转移。另外关于运动方面,从游戏中的运动对演示开始时的动作做混合,对演示开始时的坐标无缝的补充。同样的,时间经过(图DE)和天气变化(图F),服装和受伤等的状态(图GH),也会直接继承演示开始前的状态。演示终了时也会适用相同的处理,无缝的返回到游戏中。


 
后处理滤镜(Post Filter)


  本作的中以Lens Flare为首的各种后处理被大量使用。不光是配置在场景里的横向拉伸的LensFlare,在光源方向上加入光,相反的对一个一个场景加入画面过暗等问题的细节处理来作出临场感。图A是光照修正处理前的状态,图B是追加光源滤镜和Lens Flare。画面下方使用了让画面变暗的滤镜。图C是疼痛的滤镜适用前,图D是适用后。是用来表演出角色受击而制作的“疼痛LensFlare”被适用。
 

 
目标关联相机(Target  Constrain  Camera)


  TargetConstrain Camera,是指定游戏相机的注视点的Target,强制的吸着相机的功能。玩家和Target的位置关系依赖,可以把演示场景的相机构图自动算出并转移。因为玩家在一些场景会注视特定的点,可以说是无缝演出中不可缺少的功能。图A是Constrain Camera发动前的状况。这时游戏相机的注视点是红点。图B,是发现了作为Target的敌人,发动ConstrainCamera的状态,红球是吸着在白色盒子的中心,可以看到摄像机以Target为中心捕捉的。 


 

 

点击一下立即阅读近期热文

 

【程序猿】UNITY3D手游优化3 优化无止境

【程序猿】《合金装备V:幻痛》制作技术特辑(中篇)

【程序猿】《合金装备V:幻痛》制作技术特辑(前篇)

……


添加小编微信,发送“程序

即可直接加入GAD程序猿交流基地

获取行业干货资讯,观看大牛分享直播

↓长按添加小编GAD-沫沫

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存