游戏开发中 实现炸掉一堵墙有多难?

在很多游戏宣传视频中经常有主角炸掉建筑物的酷炫场面 , 但在实际游戏中 , 玩家操控的游戏角色往往连堵墙都炸不掉 , 少有的可破坏场景 , 也需要在系统提示允许下 。 为什么玩家不能随意随意拆毁一堵墙 , 炸掉一座桥?本文将从技术上和可玩性上 , 解读实现这些场景需要游戏开发者付出哪些努力 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

一、技术上
在真实世界里 , 物体受到冲击会破裂成若干小块 , 在游戏中 , 这种破碎效果是由物理引擎中的破碎系统实现的 。
游戏物理引擎会模拟物体(刚体)的撞击 , 当撞击发生时 , 物理引擎计算出撞击的位置和冲量 , 将信息交给破碎系统 , 破碎系统判定是否需要破碎 , 如何破碎 , 如果需要 , 就将刚体切割和分解成若干合适的碎片 , 切割后由物理引擎继续控制碎片 , 模拟碎片在真实世界的运动 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

在往下讲之前 , 先普及一个游戏开发的小常识 , 游戏中所有物体都是由面组成的 , 面越多 , 细节就越真实 , 但对性能的要求也越高 , 因此游戏开发者需要不断平衡画面表现和性能消耗 , 用最少的面实现最优质的效果(这方面塞尔达传说旷野之息做得非常牛逼) 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

法线贴图(Normalmapping) , 一种模拟凹凸处光照效果的技术 , 可以在不添加多边形的前提下 , 为模型添加细节 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

性能优化不足的后果
如何切割
破坏系统在切割碎片的过程中 , 需要计算碎片刚体的质量属性和形状切割 。
刚体质量属性即刚体的质量、转动惯量和重心 , 为的是尽可能真实的模拟碎片运动;而形状切割要保证碎片质量属性便于计算 , 且形状大小丰富 , 接近真实破碎效果 。
除了要切割刚体的形状外 , 还要切割用于渲染的形状 , 切割渲染形状的面 , 可以在切割刚体的面上 , 增加一些细节 , 同时带上纹理和uv坐标 , 用于产生切割面的材质 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

游戏开发中 实现炸掉一堵墙有多难?
文章图片

破坏向VR游戏《VR机器人》(VRobot) , 其破坏效果只能说勉勉强强
什么时候切割
对于什么时候切割碎片一般有两种方案 。
一种是预切割 , 在资源制作的时候制作好带贴图的碎片 , 在游戏运行时根据预先设定好的切割来分割 。 此种方式在运行时比较节省运算量 , 但是无论玩家如何着力 , 分割的结果都是一样的 , 和真实情况有很大差距 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

另一种是在游戏运行的时候做 , 实时生成符合当时条件的切割 , 这种方法可以根据实际情况生成不同的碎片 , 比较接近真实世界的情况 , 但是运算量也非常大 , 容易引起游戏的卡顿 , 非常依赖机器性能 。
不规则边缘如何生成?
破碎系统仅做切割和分解的工作 , 物理引擎本身不会去对破碎边缘区做细碎的东西 , 最开始的破碎都是方的、六边形等等 , 慢慢的添加一些细节 。 而不规则边缘的视觉效果主要是在Shader着色器里去做 , 从渲染层面做出比较好的不规则效果 。
对于实时大量破碎 , 就需要结合特效来做一些效果展示 。 比如一个很大的爆炸 , 基本上是破碎系统切割+特效 , 同时还要尽量减少切割 , 减少面数 , 否则机器依然会非常卡顿 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

育碧游戏(Ubisoft)《彩虹六号:围攻》(TomClancy'sRainbowSix:Siege , 2015年首发)的破坏系统是其一大特色 , 游戏中易碎材质(如木头、玻璃等)所组成的表面皆可破坏 , 包含了墙壁、天花板与地板 。 这些材质除了使用炸药也可以用枪击或近战攻击破坏 , 若墙面遭到加固则需要特殊的炸药方可击破 。 要实现这样的破坏系统 , 彩虹六号的策划们是如何摧残程序员的呢?
游戏开发中 实现炸掉一堵墙有多难?
文章图片

请看彩虹六号物理程序员的泣血陈述:
在R6(彩虹六号)里你可以在很多墙的任意位置开洞来创造新的视线 。 你闲着蛋疼甚至可以用枪挖个狗洞爬出去 。 这是这个游戏最大的创新 。 为了支持这种创新 , 开发团队经历的是彻彻底底的血泪史 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

首先 , 我们讨论的是把墙在任意位置打破这种事情 。 要做到这一点 , 靠预先把墙切成几块是不行的 。 因此 , 所有的墙体破坏都是根据破坏力大小实时计算的 。 而R6的设计目标是在PS4这种垃圾上PVP模式下要能跑60帧 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

其次 , 拆墙显然会影响到很多GAMEPLAY方面的事情 。 射击 , 物理系统 , 人物移动 , AI , NAVMESH都要根据破坏系统的结果做出反应 , 这又是一个CPU黑洞 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

最后 , R6是个竞技向的联网FPS游戏 , 如何在各种网络条件下正确地同步所有初始条件 , 从而保证所有的玩家都能看见相同的破坏效果 , 这又是一个天坑 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

同时 , 因为反作弊的需求 , 你需要把破坏引擎放在服务器上也执行一遍 , 导致R6非常非常非常烧服务器 。 R6各种坑爹BUG跟这个多少都有点联系 , 但是相比技术本身的复杂度和育碧愿意在这个游戏上投入的人力来说已经相当不错了 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

育碧因为服务器经常卡顿 , 请牧师给服务器开光 , 堪比B站搬家请道士做法
二、可玩性
游戏中 , 如果要保持一个预期的体验氛围 , 原则上每一个可交互的内容都要对其有意义 。 这里的意义 , 是指玩家可以从这样的互动中获得东西 , 包括不限于经验值、得分、可能出现的道具、额外的信息、策略性玩法 , 以及加深对主题的印象等等 , 也即可玩性 。
实现这种互动需要特定的场景摆放--关卡设计 。 如果玩家可以随意破坏关卡 , 或者一种互动被设计出来 , 而玩家从中得不到任何有助于该体验和氛围的额外内容 , 那么这种互动 , 除了会徒增玩家的认知负荷 , 还有可能破坏原先想定的整体氛围 , 玩家也难以从中获得满足感 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

【游戏开发中 实现炸掉一堵墙有多难?】以育碧一款经典游戏--《雷曼》(Rayman , 1995年发售)为例 , 这是一款解密闯关类的跑酷游戏 , 在当时的版本中出现了利用空气墙与二段跳快速通关的bug , 也为育碧今后的一大批游戏正式奠定了买bug送游戏的基调 。
在育碧后来的波斯王子系列之中(刺客信条) , bug更是成为了游戏中的最大乐趣 , 玩家们常常会因为走错路而误入设计师的后花园 , 剧情的奇葩触发方式造成与npc对话的割裂 , 甚至主动利用空气墙来快速解决某些难过的任务 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

看门狗穿墙走
游戏开发中 实现炸掉一堵墙有多难?
文章图片

最后再举个多人互坑游戏--《兄♂贵敢死队》(BroForce) , 一款像素风横版射击游戏 , 游戏中玩家是一名铁血硬汉 , 通过不断解救兄♂贵并成为新兄♂贵(哲♂学) , 消灭boss通关 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

兄♂贵敢死队把破坏场景做成一种效果的体现 , 来给玩家快感 , 兼具游戏性 , 因此这个游戏的关卡设计本身就需要不那么在乎被破坏或者被绕开 。 但因为游戏中玩家可以破坏任何墙壁 , 梯子 , 因此也经常会出现路被炸光 , 只能自杀重来的尴尬场景 。
游戏开发中 实现炸掉一堵墙有多难?
文章图片

游戏开发中 实现炸掉一堵墙有多难?
文章图片

游戏开发中 实现炸掉一堵墙有多难?
文章图片

【长按关注作者】
游鲨游戏圈是游戏策划资讯分享、入行辅导平台 , 致力于行业知识分享 , 能力提升 , 简历及笔试面试强化 。 了解更多请关注微信公众号【游鲨游戏圈】 。


    推荐阅读