Cornfox & Bros.如何將手遊移植到Switch

Kalle Hämäläinen發表於2020-08-28
大家好,我叫Kalle Hämäläinen,是開發《海之號角2:失落王國的騎士》的資深程式設計師。在這篇部落格文章中,我將會介紹一下我們怎樣把這款遊戲(它本來是針對Apple Arcade支援的所有裝置開發的,從iPhone 6系列到最新的MacBook Pro都包括在內)移植到任天堂Switch的。


我們在著手工作時設定了下列目標:

  • 保持儘可能高的畫質水平。
  • 實現穩定的幀率。
  • 實現原生解析度(TV模式下1080p,掌機模式下720p)。
  • 通過動態解析度使用超取樣抗鋸齒取代多重取樣抗鋸齒(用於iOS中)或臨時抗鋸齒(用於Mac)。
  • 使用移動端渲染器取代PC渲染器,因為我們要優先確保解析度,而不是渲染功能。

為了進行Switch移植,我們與工作室Engine Software進行了協作。總的來說,我們制定的目標對Switch硬體提出了很高要求,因為它配備的是三個時脈頻率比較低的CPU核心。

Cornfox & Bros.如何將手遊移植到Switch

第一次迭代

我們的第一次Switch迭代僅達到13幀/秒的執行速度。而在iOS上,我們開發時的目標是30幀/秒。當Apple Arcade首次公佈時,我們還不清楚它支援的最老的裝置是什麼(後來知道是iPhone 6系列)。把目標定在30幀/秒能讓我們保持很高的解析度,而且最重要的是,電池的電量消耗不會太高。

解決方案

在30幀/秒的速度下,可以用33.3毫秒來渲染一幀畫面,而我們初步得到的結果卻很不幸,每幀需要近80毫秒。我們感到很困惑:這個遊戲已經針對移動裝置優化過了。我們忽略了什麼?後來的事情表明,忽略了很多。新型的蘋果移動裝置擁有比Switch更強大的CPU——這使我們可以忽略許多資源沒有得到高效利用的情況。於是我開始分析這款遊戲並尋找答案。

主機遊戲和移動端遊戲的區別是,在移動平臺上,效能會根據後臺應用程式、電池電量和裝置溫度進行調整。而在主機上,如果遊戲有穩定的效能,你就知道它會始終如一。

我開始進行優化,我的方法就是尋找所有執行緩慢的藍圖,把它們移植到C++。只用兩天時間,我就把渲染時間從最初的結果削減了20毫秒。這些立竿見影的成果讓我想到,肯定還有另一些可以輕鬆實現的優化是我們沒有做的。其中一個很快就被我找了出來:一些關卡有超過5000個Actor——這個數字遠遠超過推薦的數量。雖然iOS裝置處理這麼多Actor不是什麼大問題,但Switch版不經過大手術是做不到的。

我統計了每一幀中有多少Actor會發生更新,發現這個數字超過了1000。除此之外,還有近1500個會更新的元件。這就是我們要解決的問題。我們要做的第一件事就是減少每幀的更新數量。下面是我們的發現和節省渲染時間的方法:

  • 有些Actor在更新中基本上沒做什麼。對於這類Actor,我們要麼完全禁用更新,要麼就顯著延長更新間隔。
  • 有些Actor會手動查詢重疊。對這類Actor可以進行重構,使用重疊事件取代查詢,而且僅在事件發生後暫時啟用更新。
  • 有些Actor執行的操作只和視覺效果有關,但是玩家卻看不到。為了解決這個問題,我們使用了視錐體、距離、動態和靜態遮蔽剔除,然後只更新可見的Actor。
  • 有些Actor執行的操作從技術角度來說是可見的,但是距離太遠,玩家不會注意到。例如,在白市,任何時候的角色總數都超過300個,但是在玩家周圍通常只有10個左右——只有這些角色才是需要更新的。

虛幻引擎提供了一些方法來優化這些情況;但是,團隊有責任做出明智的決策,有時候需要選擇性使用或自定義程式碼。在這次移植中,我們新增和刪除了一些程式碼,同時也使用了內建的優化;例如,我們使用了動畫tickrate。

Cornfox & Bros.如何將手遊移植到Switch

另一個拖慢速度的因素來自地形青草系統。這個系統會在地形上動態生成數以百萬計的青草和其他植物網格體。我們發現它每幀要佔用多達2.5毫秒。我們注意到,我們對不同地形圖層使用不同型別植物的方法會生成許多空的批次。這個問題很好解決,只需要讓元件的每個特定植物型別的權重為零時提前退出即可。這個系統還會更新來自地形的所有元件。為了解決這個問題,我們首先確定任何植物型別的最大距離是多少,然後只更新那些在此範圍中的元件。我們把地形元件從4000個減少到了10個(在玩家身邊的那些),從而使渲染時間縮短到0.1毫秒。如果你覺得這些優化會令你的專案受益,那麼我們要高興地告訴你,我們已經在GitHub上的最新虛幻引擎版本中提供了它們。

最後但同樣值得注意的是,Engine Software實現了一種叫做Actor Tick Batching的技術,它曾被用於《盜賊之海》。Actor Tick Batching能減少指令快取缺失並開啟其他優化可能,例如減少重複工作或根據Actor距離執行更新速度優化。

Cornfox & Bros.如何將手遊移植到Switch

這一切努力造就了經過高度優化的《海之號角2:失落王國的騎士》移植版,它將在2020年秋季登陸任天堂Switch。感謝閱讀本文!


來源:虛幻引擎
原文:https://mp.weixin.qq.com/s/3lx3I3LFySDSkdm1fgqVxw

相關文章