GDC 2019《蜘蛛俠》開發解讀:如何打造一款AAA級遊戲?
(騰訊北極光工作室長期招聘中......)
如果讓我來選GDC19最喜歡最牛的系列,那麼毫不猶豫就是《蜘蛛俠》系列了。
起開發商insomniac也是我最喜歡的開發商之一,成立於1994年,絕對的業界老兵,有不錯的作品(雖然特著名的還是不多),技術很是不錯,而且樂於分享,我個人的開發過程中真是學了很多,看下它的作品:
在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,所有能讓我們做的更好的地方,而且是我們可能做到的,都要作出改變和實現。
技術挑戰&解決方案彙總
二、工具篇
在《蜘蛛俠》中,工具對於遊戲的品質可以說是愈發重要,說是和runtime相提並論也不過分,也正是工具的出色發揮,能支撐spiderman的優秀品質。
這裡主要談三個方面:
- houdini流水線來生成場景以及細節
- lod&光照
- 編輯器升級歷史
houdini流水線
從<ghost recon:wildlands>開始,houdini近幾年談的比較多了。
spiderman可以說用的比較重度,覆蓋的範圍非常的廣,可以說主體都覆蓋了:
- 路面,路徑,路面細節
- 建築,各種裝飾
- 車輛,特效等
- 一些gameplay事件
houdini的流水線也比較複雜和長:
這部分的構建可以說比較強大了。
然後在實際應用中有幾個要點:
- 分治:做好模組化,一個區一個區的來生成
- 簡化:儘量保持流程簡單,減少耦合,減少策劃美術的選項
- 清晰化:瞭解到整個自動化生成流程,與傳統手擺很不一樣,上游改動會影響到下游
- 打好tag,自動生成的,手擺的,都要有不同的區分
LOD
spiderman裡lod一大特色就是3d imposter,一個是保持了ps4該有的品質(billboard式的imposter就太low了),一個是維持了很高的效能
是這樣的一種面數極低的imposter,而且組織方式是以一個zone為單位,內部imposter的貼圖達成atlas,然後以類似cubemap的方式來sample(mesh不存uv)
生成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策略
在檔案組織方式上稍微特別一點的就是,有一個zone的概念;
移動速度最高是32m/s
模型組織方式:有了良好的組織方式之後,快速移動的時候要load的東西就大大減少了
- imposter--就是imposter
- hibernate model:就是水塔,樹這種instance很多,到處都是的物件,他們的mesh一直在記憶體裡
資源lod:
•貼圖主要load 3,4級mip,停下來才load mip0這種,快速移動的時候加上motionblur,所以完全沒問題(這個很重要)
資源壓縮:
•lz4壓縮資源
•index buffer使用增量式的儲存,這樣可以讓壓縮效率高非常多
實時生成:
•envmap實時生成的
Always Load:如果有空餘時間,就一直去load detail的東西
所以我們可以看到,如此犀利的streaming效果,其實就是每個部分做的比較好的結果,木有黑科技,囧!
蛛絲蕩的效果
這塊非常的細節,如果不做蜘蛛俠用處也比較有限。
要點1:使用曲線而非物理來達到玩家喜歡的效果
這個在動畫和物理上也是經常使用,大概這塊還處在pre-physically-based的階段。
要點2:儘早讓不是這個系統的開發者來體驗給出意見
這個也是非常贊同的,之前做效果時候也是,不要找美術,專門找策劃來看美術效果,他們的看法基本就是玩家的看法了。
render
渲染部分比較中規中矩,正常水平吧:
•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
- 版本要一直可玩
- 變化劇烈的時候,要設定好目標,坐下來交流,定義什麼是完成
每個地方都好一點:讓人驚訝的結果
其實之前團隊看到蜘蛛俠的視訊和遊戲的時候,最驚訝的就是在曼哈頓中穿梭的畫面了:
https://www.bilibili.com/video/av58521396www.bilibili.com
我們一致認為這個是現在在streaming方面做得最好的,也高度懷疑裡面使用了什麼“黑科技”。
實際出來之後,發現其實就是圍繞這個“在曼哈頓裡快速穿梭”的主題,在整個遊戲系統中(runtime+pipeline)每個地方都做的更好的結果。
也讓我們可以重新審視我們做的系統:保持對於系統的控制力,圍繞一個主題,每個模組打磨的更好,就可以把遊戲帶到另外一個層次,嗯,比如說幀數?
個人的共鳴
這裡最大的共鳴就是在追求高品質遊戲的時候,就是一個不停的變化的過程,在現有的水平上做好計劃,做好實現,真的做起來的時候,就發現更多可以做的更好的地方,於是乎就產生了下一階段要做的事情。
就如在閱讀gdc中蜘蛛俠,戰神的分享,對比我們自己的程式碼和技術實現,要做的事情就源源不斷了。
走完一個臺階,然後更能看到下一個臺階,專案如此,我們也是如此。
所以何止是擁抱變化,善於變化,很多時候我個人,我們技術團隊就是變化本身和變化的發起者。
然後一點經驗就是,面對變化,最有力的就是保持控制,儘量壓縮專案的複雜度,儘量增強自己的能力,保持溝通,對於任何變化都無往不利了。
騰訊北極光工作室招聘,長期有效:[招聘貼]Call For HardcoreDeveloper
作者:安柏霖
專欄地址:https://zhuanlan.zhihu.com/p/74567486
相關文章
- GDC 2019《戰神4》開發解讀:全域性光照
- 如何打造一款三消類遊戲遊戲
- 超級AAA類遊戲的價值特徵和研發要求遊戲特徵
- 如何開發一款遊戲:遊戲開發流程及所需工具遊戲開發
- 鄒偉:如何開發一款小遊戲遊戲
- 天美F1專案動畫總監:如何打造AAA級遊戲動畫,縮短國內外技術差距?動畫遊戲
- 如何開發一款棋牌遊戲?棋牌遊戲平臺搭建遊戲
- 如何有效開發一款跨平臺遊戲遊戲
- Supercell前分析總監:從創意到研發,如何打造一款遊戲?遊戲
- 假期無聊冰河開發了一款國民級遊戲!遊戲
- 開發者總結AAA遊戲開發經歷的5點收穫遊戲開發
- GDC:16%遊戲開發者正在開發VR遊戲 Oculus平臺最受歡迎遊戲開發VR
- 獨立開發三年,打造一款多端書籤收藏同步閱讀神器平臺
- 14年遊戲從業老鐵,決心打造一款輕量級硬核原創主機遊戲遊戲
- 想做一款獨立遊戲,該如何開始?遊戲
- 《漫威蜘蛛俠》開發商被索尼收購 遊戲銷量1300萬份遊戲
- 文案唯美,畫面驚豔,現象級遊戲如何打造?遊戲
- 如何打造一款靜態開源站點搭建工具
- 網易投資遊戲公司Rebel Wolves,後者正在開發一款3A級RPG遊戲遊戲
- 如何快速開發一款應用
- 打造3A級遊戲渲染方案遊戲
- 網易伏羲GDC分享:在回合製紙牌遊戲中應用 AlphaZero 開發 AI遊戲AI
- 如何快速開發一款應用程式?
- aaa
- 如何成功的在steam上發行一款遊戲?遊戲
- PeopleFun 副總裁:我們如何打造一款月活千萬的單詞遊戲?遊戲
- 網易與Greg Street共同推出FPC工作室,首作為AAA級MMO遊戲遊戲
- 網易推出全新AAA級工作室BulletFarm,欲探索動作冒險遊戲遊戲
- 《紙人》開發分享:如何做出一款具有中國特色的恐怖遊戲?遊戲
- 一款芭比娃娃遊戲的曲折開發故事遊戲
- 如何藉助 HealthKit 打造一款健身應用?
- [GDC 2021] 設計解謎遊戲的 8 堂課遊戲
- 【GDC演講】暗區突圍手遊:在移動端打造新一代射擊遊戲遊戲
- GDC:2013年免費遊戲發展總結分析遊戲
- 手把手教你打造一款輕量級canvas渲染引擎Canvas
- 一款80年代“GTA”遊戲的開發故事遊戲
- 微軟黑科技如何加速遊戲開發,讀這篇就夠了微軟遊戲開發
- 《英雄聯盟》開發商 Riot Games 證實正在開發一款格鬥遊戲GAM遊戲