Fox Engine是為合金裝備最新作,《合金裝備5:幻痛》開發的游戲引擎,其中作為開發組,他們負責的任務包括:開放世界、時間與天氣變換、照片級真實的游戲品質以及多平臺對應。
“通過以前方法的保留,技術的基礎提升,來實現更高度的游戲事業,因為這樣考慮而開始 Fox Engine的開發"。通過引進歐美的開發風格來提高開發效率,更短的迭代來增加游戲的樂趣。成為了合金裝備5的開發概念,以及引擎的設計思想的根基。
基于物理渲染和線性工作流
基于物理的渲染(Physically Based Rendering :PBR),成為了本世代游戲引擎標準的概念。
PBR中是物理和數學的整合性為核心,例如,物體表面的入射光與通過反射的放射光的放射光的能量總和是相等的計算。借此游戲方面的優點也很明顯。被太陽的強光照射的物體也好,被人工的弱光照射的物體也好,在相同顏色空間內都可以自然的繪制,實現了有說服力的開放世界的視覺。把通過PBR得到的光照結果,通過適當的虛擬曝光值控制在顯示器上顯示的基本結構。
PBR系統的構筑:
因為游戲引擎是以實時渲染為前提的,構筑PBR系統的幾個部分也需要大膽的近似處理。這里游戲引擎必須要集中自己的方法。本作的開發團隊參考大體上每天都可以看到的公司會議室,首先通過把這個場景在FOX?ENGINE上完整再現來進行PBR系統的構筑。實際的照片(圖A)和引擎上的繪制結果(圖B)的比較,可以看出得到了很高的精度。
擁有正確的物理參數的材質庫的構筑:
以PBR為基礎進行開發上是技術美術方面成為基礎,把調整后的典型質感的材質匯總成預設庫(圖A)。擁有各種反射參數的材質,是通過在暗室里把實際的樣品打光來觀察(圖B),再進行制作。
各個材質也包含根據不同的照光角度的質感變化做的調整(圖C),圖D是攝影素材,圖E是FOX ENGINE的繪制結果。
線性Texture的制作:
PBR的前提是在線性空間進行光照,要得到正確的光照結果,必須要廢棄了光照影響的Texture (圖A)。為了制作,本作的開發團隊設置了專門的攝影房間(圖B),進行各種素材的攝影。攝影時使用了專門的灰度卡(圖 C),調整Tone Curve在與相同曝光下的攝影素材相符合,來做成線性素材。凹凸的影響產生陰影的部分是通過手工作業來去除光的影像 (圖E)。
用粗糙度制作質感表現:
成為表現有說服力的豐富多彩材質時的重要參數的,是表現物質表面微小凹凸的Roughness參數(圖A)。Roughness是給予直接反射光(Sepcular)的擴散強度影響的參數,一邊移動光源一邊參考攝影的樣品來決定的。依賴視線方向的微小凹凸的影響的變化,外觀的反射的敏銳變化的現象也作為引擎的Shader功能實現了。
保證品質和速度的延遲渲染(Deferred Rendering):
延遲渲染是把場景中的每個材質參數分別輸出到各個Buffer (GBuffer)后,通過后處理的方式進行實際的光照處理(延遲光照),在高速處理大量光源的復雜光照的同時, 也必須把使用的參數節省到最低限度。圖中是實際引擎使用的一部分參數的顯示。圖A值染結果,圖B Albedo,圖C Specular,圖D Normal,圖E Fresnel。
3D Photo Scan:
為了利用基于物理的渲染,3D資源用什么程度的真實來制作。這個問題的解答就是3D掃描。(本文篇幅有限,這部分內容較多,暫時不講。如果有興趣,可以去網絡上搜搜關于3D掃描的相關技術)
背景和光照
玩家可以投入的沒有不協調感的世界構筑
本作的一大魅力,可以說是開放世界中的自由潛入。把廣闊地圖在有限的資源中用高品質沒有暫停的展開,可以想象這里工作的龐大,其中凝聚了無數的方法。“把地圖分割為128米的正方塊,以玩家為中心的5X5塊為Active的領域。但這光這個表現劇中的 舞臺來說寬闊程度完全不夠,全都都認真來繪制會產生過度的Draw Call。不過因為是以“潛入”為游戲的特色,不需要看清百米外的遠方”技術指導這么說道。
因此,把模型的信息量分為了3個等級,構筑了對應距離切換等級來繪制的結構。而且,對于游戲時集中的資源(事件發生的建筑物等),也準備了加載到其他內存的結構,這些因為是有一定的距離所以要調整加載時間。“為了可以得到最好的游戲設計, 在關卡設計和背景設計進行緊密的推敲來進行開發”負責的員工說到。那么來詳細的看看這些技術。
廣闊的地形模型的制作
使用World Machine的關卡設計:地形模型的制作上使用了World Machine (圖A)。
在FOX ENGINE上由游戲設計師加上粗略的凹凸, 并輸出為Height Map (圖B)。把這個圖在World Machine里讀取,程序化的生成自然形狀(圖 C)。
把加入細節的結果(圖E),轉移到 Mudbox (圖F),把不符合玩法的部分通過雕刻進行細微調整并提高精度,再次作為Height Map 輸出(圖G),讀入到FOX ENGINE。
使用World Texture來降低處理負荷
把全部場景分割為64張 【World Texture】來作為Texture 來使用。圖A的箭頭符號的位置是 玩家站立的情況,周圍320m的黃色的激活區域使用通常的Tiling Texture,外面的部分,全部是作為World Texture分割的Texture 按最近距離的順序進行加載。“因為激活區域以外的領域是用World Texture使用簡單的Shader來繪制,這樣在消除(Tiling的)重復感的同時也降低了處理的負荷”。負責的員工說道。
圖B是阿富汗場景分割的狀況。1張Texture的尺寸在PS4/Xbox One中是2048像素的正方形。還有World Texture是在World Machine中制作Mask圖像之外,還追加了通過手工制作Tiling材質的領域信息(圖C)。
無縫讀取地形的Block系統
地形模型上,為了感覺不到加載,把可以游戲的Block進行分割讀取。Block的構成方面,以玩家的位置為起點,內側開始稱作Small Block (紅色),LOD0 Block(黃 色),LOD1 Block(綠色)。藍色的Large Block是故事上重要的場所被任意大小來讀取的領域。最小單位的Small Block是128mx 128m,讀取最精細的模型。讀取輕量1個等級模型的是LOD0 Block,是Small Block的2x2, 4塊加起來大小的尺寸。然后再輕量一個等級是LOD1 Block,是LODO Block 4張的大小。采用了分別把玩家為中心的5x5 的25個block讀取,再對應距離從輕M:到桁細的把模型數據不斷的傳遞進去的系統。
圖B是遠景用的LOD模型配置的狀況,圖C是LOD 0 Blockl部分的模型的粒子,在地圖上配置的背景資源是在每個Block進行合并(Merge ),合并數據的制作和LOD的變化,是構筑作為本世代機和舊世代機的平臺數據,自動生成的結構來對應的。
正確的再現取材風景
為了制作真實的背景,背景組是對作為模型的區域(非洲和約旦)做了實地的外景拍攝。除了地形之外,還拍攝了作為確認植物生長狀況參考使用(圖A)和Texture使用(圖B)的照片。
然后,通過在暗室里進行線性Texture的攝影,使用它制作資源,在輸出到前面介紹的會議室環境里進行確認后(圖C),按照參考照片的印象進行風景的再現。
圖D是參考的照片,圖E是在FOX ENGINE上再現的結果。“關于Specular方面,采用的是簡單的normalized blinn phong模型,稍微改良了normalize來使用。”作為PBR的優點,只要正確的設定來組成,美術不需要反復調試也可以獲得需要的品質這點值得推薦。另外,果然美術師無論如何想在Texture 里繪制陰影和光澤,因為還有繪制的動作,當初成為很可笑外觀的情況也很多,這個部分意識和認識的更新是很辛苦的(負責員工)。
本文作者:Garfield(點融黑幫),現任職于點融技術部Social團隊,自然科學、生命科學愛好者。