遊戲開發中 實現炸掉一堵牆有多難?

遊資網發表於2020-05-22
在很多遊戲宣傳視訊中經常有主角炸掉建築物的酷炫場面,但在實際遊戲中,玩家操控的遊戲角色往往連堵牆都炸不掉,少有的可破壞場景,也需要在系統提示允許下。為什麼玩家不能隨意隨意拆毀一堵牆,炸掉一座橋?本文將從技術上和可玩性上,解讀實現這些場景需要遊戲開發者付出哪些努力。

遊戲開發中 實現炸掉一堵牆有多難?

一、技術上

在真實世界裡,物體受到衝擊會破裂成若干小塊,在遊戲中,這種破碎效果是由物理引擎中的破碎系統實現的。

遊戲物理引擎會模擬物體(剛體)的撞擊,當撞擊發生時,物理引擎計算出撞擊的位置和衝量,將資訊交給破碎系統,破碎系統判定是否需要破碎,如何破碎,如果需要,就將剛體切割和分解成若干合適的碎片,切割後由物理引擎繼續控制碎片,模擬碎片在真實世界的運動。

遊戲開發中 實現炸掉一堵牆有多難?

在往下講之前,先普及一個遊戲開發的小常識,遊戲中所有物體都是由面組成的,面越多,細節就越真實,但對效能的要求也越高,因此遊戲開發者需要不斷平衡畫面表現和效能消耗,用最少的面實現最優質的效果(這方面塞爾達傳說 曠野之息做得非常牛逼)。

遊戲開發中 實現炸掉一堵牆有多難?

法線貼圖(Normal mapping),一種模擬凹凸處光照效果的技術,可以在不新增多邊形的前提下,為模型新增細節。

遊戲開發中 實現炸掉一堵牆有多難?
效能優化不足的後果

如何切割

破壞系統在切割碎片的過程中,需要計算碎片剛體的質量屬性和形狀切割。

剛體質量屬性即剛體的質量、轉動慣量和重心,為的是儘可能真實的模擬碎片運動;而形狀切割要保證碎片質量屬性便於計算,且形狀大小豐富,接近真實破碎效果。

除了要切割剛體的形狀外,還要切割用於渲染的形狀,切割渲染形狀的面,可以在切割剛體的面上,增加一些細節,同時帶上紋理和uv座標,用於產生切割面的材質。

遊戲開發中 實現炸掉一堵牆有多難?

遊戲開發中 實現炸掉一堵牆有多難?
破壞向VR遊戲《VR機器人》(VRobot),其破壞效果只能說勉勉強強

什麼時候切割

對於什麼時候切割碎片一般有兩種方案。

一種是預切割,在資源製作的時候製作好帶貼圖的碎片,在遊戲執行時根據預先設定好的切割來分割。此種方式在執行時比較節省運算量,但是無論玩家如何著力,分割的結果都是一樣的,和真實情況有很大差距。

遊戲開發中 實現炸掉一堵牆有多難?

另一種是在遊戲執行的時候做,實時生成符合當時條件的切割,這種方法可以根據實際情況生成不同的碎片,比較接近真實世界的情況,但是運算量也非常大,容易引起遊戲的卡頓,非常依賴機器效能。

不規則邊緣如何生成?

破碎系統僅做切割和分解的工作,物理引擎本身不會去對破碎邊緣區做細碎的東西,最開始的破碎都是方的、六邊形等等,慢慢的新增一些細節。而不規則邊緣的視覺效果主要是在Shader著色器裡去做,從渲染層面做出比較好的不規則效果。

對於實時大量破碎,就需要結合特效來做一些效果展示。比如一個很大的爆炸,基本上是破碎系統切割+特效,同時還要儘量減少切割,減少面數,否則機器依然會非常卡頓。

遊戲開發中 實現炸掉一堵牆有多難?

育碧遊戲(Ubisoft)《彩虹六號:圍攻》(Tom Clancy's Rainbow Six: 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通關。

遊戲開發中 實現炸掉一堵牆有多難?

兄♂貴敢死隊把破壞場景做成一種效果的體現,來給玩家快感,兼具遊戲性,因此這個遊戲的關卡設計本身就需要不那麼在乎被破壞或者被繞開。但因為遊戲中玩家可以破壞任何牆壁,梯子,因此也經常會出現路被炸光,只能自殺重來的尷尬場景。

遊戲開發中 實現炸掉一堵牆有多難?

遊戲開發中 實現炸掉一堵牆有多難?

遊戲開發中 實現炸掉一堵牆有多難?
【長按關注作者】

遊鯊遊戲圈是遊戲策劃資訊分享、入行輔導平臺,致力於行業知識分享,能力提升,簡歷及筆試面試強化。瞭解更多請關注微信公眾號【遊鯊遊戲圈】。

相關文章