G A M E S H A R K
文|遊鯊遊戲/圖| 網絡/原創
物
理
引
擎
中
的
破
壞
系
統
0、
引言
策劃:這塊石頭,玩家要能砍碎,而且要有猛然崩裂之感。
程序:在真實世界裡,物體受到衝擊會破裂成若干小塊,在遊戲中,這種破碎效果是由物理引擎中的破碎系統實現的。
遊戲物理引擎會模擬物體(剛體 RigidBody)的撞擊,當撞擊發生時,物理引擎計算出撞擊的位置和衝量(作用在物體上的力在時間上的累積),將信息交給破碎系統,破碎系統判定是否需要破碎,如何破碎,如果需要,就將剛體切割和分解成若干合適的碎片,切割後由物理引擎繼續控制碎片,模擬碎片在真實世界的運動。
1、
如何切割
策劃:具體講講,怎麼切割的。
程序:在往下講之前,先普及一個遊戲開發的小常識,遊戲中所有物體都是由面組成的,面越多,細節就越真實,但對性能的要求也越高,因此遊戲開發者需要不斷平衡畫面表現和性能消耗,用最少的面實現最優質的效果(這方面塞爾達傳說 曠野之息做得非常牛逼)
為啥牛逼,因為面少表現還好啊。
法線貼圖(Normal mapping),一種模擬凹凸處光照效果的技術,可以在不添加多邊形的前提下,為模型添加細節。
電腦配置差性能優化不足的後果
好,進入正題。破壞系統在切割碎片的過程中,需要計算碎片剛體的質量屬性和形狀切割。
剛體質量屬性即剛體的質量、轉動慣量和重心,為的是儘可能真實的模擬碎片運動;而形狀切割要保證碎片質量屬性便於計算,且形狀大小豐富,接近真實破碎效果。
除了要切割剛體的形狀外,還要切割用於渲染的形狀,切割渲染形狀的面,可以在切割剛體的面上,增加一些細節,同時帶上紋理和uv坐標,用於產生切割面的材質。參見遊鯊往期文章:次世代3D遊戲角色的製作流程
破壞向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、美術,如果對這些部門的工作沒有基本的了解,怎麼能愉快的撕逼溝通呢。