当前位置: 华文问答 > 游戏

【彩虹六号 围攻】中的破坏系统是通过怎样的引擎实现的?

2016-08-06游戏

*UPDATE* =====================

本答案只是从物理程序员角度泛泛而谈外加若干不相干的东西,想要看技术细节可以移步

GDC Vault - The Art of Destruction in 'Rainbow Six: Siege'
GDC Vault - Rendering 'Rainbow Six

技术上说并没有太多的黑科技。就破坏系统本质而言无非是些在模型上打洞,挖孔和切割的数学方法。真正的难点是各种系统整合和GAMEPLAY应用,我想这也是TECH DEMO到成品游戏的距离。

==========================================

写我第一个长答案,算是给我的5年时光一个交代吧。

R6:S物理引擎用的Havok, 外加Havok FX 来增强各种动态碎片效果。如果注意一下的话会发现R6场景破坏的时候物理真实的碎片(带碰撞,可以跟环境有基本互动)数量远远超过市面上同类游戏,这就是Havok Fx 的效果。

至于破坏系统本身,用的是育碧自己弄的一套叫做RealBlast的系统。Realblast本身是一套破坏引擎。工具链方面,可以在MAX中预先把物品切碎,然后在游戏中通过物理引擎的数据触发破坏效果。基本上就是「我挨了一枪,把原先的COLLISION换掉,然后放一堆预先切好的碎片」 这样的逻辑。要注意这种物体一旦被破坏,所有的碎片都是被GAMPLAY系统忽略的,这些纯粹是视觉效果。

以上说的烂大街的破坏效果做法。花点钱可以从havok那里买到全套解决方案。

RealBlast或者说R6S做的真正的创新是在一个联网竞技向游戏里使用了Procedural Destruction。在R6里你可以在很多墙的任意位置开洞来创造新的视线。你闲着蛋疼甚至可以用抢挖个狗洞爬出去。这是这个游戏最大的创新。为了支持这种创新,开发团队经历的是彻彻底底的血泪史。

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

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

最后, R6是个竞技向的联网FPS游戏。如何在各种网络条件下正确地同步所有初始条件,从而保证所有的玩家都能看见相同的破坏效果,这又是一个天坑。同时,因为反作弊的需求,你需要把破坏引擎放在服务器上也执行一遍,导致R6非常非常非常烧服务器。R6各种坑爹BUG跟这个多少都有点联系,但是相比技术本身的复杂度和育碧愿意在这个游戏上投入的人力来说已经相当不错了。

总体上说,R6:S做的还是比较成功的。以上几个大坑虽说没有完美解决,但都控制到了可以接受的程度。

说句题外话,R6:S 在育碧的地位属于后娘养的。这个游戏没被腰斩取消算是奇葩中的奇葩了,至于还会不会有后续,听天由命吧。

跑题了,说回来。现在RealBlast已经把东西都算好了,包括:哪些东西破了,破成什么样,生成了哪些碎片,初速多少,等等等。。。

然后你就把这些信息都用上吧。NAVMESH该刷刷,COLLISION该换换,碎片全放出来。然后你发现游戏大概只能跑个三十来帧。更坑爹的是QA跑来跟你说玩着玩着帧率越来越低(废话哥哥你无限C4四处乱扔场景里垃圾堆成山了),或者不知道怎么回事突然一下卡成狗。你还根本不知道怎么复现,因为游戏自由度实在太大,而且他们测试的时候是10个人。。。。。

然后你就慢慢优化吧。

过了几个月帧率差不稳在60上下了。突然一天某个架构师跑来跟你说QA的测试数据里某个地图出现几个200ms的SPIKE,持续时间大约50帧 。。。。然后你就去找吧。我记得有一次因为某张地图里会随机出现性能暴降,完全没有头绪急得我抓耳挠腮。后来一个耐心奇好的同事帮我找了个办法复现。方法是:弄一把散弹枪,一寸一寸得把能拆的墙和地板都拆掉,运气好的话你大概半小时之内就会出现性能问题。。。。。这是HAVOK FX的锅。

项目发掉前几个月我是麻木的,印象里就只有各种坑。有GPP乱来的,有HAVOK的锅,有数据做得烂。因为这是个爹不亲娘不爱的项目,育碧内部肯来干活的很多都是些四六不靠得过且过的家伙。我记得因为模型做得太烂导致性能像狗屎一样,我情急之下发了一封信大骂LD/LA不干人事儿。结果是老大把一个总体负责LD数据的家伙连人带机器抓到我边上蹲了一个多月,逼他简化各种COLLISION。十几张图一寸一寸的撸,为得是榨取最后那两毫秒。

我发现我太罗嗦了。问题很简单「【彩虹六号 围攻】中的破坏系统是通过怎样的引擎实现的」。 答案真的都是血泪,说上三天也说不完啊。

个人背景信息:【彩虹六号:围攻】 物理程序,负责任何和物理相关的东西。为项目奉献五年,经历了彩虹六号爱国者时期,无政府主义时期,项目险些被取消时期,复活时期。经历4任PRODUCER, 4个不同的TEAM LEADER, 无数没走的,已经走的和走了又回来的同事。现自己也已离开育碧。

=====================================================

写了这个答案勾起很多回忆啊,歪个楼,想起来随时加点

1. 我记得四年前,R6正处在一个大家都不知道怎么继续,很多人纷纷离开的时期(当时里R6正式开始开发已经过去4年了,P4里最初的CHECKIN是2008年的,但那时候爱国者还没有被正式枪毙)。当时引擎TEAM已经不剩几个人了。老大突然跑来问我REALBLAST是什么玩意儿。我介绍了一下然后他表示很有意思。过了几天就让我去跟他们接洽一下。当时REALBLAST也就是个作坊大的,连不写代码的组长和专门帮他们做测试模型的美术加起来只有4个人的,闲着蛋疼坐着抠脚的小屁团队(现在牛X了,我走的时候看他们都能开两桌半麻将了)。

屌丝团队和没落项目一拍即合。从R6的角度来说,做个跟COD差不多套路的游戏的路子已经被枪毙,新方向一时半会摸不着。看看破坏效果还挺酷的,索性就来一发。

从RealBlast的角度来说,干了这么些年弄得几个DEMO也没火起来,好容易来个人好像想干一票大的,那就上吧。

于是这4个人很快搬到R6的地盘,接下来的事情也不用再说了。

2. 在早期,早到我还在吭哧吭哧把REALBLAST集成进R6的系统内那么早的时候,我就开始担心破坏系统和GAMEPLAY的兼容性问题了,因为从一开始我们就是有多人内容的,只不过后来变成只做多人了。于是我跟老大表达了我的担忧。老大跟我拍胸脯说,没事,我们就是做些坛坛罐罐,玻璃渣乱飞这样的事情,追求视觉效果,不会影响到GAMEPLAY的。

大概一年后,爱国者正式被枪毙。

一年半后,老大跑来跟我说,我们想在PVP里炸墙和地板,然后「钻过去」。。。。

3. R6在12年到14年是育碧内部各种新技术的实验场。反正也不知道将来要做成什么样索性有什么新技术都拿来玩玩。成熟的流程如年货系列引进新技术是会很谨慎的,但育碧内部有大量的靠谱的和不靠谱的技术原型又需要找地方证明自己。于是乎大家臭味相投如胶似漆,各种奇葩的东西纷纷上马。14年E3前后终于让他们全滚蛋了。对,大部分所谓的新技术都不用了,但是在我们的引擎代码库里留下了各种遗迹。

但是没有各种激进的疯狂的技术冒险,R6:S绝对不会最后发布。现在想想看,真的是过河卒子,只能勇往直前了。