原文地址:Controller Rumble
本文來自於新《戰神》首席系統設計師Vince Napoli(現在在EA做Principle Combat Designer)的系列博文,《戰鬥回想》包含四篇文章,本篇是最後一篇,其他文章請見合集:譯介丨戰鬥回想
正文
手柄震動是每個遊戲都會使用的技巧之一。由於它的普遍存在,當它做得特別好的時候,卻往往會被忽視。特別是在戰鬥中,一個好的手柄震動往往影響你的感受強烈與否。
例如,《命運》中槍械開火和榴彈爆炸的手柄震動總是讓我感到非常爽。震動的頻率和強度與曳光、槍口火焰和命中火花非常匹配。
另一個出色的震動設計是《阿卡姆騎士》中的蝙蝠車。我記得它對於手柄震動的使用方式有相當多的難以察覺的細微變化,在飄逸、撞擊、助推加速等狀態下輕微的方向變化都會有響應的震動反饋。
至於《戰神》中的手柄震動,感謝George Mawle和Phil Wilkins(非凡的玩法程序員!)的無限耐心和努力,增強了震動系統,以便能夠開展許多瘋狂科學家般的嘗試和微調。所以,我想回顧一些或複雜或普通的手柄震動的實現過程可能會很棒。
首先,比其做出獨特的震動效果更重要的是保持一致性。一旦確定了所有要觸發震動的地點和事件,就必須保持一致。如果你已經確定擊中或碰撞敵人會觸發震動,那麼所有攻擊都應該觸發。如果不這樣的話,那麼其他所有不能觸發震動的攻擊就都被弄砸了。這會讓這些攻擊感覺更弱,這很不好。
我們在許多常見和不常見的地方都會使用震動,例如:
- 攻擊結算
- 與地面的嚴重接觸(武器,著陸)
- 任何類型的爆炸/粒子效果觸發。
- 蓄力動畫
- 大型環境互動——比如打開一扇大門
- 在近距離(約 10 米)被挑空之後落地的敵人
- 在近距離(約 10 米)被擊退或擊飛而撞牆的敵人
- 並且需要保持一致:無論是過場動畫中、還是處決動畫中還是基本的攻擊動作中,都是如此。這個規則始終適用。
震動類型
從PS4開始,其手柄的大(左)和小(右)馬達都可以用模擬量觸發。對我來說,右邊的馬達,尤其是在單獨震動的情況下,往往感覺更像是研磨或切割。左邊更重的馬達在單獨震動時會自然地表現出爆炸和鈍器撞擊的感覺。
為了在大多數情況下確保快速和一致,我發現最簡單的方法是使用共享震動庫。我發現一種有效的方法是讓兩個馬達的震動持續時間不同從而均衡地實現相同地振幅(中到高)。因為持續時間決定了震動“強度”,大概可以這麼說吧。對於一般的震動,我發現使用非常小的線性下降/上升是比較好的,並且基本上只需要在第一幀設置為最大值,並在最後一幀將其歸零。這樣最終會得到一些非常合適且易於模塊化的震動模式,如果你需要大面積的覆蓋震動時,這種做法就很普適。例如,下面這樣的設置:
- 震動_特大 = 0.65 秒
- 震動_大 = 0.4 秒
- 震動_中 = 0.25 秒
- 震動_小 = 0.1 秒
但是,在《戰神》中有幾個特殊的震動實現,能體現出花精力去單獨編寫一些定製化獨特震動是有意義的,我們嘗試通過讓其中一個馬達的震動佔比遠遠高於另一個來獲得獨特的力量反饋,或是編寫特殊曲線或衰減,又或將不同的震動相互疊加。
斧頭粘滯/基本連招
我先快速解釋一下我所說的“斧頭粘滯”是什麼意思——這是我們為新《戰神》創造的一個特殊功能,目的是創造一種更高級的頓幀。這個效果不是簡單地將兩個對象的動畫暫停一小段時間(傳統方法)來增強打擊敵人的感覺,為了試試能不能用一種更真實的表現來代替老的手法。我們結合使用了動畫混合和自定義IK,組成了我們的“固定”系統。當奎託斯攻擊敵人時,我們把斧頭固定在打點上(有微小的位置修正/預測),奎託斯和敵人都會在判定的一瞬間轉入一個展現打擊感的全新動畫,幾乎沒有或真的完全沒有補間時間。
在這個新動畫中,有幾幀我們稱之為“拖拽”,這段時間內奎託斯將繼續緩慢地移動他的手臂,但斧頭保持在原位。然後,僅僅幾幀之後(取決於是什麼攻擊),斧頭會跟上奎託斯的手臂並略微改變了奎託斯最初揮砍的軌跡。對我們來說,保持斧頭的碰撞判定也很重要,這樣它仍然是一個有效的攻擊。我們花費了大量的時間和精力來儘可能地在保持打擊感的同時減少“粘滯”的持續時間。
為了增強這種效果,實際上在粘滯過程中有兩種震動。第一種是快速、均衡的震動,沒有進出的過渡。然後緊隨其後,會以右側小馬達為中心的播放一個持續時間較長的持續衰減的震動。在配合動畫的情況下,玩家彷彿能體會到把斧頭從敵人身上扯下來的感覺。
斧頭投擲
讓R1快速投擲和R2慢速投擲在儘可能多的方面不同是很重要的——手柄震動也不例外。我們還想確保玩家能夠分辨出被動震動與打擊到敵人或撞擊到牆面和地面時的區別。
對於水平投擲而言,因為斧頭旋轉得非常快並且是一個快速投擲,所以我們設計了一個非常尖銳的震動,更多使用右側更輕的馬達。
但對於垂直投擲來說,我們想強調斧頭轉動時的重量感,就好像你能感覺到旋轉一樣。為了獲得這種效果,我們使用了一個循環鋸齒波,它均衡的利用左右兩個馬達以獲得更強的重量感——就像隨著斧頭的旋轉一起震動。
每當我們撞擊到牆面或地面和打擊敵人時,也是更多使用左側馬達,幅度上幾乎沒有上升和下降的過渡時間。這使打擊感更明顯。
斧頭召回
召回也使用了類似的兩種震動的結合。當召回開始時,會出現快速的強烈震動來模擬斧頭被拔出的感覺(伴隨著斧頭自身的顫動動畫!)。之後,我們使用循環震動,同時斧頭以較低的振幅在空中旋轉,更多使用更小/更輕的馬達。
然後,捕獲器會儘可能快地使兩個馬達的振幅達到最大值。所有的震動波形參考上圖。(再次特別感謝 George 出色的調試!) (譯者注:參考召回利維坦之斧最後的斧頭震動和登臺表演部分)
衝刺和格擋
最後兩個震動是最有爭議的,並且花費了最長的時間來打磨,因為衝刺和格擋的使用頻率太高了。團隊成員需要大量額外的迭代時間和遊玩反饋才能找到一個合適的平衡點。
在衝刺的方面,我們採用了更平滑(適度的轉進和轉出)的金字塔狀震動,並在每次震動之間有明顯的時間間隔。這是為了嘗試可不可以不去匹配腳步的感覺——就好像奎託斯開始衝刺後的第一步踩地格外的重。
打開盾牌的震動分為兩部分——一個低強度且平滑的金字塔形震動用來模擬盾牌的彈出,當盾牌變形完畢時則是一個更強的爆發性震動。
震動的信息傳達功能
最後,震動可以非常有效地用作信息傳達——表示蓄力完成、冷卻完畢、殘血\危險狀態等。在新《戰神》中,緩慢增強的震動表達重攻擊投擲正在蓄力,蓄力完成後——會發出更強烈的爆發性震動來表示蓄力完成了。這讓玩家能夠確實地上感受到遊戲機制,並且渴望進一步在戰鬥中熟練地利用它們。
我們可能對某些震動的調整有些過了,但最終結果似乎非常好。顯然讓玩家感到滿意需要做很多事情,但做好手柄震動始終是一個很好的起點!