文 |游鲨游戏 / 图| 网络/原创

0、引言

策划:这块石头,玩家要能砍碎,而且要有猛然崩裂之感。

程序:在真实世界里,物体受到冲击会破裂成若干小块,在游戏中,这种破碎效果是由物理引擎中的破碎系统实现的。

游戏物理引擎会模拟物体(刚体 RigidBody)的撞击,当撞击发生时,物理引擎计算出撞击的位置和冲量(作用在物体上的力在时间上的累积),将信息交给破碎系统,破碎系统判定是否需要破碎,如何破碎,如果需要,就将刚体切割和分解成若干合适的碎片,切割后由物理引擎继续控制碎片,模拟碎片在真实世界的运动。
图片说明

1、如何切割

策划:具体讲讲,怎么切割的。

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

图片说明
法线贴图(Normal mapping),一种模拟凹凸处光照效果的技术,可以在不添加多边形的前提下,为模型添加细节。

图片说明
电脑配置差性能优化不足的后果

好,进入正题。破坏系统在切割碎片的过程中,需要计算碎片刚体的质量属性和形状切割。

刚体质量属性即刚体的质量、转动惯量和重心,为的是尽可能真实的模拟碎片运动;而形状切割要保证碎片质量属性便于计算,且形状大小丰富,接近真实破碎效果。

除了要切割刚体的形状外,还要切割用于渲染的形状,切割渲染形状的面,可以在切割刚体的面上,增加一些细节,同时带上纹理和uv坐标,用于产生切割面的材质。
图片说明
图片说明
破坏向VR游戏《VR机器人》(VRobot),其破坏效果只能说勉勉强强

2、什么时候切割

策划:一般什么时候切割碎片?游戏中实时生成么?

程序:切割碎片一般有两种方案。

一种是预切割,在资源制作的时候制作好带贴图的碎片,在游戏运行时根据预先设定好的切割来分割。此种方式在运行时比较节省运算量(视分割的碎片数和美术效果),但是无论玩家如何着力,分割的结果都是一样的,和真实情况有很大差距。
图片说明

另一种是在游戏运行的时候做,实时生成符合当时条件的切割。这种方法可以根据实际情况生成不同的碎片,比较接近真实世界的情况,但是运算量也非常大,容易引起游戏的卡顿,非常依赖机器性能。

3、不规则边缘如何生成?

策划:在《我的世界》里,破碎生成的图形都是非常规则的,但真实世界中,破坏生成的碎片有大有小,边缘并不规则,而且还有细节,这是怎么生成的?

程序:破碎系统仅做切割和凸分解的工作,物理引擎本身不会去对破碎边缘区做细碎的东西,最开始的破碎都是四边形、六边形等等,慢慢的添加一些细节。
图片说明

而不规则边缘的视觉效果主要是在Shader着色器里去做,从渲染层面做出比较好的不规则效果。

对于实时大量破碎,就需要结合特效来做一些效果展示。比如一个很大的爆炸,基本上是破碎系统切割+特效,同时还要尽量减少切割,减少面数,否则依然会造成机器卡顿。
图片说明

4、举个例子

策划:举个破碎系统的例子给我听听。

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

请看彩虹六号物理程序员的泣血陈述:

在R6(彩虹六号)里你可以在很多墙的任意位置开洞来创造新的视线。你闲着蛋疼甚至可以用枪挖个狗洞爬出去。这是这个游戏最大的创新。为了支持这种创新,开发团队经历的是彻彻底底的血泪史。
图片说明

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

其次,拆墙显然会影响到很多GAMEPLAY方面的事情。射击,物理系统,人物移动,AI,NAVMESH都要根据破坏系统的结果做出反应,这又是一个CPU黑洞。

最后, R6是个竞技向的联网FPS游戏,如何在各种网络条件下正确地同步所有初始条件,从而保证所有的玩家都能看见相同的破坏效果,这又是一个天坑。
图片说明

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

5、墙上挖洞

策划:最后一个需求。这是一堵很厚的墙,玩家要能在墙上持续挖洞……

程序:
图片说明

6、结语

程序:破碎系统是游戏开发中实现破碎效果的一种方式,是物理引擎的一部分,本文对破碎系统的原理进行了简单的入门科普。除了破碎系统,物理引擎中还有很多其他重要的系统,如布娃娃系统、布料系统、粒子系统等。

策划:在策划的日常工作中,需要频繁对接项目程序、UI、美术,如果对这些部门的工作没有基本的了解,怎么能愉快的撕逼沟通呢。
图片说明

平台简介

游鲨游戏圈专注游戏策划知识分享,校招&社招零基础入行辅导、在职策划能力进修。详情请关注微信公众号【游鲨游戏圈】。