當前位置: 華文問答 > 遊戲

【彩虹六號 圍攻】中的破壞系統是透過怎樣的引擎實作的?

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絕對不會最後釋出。現在想想看,真的是過河卒子,只能勇往直前了。