超硬核技術(shù)分析:P社新大作《城市天際線2》如何“因性能而大敗”?(上)

來源:GameLook
作者:GameLook
時間:2023-11-11
2069
光在今年的PC市場,我們就已經(jīng)見證了多起這樣的事件:《最后生還者重制版》、《臥龍》、《星球大戰(zhàn)絕地:幸存者》……這些玩法上較為上乘的作品,卻因?yàn)樵愀獾膸屎涂D等問題在Steam等平臺獲得海量差評。

640.jpg

每每遇到因優(yōu)化翻車的游戲佳作,GameLook都會默默感到惋惜。

光在今年的PC市場,我們就已經(jīng)見證了多起這樣的事件:《最后生還者重制版》、《臥龍》、《星球大戰(zhàn)絕地:幸存者》……這些玩法上較為上乘的作品,卻因?yàn)樵愀獾膸屎涂D等問題在Steam等平臺獲得海量差評。

如果說游戲的底層玩法一般難以改動,優(yōu)化問題大多都是可以通過延長開發(fā)和修繕的時間來解決的“低級問題”。而在發(fā)行商的死線和資金要求等重重因素之下,不少原本優(yōu)秀的游戲卻不得不以不完整的形態(tài)與玩家見面,進(jìn)而讓口碑受到嚴(yán)重影響,功虧一簣。

而在近期,最令人感到可惜的案例無疑是《城市天際線2》了。作為PC平臺最熱門的城市建造類游戲之一,《城市天際線》吸引來了大量粉絲,續(xù)作更是受到萬眾矚目。然而預(yù)購了的忠實(shí)粉絲們發(fā)現(xiàn),哪怕自己擁有一塊性能不錯的顯卡,游戲依然會出現(xiàn)嚴(yán)重卡頓,甚至在菜單界面的幀率就已經(jīng)不足20幀了。

隨后,大量的差評如期而至。有Reddit網(wǎng)友通過反編譯發(fā)現(xiàn),游戲之所以會出現(xiàn)卡頓,很可能是因?yàn)橛螒蜾秩玖薔PC小人的高精度模型,甚至連滿口的牙齒都細(xì)致地進(jìn)行了渲染。在模擬類游戲中往往會同屏出現(xiàn)大量的小人,這種失誤無疑會給顯卡帶來重大的性能負(fù)擔(dān)。

640 (1).jpg

受到這名Reddit網(wǎng)友的啟發(fā),一名來自芬蘭的程序員Paavo Huhtala決心進(jìn)一步深挖《城市天際線2》背后的程序設(shè)計(jì)。與《城市天際線2》的開發(fā)商Colossal Order同為芬蘭人,又是一名模擬游戲的忠實(shí)粉絲,Paavo Huhtala在工作之余花了近兩周的時間對這款游戲進(jìn)行了深入挖掘,足以說明愛有多深。隨著認(rèn)識的不斷深入,他的反編譯研究逐漸積累成了一篇長達(dá)萬字的博文,對渲染的各個通道進(jìn)行了一一拆解,足夠我們徹底了解翻車的癥結(jié)所在。

盡管GameLook并非游戲技術(shù)專業(yè)人士,但在洋洋灑灑萬言中凝結(jié)的愛與投入也難免讓GameLook受到觸動。在Paavo Huhtala看來,《城市天際線2》的失誤絕非開發(fā)者“擺爛”造成的,事實(shí)上,開發(fā)者們對于打造優(yōu)秀畫質(zhì)有著很高的追求,并試圖引入實(shí)驗(yàn)性的功能進(jìn)行實(shí)現(xiàn),但最終也因這些功能的不完善而在優(yōu)化上慘烈翻車。

而緊迫的預(yù)算和死線,更是讓這款產(chǎn)品不得不“早產(chǎn)”。一款翻車的產(chǎn)品背后沒有贏家——開發(fā)者們的愿景沒有得到實(shí)現(xiàn),發(fā)行商損失了可觀的收入,而玩家們更失去了一款本應(yīng)十分優(yōu)秀的游戲。

GameLook對Paavo Huhtala的博文進(jìn)行了全文編譯:

作為今年最受期待的PC游戲之一,《城市:天際線2》于上周發(fā)布,但玩家反響不一。我的印象是,游戲玩法和模擬似乎是朝著正確的方向邁出的一步,至少從紙面上看,這款游戲的功能似乎比原作時更加完善。然而,這款游戲也存在一些重大問題,包括平衡問題、有瑕疵的設(shè)計(jì)選擇以及導(dǎo)致許多游戲經(jīng)濟(jì)模擬上幾乎毫無意義的漏洞。這款游戲是否能成為原作的優(yōu)秀繼任者仍是一個懸而未決的問題,但有一件事幾乎是普遍認(rèn)同的,那就是《城市:天際線2》的性能表現(xiàn)完全不達(dá)標(biāo)。

這不是一篇性能評測

實(shí)際上,事前早就出現(xiàn)了危險信號。在游戲發(fā)售前一個月,游戲方就發(fā)布了一份公告,告知游戲的推薦系統(tǒng)要求已經(jīng)提高,且主機(jī)版本的發(fā)布被推遲了2024年。不少主播和創(chuàng)作者獲得了游戲的早期體驗(yàn)權(quán),但他們被明確禁止談?wù)撚螒蛐阅鼙憩F(xiàn)。這種情況并不罕見,因?yàn)橛螒蛲鶗诎l(fā)行前的最后幾周進(jìn)行頻繁的性能優(yōu)化和其他修復(fù),但這也不是一個好兆頭。就在發(fā)行前一周,Colossal Order發(fā)布了一份聲明,我將其理解為給游戲的糟糕表現(xiàn)打預(yù)防針。然后游戲就發(fā)行了。

像《城市天際線》這樣的模擬游戲很多都難以良好的幀率運(yùn)行,但《城市:天際線2》的突出之處在于,在大多數(shù)情況下,這款游戲都受到了GPU的制約——這對于這類游戲來說很不尋常,因?yàn)榇蠖鄶?shù)這類游戲?qū)PU的要求都很高(比如最初的《城市:天際線》),但對顯卡的要求相對較低。從視覺上看,這款游戲在大多數(shù)方面都比2015年的原版有所改進(jìn),但并不比光追版的《賽博朋克2077》更難運(yùn)行。

就我個人而言,我甚至認(rèn)為《城市:天際線2》看起來很不好看。雖然單個模型更加細(xì)致,比例感令人印象深刻,但陰影表現(xiàn)顯然是最后一代的,整個屏幕被渲染工件和過濾不良的紋理所覆蓋。將游戲的圖像與相對接近的競爭對手《紀(jì)元1800》(發(fā)行于2019年)完全討不到便宜?!都o(jì)元1800》的觀感更加風(fēng)格化,在我看來,它看起來更加精致和統(tǒng)一,同時即使在2019年被認(rèn)為是中低端的硬件上也能提供不錯的性能。

640 (2).jpg

我不會浪費(fèi)時間去仔細(xì)地測試游戲,因?yàn)樵S多人已經(jīng)這么做了,而且他們的評測標(biāo)準(zhǔn)比我高得多。我將總結(jié)目前的測試結(jié)果:當(dāng)設(shè)置調(diào)到最低限度以上(“非常低”的圖像預(yù)設(shè),并完全禁用了陰影和霧等高消耗元素)時,你需要一個價值1000到2000歐元的顯卡才能以每秒60幀、1080p的規(guī)格運(yùn)行游戲。

相比之下,與《城市:天際線2》在同一周發(fā)布的《心靈殺手2》被認(rèn)為是這一代主機(jī)游戲中最好看的游戲,如果你把所有設(shè)置都拉滿,包括光線追蹤、原生1440p或4K DLSS,它的配置要求和《城市:天際線2》差不多。我認(rèn)為這很好地說明了《城市:天際線2》的要求是多么恐怖。

640.png

以下是我的一些個人經(jīng)歷:當(dāng)我第一次在我的高配游戲PC(配備NVidia RTX 3080顯卡,AMD Ryzen 7 5800X CPU和5120×1440超寬顯示器)上啟動游戲時,我看到主菜單中的幀率低于10FPS。在調(diào)整了設(shè)置(包括禁用景深、動態(tài)模糊和體積效果)之后,我的FPS達(dá)到了將近90。特別奇怪的是,這個菜單只有一個靜態(tài)的背景圖像和幾個按鈕。加載到一個空白的地圖時,幀率大約為30到40 FPS,在玩了大約一個小時后,幀率始終保持在這個水平,偶爾會出現(xiàn)掉幀。讓我們進(jìn)一步調(diào)查。

640 (3).jpg

拉開窗簾

《城市:天際線2》和它的前作一樣是在Unity中制作的,這意味著游戲可以很容易地使用任何.Net反編譯器進(jìn)行反編譯和檢查。我使用的是Jetbrains,它有一個不錯的類似于Visual Studio的UI,有大量的搜索和分析選項(xiàng)。然而,靜態(tài)分析并不能真正告訴我們?nèi)魏斡嘘P(guān)游戲渲染性能的具體信息。為了分析渲染過程,我使用了RenderDoc,這是一個開源圖形調(diào)試器,它為我節(jié)省了成本。

讓我們來看看這個游戲的一些基礎(chǔ)技術(shù)內(nèi)容?!冻鞘校禾祀H線2》使用的是Unity 2022.3.7,在撰寫本文時才發(fā)布幾個月。Unity 2022最引人注目的方面是DOTS(多線程式數(shù)據(jù)導(dǎo)向型技術(shù)堆棧)技術(shù)的穩(wěn)定,這是Unity已經(jīng)研究了好幾年的技術(shù)。有趣的是,《城市:天際線2》似乎大量運(yùn)用了DOTS,包括新推出的ECS技術(shù)和Burst編譯器。

我已經(jīng)對Bevy引擎感興趣好幾年了,并且嘗試進(jìn)行了一些實(shí)現(xiàn),如果不是因?yàn)檫@款游戲中的許多問題,我寧愿寫一篇“ECS是這類游戲的理想架構(gòu)”的博文?!冻鞘校禾祀H線2》似乎將DOTS發(fā)揮到了極致,因?yàn)檫@款游戲比前作更有效地利用了多個CPU內(nèi)核。不幸的是,許多與圖像相關(guān)的問題都是因游戲使用DOTS間接引起的。稍后我將對此展開討論。

640 (1).png

游戲還利用了很多第三方中間件和一些自定義/Fork下來的庫。與DOTS不同的是,Unity的UI Toolkit顯然還沒有準(zhǔn)備好投入生產(chǎn),因?yàn)椤冻鞘校禾祀H線2》在UI上使用的是Coherent LabsGameface,它是基于HTML、CSS和JavaScript的。簡單看一下JS包就會發(fā)現(xiàn)他們使用的是React,而捆綁使用的是Webpack。雖然這肯定會讓原生開發(fā)的純粹主義者朝天大叫,但我認(rèn)為至少從理論上,這種模式將使游戲的UI比以前更容易維護(hù)和修改。其他值得注意的捆綁庫包括InstaLOD,Odin Serializer和英偉達(dá)DLSS 3的DLL文件,盡管該技術(shù)目前不受游戲支持。

對于圖形渲染,游戲使用Direct3D 11和Unity的HDRP。Unity的常規(guī)渲染系統(tǒng)只適用于傳統(tǒng)的基于MonoBehaviour的游戲?qū)ο?,所以使用DOTS和ECS構(gòu)建的游戲需要用一些其它東西來彌補(bǔ)。Unity有一個名為Entities Graphics的包,但令人驚訝的是,《Cities:Skylines 2》似乎并沒有使用這個包。原因可能是它相對不成熟,支持的渲染特性有限。

根據(jù)這個包的技術(shù)文檔,皮膚(用于動畫模型,如角色)和遮擋遮蔽(不渲染其他事物背后的東西)功能都被標(biāo)記為實(shí)驗(yàn)性的,虛擬紋理(使GPU紋理處理更復(fù)雜,但更高效)功能則根本不支持。相反,似乎Colossal Order決定利用BatchRendererGroupUnity的和許多相對底層的代碼來自主實(shí)現(xiàn)ECS和渲染器之間的粘合。稍后我將更詳細(xì)地介紹這一點(diǎn)及其許多含義。

連接問題

將Renderdoc連接到進(jìn)程并收集渲染事件通常是相當(dāng)瑣碎的。通常你只需要向Renderdoc提供可執(zhí)行文件的路徑,工作目錄和一些命令行參數(shù),然后Renderdoc啟動二進(jìn)制文件并將自己注入游戲進(jìn)程。然而,我的問題是,我的游戲是在Xbox game Pass上運(yùn)行的,這個版本使用了一些奇怪的沙盒和/或NTFS所有權(quán)手法來限制你對游戲文件的操作。由此,RenderDoc不被允許讀取游戲的可執(zhí)行文件,即便作為管理員運(yùn)行也是如此。在找出Game Pass的問題之前,我也嘗試使用Nsight Graphics英偉達(dá)的(類似于NVidia版本的RenderDoc工具),但它也有同樣的問題。最終我用信用卡解決了這個問題:我在Steam上以全價再次購買了游戲,盡管我知道它存在嚴(yán)重的問題。對不起。

然而,Steam版本也不是一開始就順利運(yùn)行。這一次的問題是Paradox啟動器,這是一個用于大多數(shù)Paradox發(fā)行的3A游戲的臃腫軟件。啟動器的二進(jìn)制文件也包含在Game Pass版本中,但至少在發(fā)布時它似乎完全未被使用。基本上來說,當(dāng)你從Steam啟動《城市天際線2》時,它會彈出Paradox啟動器,你點(diǎn)擊Resume或Play,然后它就會運(yùn)行游戲的二進(jìn)制文件。

我試圖通過直接運(yùn)行Cities2.exe來連接Renderdoc,但這不起作用——它創(chuàng)建了游戲窗口,但隨后運(yùn)行了幾秒鐘,打開啟動器,然后退出。在Renderdoc中有一個名為“捕獲子進(jìn)程”的選項(xiàng),理論上應(yīng)該使Renderdoc將自己注入到目標(biāo)進(jìn)程啟動的所有進(jìn)程中——所以它應(yīng)該將自己附加到由游戲二進(jìn)制啟動的啟動器上,然后再次注入到游戲二進(jìn)制中——但我認(rèn)為有一些額外的間接層不幸地阻止了它工作。

我還嘗試了很多種其他的方法。最終,我終于通過使用RenderDoc的Global Process Hook選項(xiàng)來把它連接到游戲里。事實(shí)上,RenderDoc默認(rèn)隱藏這個選項(xiàng)并建議不要使用,因?yàn)檫@是一種非常具有侵入性的Hook方法,因?yàn)樗鼤LL注入到系統(tǒng)上啟動的每個進(jìn)程中,但是,起碼它跑起來了!我們終于可以看到游戲中發(fā)生了什么。

后來我也能成功跑通了英偉達(dá)的Nsight Graphics。我沒有嘗試啟動游戲或啟動器,而是從Nsight打開Steam,然后像往常一樣從Steam的UI啟動游戲。但是Nsight種獲得的信息并不比Renderdoc更多,因?yàn)樗坪踉S多Nsight的分析和性能重點(diǎn)功能不支持D3D11。

Renderdoc分析

首先我要承認(rèn),我不是一個專業(yè)的圖形程序員,甚至不是一個特別精通的業(yè)余愛好者。我偶爾會做圖像編程,也花了很多時間擺弄游戲引擎,但我在這兩方面都不是專家。我從來沒有實(shí)現(xiàn)過像延遲渲染或級聯(lián)陰影映射這樣的高級功能,盡管我想我知道它們在理論上是如何工作的。所以我接下來要說的一些事情有可能是錯的。如果你認(rèn)為我錯了,請告訴我。

讓我們從分析以下的實(shí)例幀開始:

640 (4).jpg

這是一個相當(dāng)復(fù)雜的幀,但它遠(yuǎn)未達(dá)到游戲的實(shí)際規(guī)模。這是在一個大約有1000名居民的小鎮(zhèn)上,存檔進(jìn)度大概是進(jìn)入新游戲后一小時之內(nèi)。有雨,而且是晚上,但在我的經(jīng)驗(yàn)中,這兩種情況對性能都沒有太大影響。游戲版本為1.0.11f1,因此包含了第一個發(fā)布后的熱修復(fù)程序。應(yīng)該注意的是,在撰寫本文時發(fā)布了最新的補(bǔ)?。?.0.12f1),它包含了對我將要描述的問題的一些改進(jìn),但還遠(yuǎn)遠(yuǎn)沒有解決所有問題。

Renderdoc報(bào)告說,幀渲染大約需要87.8毫秒,平均約為11.4 FPS。游戲當(dāng)時的平均幀率是30-40 FPS,所以要么這幀是一個異常值(正如我們從Gamer Nexus視頻中了解到的那樣,諷刺的是這是相當(dāng)普遍的),要么更有可能是RenderDoc在某種程度上增加了一點(diǎn)性能消耗,影響了測量,因?yàn)槲也东@的所有幀都比我在游戲中正常玩時看到的幀數(shù)要高一些。我假設(shè)即使Renderdoc確實(shí)增加了一些消耗,它也不會以一種完全使測量無效的方式添加它,比如使特定的API調(diào)用比通常情況下花費(fèi)10倍的時間。

以下是我從RenderDoc中獲取的一部分?jǐn)?shù)據(jù)。

640 (2).png

僅從這些數(shù)字我們無法推斷出什么。6705個渲染命令和超過50000個API調(diào)用聽起來都很多,但如果沒有進(jìn)一步的情景,它們的成本很難評估。6.7 gb的顯存對于這樣一個相對簡單的場景來說是很多的,特別是考慮到目前仍然有只有8gb VRAM的中低端顯卡。

640 (3).png

因?yàn)橛螒蚴褂肏DRP,所以它的文檔可以用來理解游戲在每幀上執(zhí)行的不同渲染和計(jì)算傳遞的。我不打算深入研究圖像有多華麗,但我會一步一步地介紹大部分渲染過程,并強(qiáng)調(diào)其中一些更有趣的東西。

DOTS實(shí)例數(shù)據(jù)

游戲中幾乎所有的渲染命令都使用了實(shí)例化,這在這種規(guī)模的游戲中是必需的。為了進(jìn)行實(shí)例化,游戲有一個大的實(shí)例數(shù)據(jù)緩沖區(qū),其中包含渲染所有對象所需要的一切。每個實(shí)例數(shù)據(jù)的內(nèi)容和大小因?qū)嶓w類型而異,但似乎建筑等普通游戲?qū)ο竺總€實(shí)例大約需要50個點(diǎn),道路則更多。我還沒有完全弄清楚緩沖區(qū)是如何管理的,因?yàn)樗且粋€非常復(fù)雜的系統(tǒng),但基本上每個可見對象的實(shí)例數(shù)據(jù)每幀都會更新到緩沖區(qū),然后將更改上傳到GPU。緩沖區(qū)從大約60兆字節(jié)開始,并在必要時重新分配到更大的大小。

緩沖區(qū)幾乎用于游戲的每個渲染命令,根據(jù)Renderdoc,它至少在每個頂點(diǎn)和像素Shader中可用,盡管我認(rèn)為它主要只用于頂點(diǎn)著色器。了解這個緩沖區(qū)如何影響GPU的緩存將是很有趣的,因?yàn)槲壹僭O(shè)實(shí)例不是按照它們呈現(xiàn)的相同順序排列在緩沖區(qū)中,這可能是緩存的一個問題,但我沒有足夠的專業(yè)知識來弄清楚。無論如何,從這個緩沖區(qū)中查找每個頂點(diǎn)的數(shù)據(jù)都有一定的成本,這可能解釋了一些關(guān)于高多邊形網(wǎng)格的問題,我將針對這一點(diǎn)繼續(xù)說明。

模擬

幾個計(jì)算著色器用于圖形相關(guān)的模擬,如水,雪和粒子,以及骨骼動畫。這些總共花費(fèi)1.5毫秒,不到幀時間的2%。

一些早期的猜測認(rèn)為,游戲的性能表現(xiàn)之所以如此糟糕,是因?yàn)樗赡軐⒋罅繉?shí)際游戲模擬工作轉(zhuǎn)移到GPU上,節(jié)省了CPU時間,但減少了渲染的處理能力。然而,在查詢了反編譯代碼和GPU調(diào)用情況后,我可以得出結(jié)論,事實(shí)并非如此。

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
文章來源:GameLook
版權(quán)說明:本文內(nèi)容來自于GameLook,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
2024中國游戲業(yè)十大新聞,風(fēng)起云涌的一年!
2024中國游戲業(yè)十大新聞,風(fēng)起云涌的一年!
回顧2024年的中國游戲行業(yè),今年的中國游戲產(chǎn)業(yè)出現(xiàn)了太多代表著品類崛起的新紀(jì)錄
游戲市場
2025-01-03
俄羅斯要自研游戲主機(jī)!配置曝光,系統(tǒng)芯片全部自研
俄羅斯要自研游戲主機(jī)!配置曝光,系統(tǒng)芯片全部自研
在索尼諸多的第一方游戲工作室當(dāng)中,有不少是通過并購而來的。比如打造了《命運(yùn)》系列的Bungie,《地平線》系列的研發(fā)團(tuán)隊(duì)Guerrilla,以及我們今天要說的,打造了《古惑狼》、《神秘海域》,以及《最后生還者》等大作系列的頑皮狗。
俄羅斯
游戲市場
2024-12-29
頑皮狗創(chuàng)始人談為何賣公司:游戲研發(fā)費(fèi)漲了千倍,3A太貴是資金黑洞
頑皮狗創(chuàng)始人談為何賣公司:游戲研發(fā)費(fèi)漲了千倍,3A太貴是資金黑洞
在索尼諸多的第一方游戲工作室當(dāng)中,有不少是通過并購而來的。比如打造了《命運(yùn)》系列的Bungie,《地平線》系列的研發(fā)團(tuán)隊(duì)Guerrilla,以及我們今天要說的,打造了《古惑狼》、《神秘海域》,以及《最后生還者》等大作系列的頑皮狗。
游戲市場
游戲
2024-12-29
同人作品轉(zhuǎn)正?《少女前線》TPS新作《Project NTE》發(fā)布預(yù)告PV,幻視塵白?
同人作品轉(zhuǎn)正?《少女前線》TPS新作《Project NTE》發(fā)布預(yù)告PV,幻視塵白?
當(dāng)所有人認(rèn)為散爆應(yīng)該還在為《少女前線2:追放》外服大成功而欣喜時,出人意料的是,一款由散爆旗下黑卡蒂工作室(Hecate Team)使用U3D研發(fā)的《少女前線》IP衍生多平臺TPS游戲《Project NTE》,悄悄在海外發(fā)布了游戲的宣傳片,并公布了其1月9日至1月16日將在泰國、馬來西亞、新加坡等東南亞市場開啟技術(shù)測試的消息。
游戲市場
2024-12-29
優(yōu)質(zhì)服務(wù)商推薦
更多