GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

遊資網發表於2019-07-22
GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

(騰訊北極光工作室長期招聘中......)

如果讓我來選GDC19最喜歡最牛的系列,那麼毫不猶豫就是《蜘蛛俠》系列了。

起開發商insomniac也是我最喜歡的開發商之一,成立於1994年,絕對的業界老兵,有不錯的作品(雖然特著名的還是不多),技術很是不錯,而且樂於分享,我個人的開發過程中真是學了很多,看下它的作品:

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

在GDC19上,insomniac幾乎把spiderman開發的方方面面都和大家做了分享,相當給力!!

而且這部spiderman截止到7月份,買了900多萬份,可喜可賀。

一、overview

解讀的內容

我這裡除了是一個學習和筆記(節省大家學習時間),也會結合這些年的開發經驗,就其中一些內容做一些解讀。

spider-man的挑戰:一個在曼哈頓,自由快速穿梭的AAA遊戲

https://www.bilibili.com/video/av58521396www.bilibili.com

這三個特點是互相矛盾的,全部達成就要拼硬實力

  • 曼哈頓挑戰者,意味著大地圖,高密度的海量物件&大視野–製作流水線和LOD策略厲害
  • 在海量物件中間快速穿梭–streaming厲害
  • 3A:讓整個挑戰全部難度上一個臺階

3A在開發中意味著什麼?

前一段時間,公司內部開展了一輪“3A大討論”,大家從玩家視角,談論了很多3A遊戲到底是什麼,從常見的高質量的視覺效果,到海量的遊戲內容等等都有覆蓋。

我個人看法則是:“當前頭部品質的產品”,其核心就是“頭部“二字,你必須要是當前市場上頂尖的一批才能說自己是3A。

3A是一個要與時俱進的東西,開發中就意味著“容易變化”。

所以在spiderman的多篇技術和美術的分享中,都談到隨著開發,各項指標都快速突破原先的設定,快速上漲,這對於技術團隊的實力,以及整個團隊的專案把控能力都是一個挑戰。

實際上,這也是我們開發《天涯明月刀》《無限法則》時候的常態,市場上有新的遊戲(包括console上的大作)出來,新一屆gdc&siggraph,所有能讓我們做的更好的地方,而且是我們可能做到的,都要作出改變和實現。

技術挑戰&解決方案彙總

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

二、工具篇

在《蜘蛛俠》中,工具對於遊戲的品質可以說是愈發重要,說是和runtime相提並論也不過分,也正是工具的出色發揮,能支撐spiderman的優秀品質。

這裡主要談三個方面:

  • houdini流水線來生成場景以及細節
  • lod&光照
  • 編輯器升級歷史

houdini流水線

從<ghost recon:wildlands>開始,houdini近幾年談的比較多了。

spiderman可以說用的比較重度,覆蓋的範圍非常的廣,可以說主體都覆蓋了:

  • 路面,路徑,路面細節
  • 建築,各種裝飾
  • 車輛,特效等
  • 一些gameplay事件

houdini的流水線也比較複雜和長:

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

這部分的構建可以說比較強大了。

然後在實際應用中有幾個要點:

  • 分治:做好模組化,一個區一個區的來生成
  • 簡化:儘量保持流程簡單,減少耦合,減少策劃美術的選項
  • 清晰化:瞭解到整個自動化生成流程,與傳統手擺很不一樣,上游改動會影響到下游
  • 打好tag,自動生成的,手擺的,都要有不同的區分

LOD

spiderman裡lod一大特色就是3d imposter,一個是保持了ps4該有的品質(billboard式的imposter就太low了),一個是維持了很高的效能

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

是這樣的一種面數極低的imposter,而且組織方式是以一個zone為單位,內部imposter的貼圖達成atlas,然後以類似cubemap的方式來sample(mesh不存uv)

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

生成3d imposter mesh的過程就是:

  • 合併能和的面
  • 內部面都去掉

mesh本身:

  • 沒有normal和uv,完全通過position來反算(normal因為都是axis aligned)

光照的probe擺放

光照是IBL是realtime生成的envmap,生成為position通過houdini+美術手擺來完成。

diffuse lighting是offline baked lightgrid(算是一個irradiance volume),hdr格式,在一個volume裡,生成大量的256解析度的cubemap,然後convolve到hdr的顏色+方向;

spiderman裡也有time of day,所以是cook了四套。

關於這個volume based GI,現在知道的方案是:

  • 戰神4,蜘蛛俠:offline baked,蜘蛛俠bake多套用於多個時段
  • 荒野大鏢客:聽開發者說是volume的方式,是不是realtime生成的不知道
  • division系列:是offline bake surfel資訊,然後實時生成GI Volume

一定程度上可以說是比較成熟的方案了。

編輯器本身

製作蜘蛛俠,內部包括map editor,fx editor,cinematic…一共有12個editor

早先是html5的然後逐步遷移到qt的c++的

使用json做配置檔案

中間h5編輯器到c++也展現了其比較務實老練的一面,如果全都推到重來肯定是最方便的。

但是團隊是一步步來做的:

始終保持格式相容

老的h5不再開發,只是做一些debug

逐步遷移

DDL(data definition language)

這是挺有意思的一個點,實際在insomniac,戰神中有應用。

和同事也有一些討論,可能後面專門總結一個文章較好。

簡言之,就是定義meta資訊(可以使用xml,json,protocal buffer等等),然後生成標頭檔案,編譯到專案裡。

好處若干,有的是未來跨平臺,跨語言,有的是data driven,讓策劃美術可以使用等等。

reference

  • Tools for‘Marvel’s Spider-Man’:Editing with Immutable Data
  • Procedurally Crafting Manhattan for‘Marvel’s Spider-Man’
  • ‘Marvel’s Spider-Man’:A Technical Postmortem
  • ‘Marvel’s Spider-Man’:Procedural Lighting Tools

三、Runtime篇

(再放下城市穿梭的樣子)

這裡統一列一下runtime部分,比較犀利&有特點的是:

  • streaming策略
  • 蕩蛛絲一套動作系統

品質ok的是:

  • 渲染pipeline
  • 各種布料,表情等等

streaming策略

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

在檔案組織方式上稍微特別一點的就是,有一個zone的概念;

移動速度最高是32m/s

模型組織方式:有了良好的組織方式之後,快速移動的時候要load的東西就大大減少了

  • imposter--就是imposter
  • hibernate model:就是水塔,樹這種instance很多,到處都是的物件,他們的mesh一直在記憶體裡

資源lod:

•貼圖主要load 3,4級mip,停下來才load mip0這種,快速移動的時候加上motionblur,所以完全沒問題(這個很重要)

資源壓縮:

•lz4壓縮資源

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

•index buffer使用增量式的儲存,這樣可以讓壓縮效率高非常多

實時生成:

•envmap實時生成的

Always Load:如果有空餘時間,就一直去load detail的東西

所以我們可以看到,如此犀利的streaming效果,其實就是每個部分做的比較好的結果,木有黑科技,囧!

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

蛛絲蕩的效果

這塊非常的細節,如果不做蜘蛛俠用處也比較有限。

要點1:使用曲線而非物理來達到玩家喜歡的效果

這個在動畫和物理上也是經常使用,大概這塊還處在pre-physically-based的階段。

要點2:儘早讓不是這個系統的開發者來體驗給出意見

這個也是非常贊同的,之前做效果時候也是,不要找美術,專門找策劃來看美術效果,他們的看法基本就是玩家的看法了。

render

渲染部分比較中規中矩,正常水平吧:

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

•async compute部分是ssao,fft,ssr,這裡是和graphic pipeline在gpu中同步進行,能更快一些

•postfx是放在下一幀的幀首做的,

表情和布料

兩個部分值得說的比較少,記錄下技術選型好了:

面部和表情使用3lateral pipeline,面部捕捉的,同樣的技術用於hellblade。

布料是havok的。

ref

  • ‘Marvel’s Spider-Man’:A Technical Postmortem
  • Concrete Jungle Gym:Building Traversal in‘Marvel’s Spider-Man’
  • (Super)Humans of New York:Managing the Many Faces in‘Marvel’s Spider-Man’

四、研發過程和哲學

3A遊戲意味著變化

即便是業界老兵insomniac,在製作spiderman的時候,也會出現製作到一半的時候,有非常大的改動。

包括不限於:

  • 物件量和規格大幅度改變:15年到17年,每個tile的物件量和規格都在不停地變化
  • 新的玩法系統:牆上爬行,表演系統,更多更復雜的任務
  • 新的模式:拍照等等

3A遊戲意味著什麼,意味著你要儘可能的在有限的開發週期裡發揮到極限,這裡有主觀因素和客觀因素:

  • 追求&熱愛使然:能做3A遊戲的團隊都是充滿追求和熱愛的團隊,所以自然有更好的想法的時候,會去儘量做
  • 自然的過程:隨著迭代的進行,團隊對所做的東西又更好的理解,有更多的發現,也有更多的學習,就是會有很多更好的想法,或者發現之前走錯路了
  • 市場的競爭:3A我們也可以定位為頭部品質,如果發現市場上有更好的出現,那麼團隊就也要做出相應的調整

所以做好的作品,一方面我們肯定要追求專業,追求想的透徹,計劃周密,一方面也要擁抱變化,善於變化。

開發的哲學

  • 儘可能保持簡單
  • 依據具體情況設計最優技術解法(tech fits context)
  • 限制美術策劃的option,限制workflow,限制dependency
  • 版本要一直可玩
  • 變化劇烈的時候,要設定好目標,坐下來交流,定義什麼是完成

GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?

每個地方都好一點:讓人驚訝的結果

其實之前團隊看到蜘蛛俠的視訊和遊戲的時候,最驚訝的就是在曼哈頓中穿梭的畫面了:

https://www.bilibili.com/video/av58521396www.bilibili.com

我們一致認為這個是現在在streaming方面做得最好的,也高度懷疑裡面使用了什麼“黑科技”。

實際出來之後,發現其實就是圍繞這個“在曼哈頓裡快速穿梭”的主題,在整個遊戲系統中(runtime+pipeline)每個地方都做的更好的結果。

也讓我們可以重新審視我們做的系統:保持對於系統的控制力,圍繞一個主題,每個模組打磨的更好,就可以把遊戲帶到另外一個層次,嗯,比如說幀數?

個人的共鳴

這裡最大的共鳴就是在追求高品質遊戲的時候,就是一個不停的變化的過程,在現有的水平上做好計劃,做好實現,真的做起來的時候,就發現更多可以做的更好的地方,於是乎就產生了下一階段要做的事情。

就如在閱讀gdc中蜘蛛俠,戰神的分享,對比我們自己的程式碼和技術實現,要做的事情就源源不斷了。

走完一個臺階,然後更能看到下一個臺階,專案如此,我們也是如此。

所以何止是擁抱變化,善於變化,很多時候我個人,我們技術團隊就是變化本身和變化的發起者。

然後一點經驗就是,面對變化,最有力的就是保持控制,儘量壓縮專案的複雜度,儘量增強自己的能力,保持溝通,對於任何變化都無往不利了。

騰訊北極光工作室招聘,長期有效:[招聘貼]Call For HardcoreDeveloper

作者:安柏霖
專欄地址:https://zhuanlan.zhihu.com/p/74567486

相關文章