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

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

(Wii模擬器上的《銀河戰士3》,卡頓比較明顯)
歸根結底,主機游戲在設計之初就沒考慮過復雜的 PC 硬件環境這也是為什么Switch發售快十年了,模擬器該卡還是會卡,其實就是著色器編譯的鍋。
越是畫面復雜的Switch游戲,像《塞爾達傳說:王國之淚》這種,越是頻繁出現幀數暴降,卡成PPT的情況。
一般正常游戲3~5個小時以后,模擬器基本上自動記錄好了大多數的著色器,后續再重開游戲,同樣的場景和特效,才變得100%流暢。
所以模擬器非常吃CPU性能,你CPU不行,別說5090顯卡了,9050來了都是無用功——顯卡好可以開更高分辨率,但是幀數問題還是要看CPU的。
![]()
![]()
當然,這個話題涉及到灰色地帶,就不繼續展開了。
如果你正在經歷著不正常的頻繁卡頓,先不要慌——著色器緩存正在努力改善你糟糕的體驗——而這個改善的過程,恰恰成了糟糕體驗的來源。怎么辦?涼拌。
![]()
我們能做的只有不要閑的沒事就換一個顯卡驅動,不要沒事閑的就重新裝一遍系統,不要覺得游戲有問題,就把它卸了重裝,不要做些多余的動作,直接正常玩就行了。還有你們,做游戲的,不要每天瞎雞兒熱更新啊!
![]()
![]()
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.