TGDC | 騰訊互娛魏楠:引擎中臺,3A手游研發的助推器

GameLook報道/2020年12月7日- 10日,由騰訊游戲學院舉辦的第四屆騰訊游戲開發者大會(Tencent Game Developers Conference,簡稱TGDC)在線上舉行。

TGDC自 2017年創辦以來,一直堅持以開發者視角與需求為出發點,結合行業發展趨勢,對大會內容進行不斷升級和擴充,旨在為國內外游戲專業人士打造開放的交流分享平臺,推動游戲行業良性發展、探索游戲更多可能。

在第二日(12月8日)的活動中,騰訊互動娛樂研發效能部引擎核心技術組負責人魏楠進行了精彩的演講分享,通過在過去與多個項目組的合作經驗,總結出了引擎中臺對于研發效率的提升。他表示“技術中臺通過打造核心的一些基礎能力,渲染方面、內容制作工具,關注整個管線的開發效率,其實是可以顯著的協助到游戲團隊來開發3A手游”

以下是演講實錄

魏楠:大家好,我是來自騰訊互娛研發效能部引擎技術中心的魏楠。

今天這個機會主要想給大家分享一下,在過去一段時間我們作為技術中臺和騰訊游戲內部很多項目合作過程中,協助大家來進行3A手游開發整個過程中積累的一些技術經驗。

隨著手游市場的不斷地變化,玩家對手游的品質要求也越來越高,那么什么是3A高品質手游呢?其實這里面可以借鑒傳統的主機游戲作為參考。

如這些所列的,其實都是非常獲得玩家認可的一些3A主機游戲,在這里面通過我們的觀察和分析,不難發現有以下幾點是非常重要的。首先第一點是渲染效果,如果大家比較關注整個游戲技術發展的話,渲染一直是在游戲開發技術當中非常非常重要的一環,畫面的質量對于玩家、對游戲本身的體驗是至關重要的一個環節。

另外一部分就是海量的內容,隨著給玩家提供內容越來越多,玩家所能探索的東西也會越來越多,這樣就可以極大豐富玩家的體驗。接著是玩法本身,如果可以提供豐富的玩法,玩家就可以獲得不同的樂趣。

綜合上述幾點我們可以看到,如果能夠實現這些的話就可以給玩家一個頂級的體驗,而作為技術中臺,在這其中我們可能因為資源、人力各方面的限制不可能所有東西都來做,所以我們只能聚焦于幾點、幾個最核心的能力。

我們這邊大概有三部分,第一部分就是核心渲染,我們希望能夠通過核心渲染技術上面的一些突破能夠幫助項目組在手機、移動平臺上真正實現一個質的提升、飛躍。

另外一部分是內容工具,因為要生產更多的內容;要生產更高質量的內容;要生產更多不同樣式的內容,所以我們肯定需要在工具側也做一些突破,通過這些工具幫助整個項目組或者制作人員真正能夠實現內容的生產。

最后因為整個內容越來越多玩法越來越豐富,其實整個團隊開發效率也會是成為一個瓶頸,那么如何能夠提高整個開發效率也是至關重要的一環,這樣會對整個團隊最終開發出來游戲的品質有非常關鍵的影響?;谶@方面的考慮,我們會聚焦核心能力來發揮整個中臺的一些優勢。

首先第一部分大概談一下移動端的渲染管線開發,因為我們跟很多項目組合作,項目組對動態、光照和陰影的訴求會越來越強烈。目前來看的話光照會是整個渲染效果最核心的一個環節,所以基于這方面考慮,首先第一我們所有的資源會投入在移動端的延遲管線上的開發,希望能夠通過在移動端實現一套延遲管線,能夠很好地來提升整個游戲畫面品質。

在整個開發過程中我們其實劃定了三個非常重要的目標,第一個目標其實就是在性能方面的提升。我們希望能夠在移動、平臺、硬件有限的情況下,真正能夠支持到百盞動態光源,這樣效率、性能均能夠滿足具體游戲項目的要求。

第二部分,因為在手機上不管是發熱、電池消耗,其實對玩家的體驗是至關重要的,所以針對帶寬、功耗的優化也會是非常重要的一個環節。

最后就是鑒于手機、硬件非常的豐富,各個廠商之間不管是特性或者是Driver層面都有很大的差異,所以做好兼容性也非常重要,我們希望在低端、中端、高端不同硬件廠商上能有一個非常好的覆蓋。

鑒于這三點考慮,我們在整個開發過程中大概總結出來了以下一些經驗,第一部分,其實就是通過比較徹底的優化,通過對光源clean的優化預期可以提升20%到25%的效率。第二部分在帶寬層面針對不同的GPU,比如說像ARM的Mali、高通的Adreno,充分利用這些硬件的一些特性,我們可以達到25%到30%帶寬上的節省。有了這樣的節省,我們在有一些手機上測試下來的結果,可以有2度到4度溫度的降低,這樣可以極大地提升玩家的體驗。

另外在我們自己內部測試,還有在實際落地項目里面項目測試的一些數據反饋來看,不管是在低端、中端、高端上,使用這一套移動端延遲管線在性能上其實是可以和當前主流的前向管線保持一致,并且超越前向管線。當然最后還是有些問題,因為本身前面提到諸多的復雜性,所以這里面如果要解決這些復雜性是需要有一套非常復雜的方案,有一套非常復雜方案就進而會極大地提升整個實現的復雜度,所以就帶來在整個引擎側維護成本、維護復雜度極大地提升,這是大家需要非常注意的。

最后一點其實就是整個實現過程中,是需要考慮硬件API,甚至Driver方面的一些問題的限制,這樣的話,才能比較有針對性的解決問題。

這里針對于最后一點硬件和API的一些限制,在右側也列舉了我們簡單總結了一些的經驗。比如說在Vulkan方面,因為Vulkan本身會提供一些非常有價值新的特性和擴展,所以在實現上面會非常簡單一點,而且不管是性能還是功耗的優化還是非常明顯,但是有一個最大的問題,就是當前在市場上能夠支持的硬件非常有限,同時Driver層面的支持也非常薄弱,因為廠商很多年精力都是放在OpenGLES上,Vulkan的話只是在近幾年來、近一兩年吧,才會逐漸轉換成為一個重點,所以這部分應該非常留意。

另一部分OpenGLES其優勢的話,第一廠商硬件支持會非常廣泛,大部分其實都有對應的特性來支持,Driver上面也會比較成熟一點,最大的問題是因為各個廠商往往提供了一些擴展,各方面有非常多差異。比如說我們核心針對功耗方面的優化,在Arm這邊 Mali的GPU上和在高通的Adreno GPU上,就需要使用到不同的擴展。這樣就會對整個實現的復雜度和維護成本有明顯的提升。

最后在Metal這邊其實也是有OpenGLES這邊的一個優勢,目前支持各方面還是比較好的,主要是因為有一個廠商來做這個,所以相對來說是最比較容易支持的一套API。

第二部分希望給大家介紹一下,針對海量內容生產所開發的一套工具,基于Houdini的PCG工具。其實目前看到,針對特別是像開放大世界MMO這種品類的游戲,因為本身場景非常巨大,內容資源量非常大,其實需要借助一些程序化生成的方式,能夠比較好的提升整個團隊的制作效率,往往大家都會圍繞Houdini來開發這么一套PCG生產流程,那對于我們這個團隊,其實最關鍵、最核心的,來開發這套工具主要最核心會來關注整個流程,因為從我們來看,其實不同的項目對不同的效果、對不同的資源,其實有不同的需求。

那么在效果側,最好還是由項目組自己來解決,而對我們來說,我們所能做的就是提供一套工具,可以讓項目組靈活、快速并且有非常好的復用性來開發他們所屬于自己的流程,這個才是最關鍵的一點,同時能夠幫助他們把這套流程非常合理而有機的和整個引擎集成在一起,這個是我們工作的最關鍵的部分。

所以基于這些思考,從這些不同的點出發我們來開發自己一套基于Houdini的PCG流程工具,這里面第一個最核心的概念就是基于一個Node Graph PCG Flow的流程工具。這套工具最核心的想法就是大家可以通過這么一個節點圖的形式,能夠來靈活定義自己整個PCG流程。

在這個Flow圖里面,我們會有不同類型的節點,包括輸入節點、輸出節點還有處理節點,靠整個數據流把這些所有的節點串聯起來,通過輸入節點、輸出節點和引擎來進行數據上的交換來完成定義。

我們整個程序化生成的流程,在這些處理節點里我們可以把不同的Houdini的一些處理節點封裝在里面,甚至我們還可以開發一些自己完全獨立開發的一些程序化生成算法,也可以放到這個節點圖里。然后把這些所有的處理流程串聯起來,接著給大家展示一下我們這邊針對這套Flow流程工具開發的一些輸入數據的工具。

第一個工具就是曲線工具,因為曲線作為河流、道路生產最重要的輸入數據,是非常重要的一個工具。我們想能夠給大家開發這么一套工具,非常靈活來定義曲線、來修改曲線。右邊是我們開發的Mask工具,因為Mask工具作為在整個引擎里面來標注整個區域,在區域里面進行程序化生成是非常重要的一個源數據,所以我們在這邊也開發了一套Mask工具,能夠幫大家非常靈活來定義這個類型的數據。

同時我們也提供了一整套完整的Houdini HDA Library給項目組來使用,可以讓項目組來基于我們已經開發的一些Houdini HDA,根據自己項目本身的需求在這些HDA基礎上進行一些擴展、進行一些定制或者修改,能夠快速來搭建自己的流程。這里面包括像地形、植被、道路、河流還有巖石、建筑等等這些HDA,提供一些最基礎的功能給大家來使用。

目前我們這套工具在整個騰訊游戲內部已經有幾個項目在使用,我們看到項目組其實是可以非??焖俚乩梦覀冞@些工具靈活來搭建自己的流程,來快速實現自己一些游戲Prototype的一些工作來驗證自己整個流程上面的一些想法。

接著給大家介紹一個叫做Superman的面部表情和動畫的工具,這套工具其實主要還是針對表情動畫和捏臉這樣的需求來開發的,這套工具會支持任意3D角色的面部定制,能夠支持自動綁定、快速捏臉、表情系統以及口音等數字資產的制作,同時能夠可以結合專業的面部,甚至是比較簡單一點iPhone上的AR Kit來進行面部數據的對接。

這里面這套工具最主要的優勢,首先第一點功能還是非常全面的,支持像谷歌框架和Blendshape數據自動雙向的轉換,另外通用性是比較強的,因為我們在具體項目組來看,這套工具可以支持不同風格包括寫實、Q版角色的制作,操作會非常簡單,不管是在安裝上還是在功能上,我們看來對美術側非常友好,只需要簡單兩步就可以讓項目組的美術來使用起來。

最后一點,最關鍵的一點也是整個工具在開發制作效率上會帶來一個非常明顯的提升。關于效率,這邊其實有一些具體的數據,比如像自動綁定這邊我們和具體項目溝通,基本統計出來一般傳統可能需要大概一周時間可以做好一個綁定,但如果使用這套工具的話可以在一小時就可以來完成。

第二部分是一個捏臉系統的搭建,我們看到有些項目可能需要一周左右時間才能初步搭建一個捏臉系統,如果是使用這套工具的話,結合這套Superman的工具大概兩天就可以搭建這么一套捏臉系統。關于表情制作通常的項目大概是需要1.5周左右的時間,如果使用這套工具,大概兩天左右時間就可以完成。

最后就是情緒、口型資產生成,因為這套是會自動化生成,所以就可以完全從以前的1.5周時間變成自動馬上可以生成,基本可以忽略這個時間的情況。

另外在本次TGDC,我們團隊專門做這套工具的劉凱同學會有一個專門針對Superman這套工具的詳細分享,如果大家比較感興趣的話可以關注他的分享。

再返回到關于前面提到的光照本身,因為光照本身是渲染最核心的效果,但是即使有像延遲管線這樣的技術,對于動態光源、動態光照我們有個非常好的支持,但是像間接光照我們依然還是需要借助一些預計算的方式才能會比較好的支持到。

另外目前來看,主流引擎里面的光照烘焙會是一個計算量非常大、非常耗時的過程,有些具體項目里比如前面提到開放大世界的項目里,像5K乘5K這樣的一個地圖如果說對一整套圖烘焙,往往需要一整天的時間才能烘焙完,所以這樣就極大限制了整個團隊開發制作的效率。

基于這些問題我們這邊利用GPU開發了一套GPU加速的光照烘焙系統,這里面開發其實有幾點。第一點,雖然是開發了一套新的系統,肯定還是要保證這套系統和以前舊的系統整個烘焙的效果和質量是完全對齊的,甚至在個別點上要超越以前的系統。

第二部分初衷其實是要大幅提升整個烘焙效率,從我們在實際項目中使用的情況來看,我們確實是可以以一個數量級的變化來提升整個烘焙的效率。

最后,這套系統應該是一個比較好、比較完備的可以進行功能擴展的系統,我們這邊其實在后期開發的一些功能上已經驗證了這一點。比如我們在光照烘焙系統上,又增加了一些新的項目組所需要的一些烘焙特性,來支持一些新的需求。

這是一個簡單的效果圖對比,左邊是以前的基于CPU光照烘焙系統的截圖,右邊是GPU烘焙系統的截圖。

從這個圖標注出來的地方其實可以非常明顯地看到,CPU光照烘焙系統的漏光是比較嚴重的,而右邊GPU烘焙的話,就完全避免這些漏光的問題。其實實現這些效果最主要還是我們這邊在算法上、在實現方式上和CPU這邊的一些改進和一些差異所提升的這些效果。

另外這邊其實是有一個烘焙效率的對比,這已經是我們在半年前的測試數據,基本上有三組數據。第一組像藍色標出來的是這套CPU光照烘焙系統大概需要多長時間,在三個場景里面中間這部分數據是一塊顯卡。我們測試的時候是一塊2080 Ti的顯卡,大概烘焙是需要多長時間,右側數據是我們自己搭建的GPU服務器,一臺有八塊Quadro RTX 6000的顯卡這么一臺服務器大概烘焙的時間是多少。

通過這個數據對比我們看到,如果在單塊GPU上我們一般性能提升會有3倍到7倍,如果是針對一臺服務器做對比的話,我們一臺服務器大概會有15到30倍的這么一個提升。這里面的數據主要差異是因為在不同場景里,因為烘焙時候,烘焙任務有一定差別,所以有些任務效率提升會高一些,有些任務效率提升會低一些,但是整體上如果和服務器對比,我們認為基本上會是一個比較大數量級上的差別。

所以就像前面我提到的,像5K乘5K這種地圖一般CPU要烘培一天,我們這邊可能一個小時,甚至一個小時之內就可以完成烘焙。

最后介紹一下我們這邊開發的一套分布式構建系統,這套系統主要的目的是希望能夠利用分布式系統,來提升整個游戲制作構建過程中的效率,特別是目前來看的話,不管是引擎本身的編譯、還有包括資源場景、構建、打包等等這些流程其實是非常耗時的。

因為有一些實際項目還可能會出不同的版本,有些可能會是幾個小時甚至確實以天為基這么一個時間,這樣的話其實嚴重制約整個項目的開發進度、迭代效率。想法其實不管用,多么強勁、單一的一臺構建服務器也沒有辦法完全解決這個問題。最好的方式其實就可以把整個這樣耗時的處理流程放到分布式環境里,利用分布式環境大量的計算能力、可擴展能力來更好地解決這個問題。

現在目前來看像我們這樣一個中臺部門其實有很多的計算資源,而且這些計算資源平時也是會空閑下來,如果能夠在平時時候集中式的來利用這些資源,本身對資源利用率也會是非常好地提升。所以我們就基于這些想法開發了這么一套分布式構建系統,開發這套系統我們最開始可能只會盯著一兩個任務來做,但是在做的過程中我們感覺到,構建流程當中任務種類非常多而且非常復雜,那么這樣的話就要求我們最好是開發一套開放式的作業框架,在這套開放式的作業框架我們能夠隨著不斷地開發,隨著不斷地改進。

我們可以把不同形式的一些任務都完全納入到這套框架里面,讓這套框架能夠不斷地提升它本身的能力。同時還提供了相應的一些Cache機制,因為本身在一個團隊里有可能構建完了結果,對于一個用戶構建完結果對另一個用戶其實也是一樣的。如果我們有一套比較好的Cache機制,其實可以能夠保證這些處理完結果的復用,這樣的話會更進一步來提升整個系統的效率和利用率?;谶@些點,我們就開發這么一套系統,能夠非常顯著地來提升整個程序、美術相關的工作效率。

這里面其實還有一個比較重要的一個部分,就是對于這套構建系統需要對于不同平臺的支持,因為目前來看我們不單單需要能夠讓這套系統跑在Windows上,同時還需要能夠跑在MacOS上、跑在Linux上。不僅僅能夠構建出來PC版本、安卓版本,同時也需要能夠構建出來iOS版本。所以我們在開發這套系統的時候,我們就需要能夠充分來考慮跨平臺相關的一些問題,能夠基于這些點來選擇比較好的實現方式來實現這一部分。

這邊是我們這套系統的一些實際運行的數據,在引擎構建這邊的話,我們測試時候大概是使用像32核64線程這樣CPU的一臺服務器來進行構建引擎,大概是需要在半個小時左右的時間,如果使用我們的分布式構建系統的話,我們可以在四臺服務器來進行構建,我們整個時間可以縮減到大概8分鐘到10分鐘這樣來完成整個引擎的一個構建。

另外一部分是Shader這邊的構建。Shader的話我們基本看到,可能是需要550秒左右完成我們自己測試地圖的一個構建,而如果利用我們這套分布式系統,我們可以把整個時間縮減在150秒到200秒之間這么一個時間。還是非常顯著,可以提升整個構建的效率。

最后總結一下今天我分享的一些內容,其實就是說作為技術中臺的話,通過打造核心的一些基礎能力,包括渲染方面、內容制作工具,關注整個管線的開發效率,其實是可以顯著的協助到游戲團隊來開發3A手游,

以上是我今天分享的內容。

如若轉載,請注明出處:http://www.hongkong333.com/2020/12/407267

關注微信
韩国和日本免费不卡在线a_有码av高清电视免费观看_国产国语对白露脸正在播放