![]()
星彡P(guān)丨文
正在編譯著色器……
68%
70%
75%
75%
啊,怎么進(jìn)度條卡住了??臥槽,怎么閃退了?
![]()
不知道你們有沒(méi)有發(fā)現(xiàn),近幾年的游戲,不管單機(jī)還是網(wǎng)游,不管是手機(jī)還是PC……
大家在第一次登錄游戲的時(shí)候,或者剛更新完游戲,經(jīng)常會(huì)看到一個(gè)“正在編譯著色器”的進(jìn)度條。
![]()
記得去年《黑神話:悟空》剛出的時(shí)候,就有很多網(wǎng)友調(diào)侃:游戲還沒(méi)開(kāi)打,九九八十一難就已經(jīng)開(kāi)始了。
第一難是解壓游戲,有的人下載完解壓了十幾分鐘,有的人解壓兩三個(gè)小時(shí)。第二難就是著色器編譯,多少人卡在這塊了。
![]()
手游更是如此。舉個(gè)例子,我手機(jī)里有一款二次元射擊游戲叫《塵白禁區(qū)》,平時(shí)做做日常收個(gè)菜也就1分鐘不到,當(dāng)做休閑副游挺好的。
然而我每次登錄都會(huì)卡在“正在編譯著色器”這個(gè)步驟,眼看著進(jìn)度1% 1%的跳動(dòng),過(guò)程極其緩慢,而且特別占用資源,CPU直接滿載。
手機(jī)變得特別發(fā)燙不說(shuō),我還不敢隨便關(guān)閉手機(jī)屏幕。因?yàn)橐坏┯|發(fā)鎖屏,進(jìn)度條可能就罷工了。
![]()
嗨呀,現(xiàn)在的二游普遍都是PC手機(jī)雙端,畫(huà)面越來(lái)越好,結(jié)果卡“編譯著色器”的情況也是越來(lái)越普遍了,網(wǎng)上一片怨聲載道。
網(wǎng)上搜索“著色器”的關(guān)鍵詞,你能看到很多《鳴潮》《原神》等等……不同手游玩家的相同吐槽。
![]()
![]()
甚至還有像華為鴻蒙NEXT這樣,因?yàn)轼櫭稍对瘛肪幾g著色器的速度特別快,只用了區(qū)區(qū)3分鐘,而被UP主直呼“黑科技”的情況。
所以你有沒(méi)有好奇過(guò),“著色器”到底是什么東西?
![]()
今天就隨便聊聊這個(gè)話題吧。
當(dāng)然,BB姬不是什么專(zhuān)業(yè)技術(shù)媒體,如果有什么錯(cuò)漏的地方,大家也可以在評(píng)論區(qū)指正和補(bǔ)充。
![]()
01
首先解釋一下,“著色器”的英文是Shader。
它是一段代碼,一個(gè)程序,運(yùn)行在GPU(也就是你的顯卡)上面,負(fù)責(zé)計(jì)算每個(gè)像素的光照、顏色、紋理、反射、折射等效果。
![]()
簡(jiǎn)單來(lái)說(shuō),著色器相當(dāng)于給GPU讀的“使用說(shuō)明書(shū)”,GPU有了這個(gè)說(shuō)明書(shū),才能知道游戲里的畫(huà)面該如何渲染。
如果這本“說(shuō)明書(shū)”沒(méi)編好或丟了,你會(huì)看到各種詭異的畫(huà)面:比如走著走著,場(chǎng)景突然加載不出來(lái),模型漆黑一片,或者角色眼睛變成詭異的紫色,缺少貼圖。
類(lèi)似這種↓
![]()
還有這種↓

(BV1xs421w7aj,來(lái)自@Kukku_くっく)
那么問(wèn)題來(lái)了,為什么會(huì)出現(xiàn)“下載十分鐘、編譯半小時(shí)”的情況呢?
——這是因?yàn)槊總€(gè)玩家的硬件配置千差萬(wàn)別。顯卡型號(hào)、驅(qū)動(dòng)版本、游戲版本、甚至操作系統(tǒng),只要有一個(gè)變量變了,之前的說(shuō)明書(shū)對(duì)機(jī)器來(lái)說(shuō)就成了“天書(shū)”。
![]()
開(kāi)發(fā)商又不可能為成千上萬(wàn)種硬件組合預(yù)先準(zhǔn)備所有情況。因此,當(dāng)你第一次啟動(dòng)游戲或更新驅(qū)動(dòng)后,CPU就要根據(jù)你當(dāng)前的環(huán)境,現(xiàn)場(chǎng)重新進(jìn)行“翻譯”。
——將程序員編寫(xiě)的代碼,翻譯成機(jī)器能看懂的二進(jìn)制指令(0和1)的這個(gè)過(guò)程,就叫作“編譯著色器”。網(wǎng)上解釋的視頻很多,感興趣可以搜一搜。
![]()
據(jù)說(shuō)新游戲的圖形api基本都是dx12或者Vulkan,新api接入了pso緩存技術(shù),提前編譯可以提高運(yùn)行性能——于是有了肉眼可見(jiàn)的“編譯著色器”過(guò)程。
而老游戲的dx11/dx10、OpenGL那些api就不需要,因?yàn)楫?huà)質(zhì)也就那樣,運(yùn)行的時(shí)候CPU順帶就可以把這活兒干了,相對(duì)無(wú)感。
現(xiàn)在有些廠商就比較坑爹了。
更新一些圖像處理啊什么的,它不在公告里說(shuō),直接默默更新了,這種熱補(bǔ)丁也會(huì)導(dǎo)致重新“編譯著色器”,最典型的就是《APEX英雄》。
![]()
我以前有個(gè)打“派”的朋友,他那臺(tái)老爺機(jī)每次進(jìn)游戲前先編譯10分鐘,再讀10分鐘地圖,敵人影都沒(méi)見(jiàn)著,半個(gè)小時(shí)已經(jīng)過(guò)去了。
當(dāng)然,也有一些游戲支持“后臺(tái)編譯”或者“先跳過(guò),等后面手動(dòng)編譯”的。缺點(diǎn)是如果優(yōu)化不到位,很容易遇到各種詭異的BUG。
像PC上的《使命召喚》,左上角有“著色器預(yù)載 XX%”的進(jìn)度條,我之前玩戰(zhàn)區(qū)的時(shí)候就被惡心壞了。
![]()
加載慢不說(shuō),還經(jīng)常卡進(jìn)度。不加載完畢你又不敢進(jìn)匹配,否則打到一半冒出一個(gè)“著色器優(yōu)化”警告的彈窗,直接崩掉游戲。
當(dāng)時(shí)網(wǎng)上流傳著一些玄學(xué)土方子,像是反復(fù)點(diǎn)擊匹配再取消來(lái)“手動(dòng)催促”進(jìn)度條;或者干脆在靶場(chǎng)掛機(jī),自己在一旁玩手機(jī),等它自然加載完成。
![]()
![]()
有人喜歡第一次加載時(shí)間長(zhǎng)點(diǎn),玩的時(shí)候絲滑點(diǎn)更好。也有人覺(jué)得,我就鎖定一定幀數(shù)(比方說(shuō)60幀),多出來(lái)的算力拿來(lái)編譯著色器更好。
——怎么選擇,最后還是要看廠商取舍,沒(méi)有高下之分。
![]()
![]()
02
面對(duì)漫長(zhǎng)的編譯等待,我們這些臭打游戲的能做的也不多,全看開(kāi)發(fā)者、軟件硬件,以及微軟的優(yōu)化。
舉個(gè)例子,你可能在Steam設(shè)置里見(jiàn)過(guò)“下載 - 著色器預(yù)緩存”的功能,不知道有什么用。
它的初衷很美好:當(dāng)同配置的其他玩家編譯好著色器后,Steam會(huì)將其上傳,讓你直接下載現(xiàn)成的緩存,從而跳過(guò)編譯過(guò)程。
![]()
主要還是針對(duì)Steam Deck掌機(jī)/主機(jī)這種硬件規(guī)格高度統(tǒng)一,且基于Linux架構(gòu)的自家設(shè)備,加速Vulkan/OpenGL游戲。
對(duì)于主流的 Windows游戲基本沒(méi)有用。加上下載服務(wù)器經(jīng)常“由于眾所周知的原因”連接超時(shí),反而會(huì)導(dǎo)致啟動(dòng)變慢。所以我建議PC玩家直接關(guān)掉。
![]()
另外,我記得NVIDIA 控制面板里也有一個(gè)“著色器緩存大小”設(shè)置,默認(rèn)通常只有512MB(放C盤(pán)上的),導(dǎo)致了很多動(dòng)態(tài)編譯的游戲切換時(shí)會(huì)搶占空間。
設(shè)置成較高的緩存大小限制(比如5G以上或者無(wú)限制),可以緩解一部分重復(fù)編譯帶來(lái)的卡頓。代價(jià)是會(huì)更占用磁盤(pán)空間。
不過(guò)要注意,有的人筆記本電腦就一塊固態(tài),還喜歡給硬盤(pán)分區(qū),C盤(pán)給個(gè)50G將將夠用,一不注意很容易被塞爆。
![]()
前兩天,微軟也在ROG Xbox Ally掌機(jī)推出了一個(gè)“云端編譯著色器”技術(shù),可以把編譯的任務(wù)放到云端處理,降低電池消耗,避免風(fēng)扇呼呼轉(zhuǎn)。
還有一個(gè)同步推出的“高級(jí)著色器交付”功能,允許游戲下載時(shí)預(yù)加載著色器,減少首次運(yùn)行卡頓,《崩壞:星穹鐵道》已經(jīng)適配了。
這種就是微軟聯(lián)合游戲廠商的結(jié)果——如今“編譯著色器”花費(fèi)的時(shí)間、額外功耗已經(jīng)成為一個(gè)痛點(diǎn)。為了讓你流暢游戲,程序員們簡(jiǎn)直操碎了心。
![]()
![]()
03
相比之下,PS5或Xbox這種游戲主機(jī)就省事多了。因?yàn)橛布?guī)格高度統(tǒng)一,廠商直接預(yù)編譯好一份“標(biāo)準(zhǔn)說(shuō)明書(shū)”隨游戲分發(fā),幾乎沒(méi)有重新編譯的煩惱。
這是我覺(jué)得現(xiàn)在主機(jī)相比PC,為數(shù)不多的優(yōu)勢(shì)之一:即下即玩,不折騰。以前我們總在聊獨(dú)占陣營(yíng)、聊生態(tài)圈,后來(lái)發(fā)現(xiàn)這些都是浮云。
![]()
→但反過(guò)來(lái),這種設(shè)計(jì)也成為了模擬器的痛點(diǎn)。
搗鼓過(guò)Yuzu、Ryujinx之類(lèi)Switch模擬器的朋友,一定對(duì)那種“莫名其妙的小卡頓”記憶猶新:游戲剛開(kāi)始的前幾分鐘、初次進(jìn)入新區(qū)域、或者放出某個(gè)特效,畫(huà)面總是會(huì)卡一下,非常影響游玩。
類(lèi)似現(xiàn)象存在很長(zhǎng)一段時(shí)間了,前代的Wii模擬器就有。

(Wii模擬器上的《銀河戰(zhàn)士3》,卡頓比較明顯)
歸根結(jié)底,主機(jī)游戲在設(shè)計(jì)之初就沒(méi)考慮過(guò)復(fù)雜的 PC 硬件環(huán)境這也是為什么Switch發(fā)售快十年了,模擬器該卡還是會(huì)卡,其實(shí)就是著色器編譯的鍋。
越是畫(huà)面復(fù)雜的Switch游戲,像《塞爾達(dá)傳說(shuō):王國(guó)之淚》這種,越是頻繁出現(xiàn)幀數(shù)暴降,卡成PPT的情況。
一般正常游戲3~5個(gè)小時(shí)以后,模擬器基本上自動(dòng)記錄好了大多數(shù)的著色器,后續(xù)再重開(kāi)游戲,同樣的場(chǎng)景和特效,才變得100%流暢。
所以模擬器非常吃CPU性能,你CPU不行,別說(shuō)5090顯卡了,9050來(lái)了都是無(wú)用功——顯卡好可以開(kāi)更高分辨率,但是幀數(shù)問(wèn)題還是要看CPU的。
![]()
![]()
當(dāng)然,這個(gè)話題涉及到灰色地帶,就不繼續(xù)展開(kāi)了。
如果你正在經(jīng)歷著不正常的頻繁卡頓,先不要慌——著色器緩存正在努力改善你糟糕的體驗(yàn)——而這個(gè)改善的過(guò)程,恰恰成了糟糕體驗(yàn)的來(lái)源。怎么辦?涼拌。
![]()
我們能做的只有不要閑的沒(méi)事就換一個(gè)顯卡驅(qū)動(dòng),不要沒(méi)事閑的就重新裝一遍系統(tǒng),不要覺(jué)得游戲有問(wèn)題,就把它卸了重裝,不要做些多余的動(dòng)作,直接正常玩就行了。還有你們,做游戲的,不要每天瞎雞兒熱更新啊!
![]()
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.