其他
关于我在《神秘海域4:盗贼末路》开发的那些事
出现在《神秘海域4:盗贼末路》的攀爬系统是《最后的生还者》没有的系统。 为了让攀爬系统与现有的同伴跟随系统能够一起工作,我们添加了攀爬跟随位置选择器,它会在玩家攀爬的时候给同伴寻找合适的攀爬位置。
这个系统比我想像中的要复杂一些。如果只是在玩家没有攀爬的时候告诉同伴使用常规的跟随逻辑而在玩家开始攀爬的时候告诉同伴使用攀爬位置是不行的。如果玩家快速的在攀爬与非攀爬的状态之间进行切换,同伴就会跟着
在这两种状态发生非常严重的振荡。所以我们在同伴的行为选择上增加了一些滞后,只有当玩家切换到攀爬状态,并且保持此状态移动了一定距离以后,同伴才会切换到攀爬状态。总的来说,增加滞后时间是解决行为闪烁振荡的好办法。
玩家的位置会被投射到样条曲线上,领导者的参考位置会比玩家的位置往前放一点,而往前放多少的距离是由设计师调整的。当领导者的参考位置超过一个被标记为等待点的样条曲线控制点,同伴会前往下个等待点。如果玩家在走回头路的话,同伴只有在领导者的参考位置与上一次移动经过的最远等待点相距过远的情况下,同伴才会走回头路。这也是利用增加滞后时间来避免行为的闪烁振荡。
我们也把动态移动速度调整的功能整合进同伴带领玩家前进的系统。根据同伴和玩家在样条曲线上之间的距离,“速度平面”会沿着样条曲线放置。同伴有三种移动模式:走路,跑步,冲刺。根据玩家撞到的速度平面,玩家的同伴会选择合适的移动模式来保持他到玩家的距离。设计师可以根据他们的想法来打开或者关闭“速度平面“。此外,玩家同伴的行进动画速度也会基于他与玩家距离做微调,这样当切换移动模式的时候,就不会有太突然的速度变化。
玩家的位置会被投射到样条曲线上,领导者的参考位置会比玩家的位置往前放一点,而往前放多少的距离是由设计师调整的。当领导者的参考位置超过一个被标记为等待点的样条曲线控制点,同伴会前往下个等待点。如果玩家在走回头路的话,同伴只有在领导者的参考位置与上一次移动经过的最远等待点相距过远的情况下,同伴才会走回头路。这也是利用增加滞后时间来避免行为的闪烁振荡。
我们也把动态移动速度调整的功能整合进同伴带领玩家前进的系统。根据同伴和玩家在样条曲线上之间的距离,“速度平面”会沿着样条曲线放置。同伴有三种移动模式:走路,跑步,冲刺。根据玩家撞到的速度平面,玩家的同伴会选择合适的移动模式来保持他到玩家的距离。设计师可以根据他们的想法来打开或者关闭“速度平面“。此外,玩家同伴的行进动画速度也会基于他与玩家距离做微调,这样当切换移动模式的时候,就不会有太突然的速度变化。
在《最后的生还者》中,乔尔可以伸手按着墙从埃莉和苔丝的身边走过,这没有问题,是因为她俩的体型都比乔尔的体型要小。但是我们觉得同样的动作就不适合身型差不多的内特,山姆,苏利,和埃琳娜。此外,《神秘海域4:盗贼末路》的游戏节奏比较快,让内特在掩体内移动的时候伸手去按着掩体只会让动作流畅性打折扣。 所以我们决定就只让玩家的同伴靠紧掩体,而玩家稍微规避下绕开同伴。
我们在这里使用的逻辑非常的简单。如果玩家位置往移动方向投射得到的点,落在位于掩体的同伴周围的一个方框内,那么同伴就会取消他当前在掩体中的行为,并且会快速向掩体靠紧。
医疗兵助手会尝试复制玩家在掩体中的行为,并且尽量待在离玩家很近的地方。所以当玩家被击倒的时候,他们就可以迅速跑过来进行救治。如果周围有同伴被击倒的话,只要玩家还没有被击倒,那么医疗兵助手也会过去救治这些被击倒的同伴。 如果玩家有给医疗兵助手装备救援包这个道具,那么医疗兵助手会在跑到被击倒的目标进行救治之前朝这个被击倒的目标丢救援包。救援包的丢掷基本上就是复用手榴弹的抛物线判空测试逻辑和丢掷动画,只是我把手榴弹的模型替换成了救援包的模型而已。
会让敌人起疑并展开调查的因素有两种:玩家的存在和尸体。 当敌人起疑了(起疑者),他会找最近的同伴来跟他一起调查。离起疑点较近的人会成为调查者,另外一个人则会成为看守者。起疑者可能会是调查者,也有可能是看守者。针对这两种场景我们设置了不同的对话来适应这两种情况(分别是“那边有异状,我去看看”与“那边有异状,你去看看”)。
为了让调查的开始和结束看起来更加自然,我们会错开这两个调查者的行动和威胁标示时间,所以这两个调查者不会在同一时间以一种很机械的方式来执行完全相同的操作。
如果引起调查者怀疑的是一具尸体,调查者将被提醒玩家的存在并会告诉其他所有人开始搜查玩家,会让所有人不可逆的离开不知情的状态。发现的尸体也将被凸显,以便让玩家知道敌人为什么进入警戒。
在某些难度下,短时间内连续触发调查,会让敌人的感应力变的更加敏锐, 他们会更容易发现玩家,即使玩家隐蔽在草丛中也一样。在极端困难模式下,敌人永远处于敏锐感知状态。
我使用的解决方法是,当玩家的吉普车撞到墙或者敌方载具的时候会短暂地限制吉普车的角速度以及线性速度方向上的改变。这个简单的方法相当有效,从此玩家就比较不容易旋转掉速而导致关卡失败了。(主要是限制速度方向的变化,不会让玩家的吉普车旋转)。
有几种方法都可以摧毁敌人的载具:杀死驾驶载具的敌人、射击载具并持续足够长的时间、开着你的吉普车撞飞敌人的吉普车以及开着你的吉普车撞敌人的吉普车让它旋转掉速。基于死亡原因的不同,载具死亡系统会选择载具和乘客的死亡动画来播放。死亡动画会与物理引擎控制的布娃娃系统想混合,所以死亡动画会平滑地过渡到物理引擎模拟的翻车。
载具播放死亡动画的时候,死亡的载具会有一定的几率穿透墙壁。我使用了一个球体投射,会将载具如果没有死亡所在的预设位置投射向载具现在的实际位置。如果投射结果是与墙壁碰撞,则会把载具稍微往墙壁的法向量方向移动一点点微小的量,而这个修正不是在一帧中全部完成,而是会持续几帧,主要是为了避免太过剧烈的位移。
我们还制作了一种特殊类型的载具死亡动画,叫做载具死亡提示。这些死亡提示是可以与周围环境进行交互的死亡动画。动画师和设计师在场景中沿着样条曲线放置好死亡提示,每个死亡提示在载具行进轨道上都有个进入范围。 当一个载具在死亡提示进入范围中死亡的时候,就会开始播放对应的特殊死亡动画。 之所以开发这个功能,主要是实现2015年E3展演示作品中的超帅气吉普车的死亡动画。
拜耳阵列是实现CCD 或CMOS 传感器拍摄彩色图像的主要技术之一。它是一个4×4阵列,由8个绿色、4个蓝色和4个红色像素组成,在将灰度图形转换为彩色图片时会以2×2矩阵进行9次运算,最后生成一幅彩色图形。该阵列于1976年注册专利。拜耳阵列模拟人眼对色彩的敏感程度,采用1红2绿1蓝的排列方式将灰度信息转换成彩色信息。采用这种技术的传感器实际每个像素仅有一种颜色信息,需要利用反马赛克算法进行插值计算,最终获得一张图像。拜耳阵列的问题之一是,在拍摄具有重复细节(如纺织品)的画面时,容易产生彩色干扰信息。该问题是由于其规则的分布方式而造成的。其具体表现为在画面中产生难看的色带,而解决该问题的方法是在传感器其安装一块会将画面细节模糊化的AA(或称低通)滤镜。
低通滤镜可以减弱摩尔纹,但同时也降低了相机分辨率
我们一开始使用的贝尔矩阵是个8×8大小的矩阵,取自维基百科里面。我认为这个矩阵太小,会造成不美观的带状瑕疵。所以我想要使用16×1大小的6的贝尔矩阵,但是网络上都找不到相关的资料。于是我试着用逆向工程找出8×8大小的贝尔矩阵的模式并注意到模式里面存在递归性。 光用目测法,我想我应该可以直接解出16×16大小的贝尔矩阵,但是我想要让过程更有趣一点,于是我写了一个工具,可以生成二的任意次方大小的贝尔矩阵。
切换到16×16大小的贝尔矩阵之后,可以看到对带状瑕疵有明显的改善。
就这么多内容了以上就是我在开发《神秘海域4:盗贼末路》的过程中值得一提的贡献。希望你能喜欢阅读这篇文章。:) 作者的简介
我是供职于顽皮狗的一个游戏程序员,对以下这些游戏开发内容比较有经验:基于限制的刚体物体、计算机图形渲染、程序动画、视觉反馈设计、游戏人工智能和游戏逻辑方面的编程。
近期热文:
经验分享丨项目实践项目孵化丨渠道发行做有梦想的游戏人-GAME AND DREAM-