有時候你會發現,無論電腦多強大或是設定得再理想,在玩有些遊戲時好像還是有點卡頓,這是怎麼一回事?先別急著訂購最新處理器、顯卡,因為這問題是由於被稱為「著色器編譯」的過程所引起的,而這問題在電腦遊戲領域中日益嚴重。由於每台電腦的顯卡都不同,因此遊戲需要著色器編譯才能在不同品牌、型號的顯卡上運行,只是這編譯的過程中可能就會有點波折。
儘管電腦很強遊戲還是卡頓?原來是著色器編譯搞得鬼
什麼是著色器?
著色器是用來幫助確認渲染圖形各種細節的電腦程式。例如,像素著色引擎(Pixel shaders)用來計算像素的屬性,這包括該像素的顏色、亮度、反射率和透明度等。如果你想讓遊戲中的某個物件看起來有濕潤的外觀,妳可以使用特殊著色器來實現,不需要親力親為手工打造。
著色器讓現代的 GPU 更加靈活,這些 GPU 可以運行用著色器程式設計語言表達的任何內容,取代了執行圖形運算硬接入晶片的舊有固定管道(Fixed-Function Pipeline)技術。
什麼是著色器編譯?
「編譯」是一個電腦術語,指的是將工程師編寫的程式碼轉換後,讓運行鄉端軟體的特定處理器得以理解並執行,舉例來說,你可以編譯程式碼在 Intel 處利器或 Apple 晶片上運行。同樣的事情對於 GPU 也是必要的,著色器程式碼必須編譯成在特定 GPU 品牌和型號上運作,如果更換 GPU、更新驅動或遊戲收到更新時,就必須對著色器重新編譯。簡單來說,你可以將各品牌、型號的 GPU 想像成不同國籍的人,將你說的語言翻譯成他們能懂的語種,當你有補充說明時,就得重新翻譯一次讓它們更清楚你的意思。
為什麼有些電腦遊戲會出現著色器編譯卡頓?
在某些遊戲中,後台進行的著色器編譯工作會干擾到遊戲本身,導致玩家有感的卡頓,這可以說是電腦太過努力地編譯著色器而使得某些遊戲無法順利運行。目前有些開發者致力於最佳化編譯過程使之對遊戲效能幾乎沒有影響,但有些開發者在遊戲中大量使用著色器,使得電腦在編譯時工作更加吃重。
編譯卡頓的情況在 Unreal Engine 4 構建的遊戲中尤其嚴重。具體來說,在 DirectX 12 下運行遊戲時,這些卡頓會成為一個問題,這是因為 DirectX 12 改變了著色器編譯的運作方式,將更多的控制權交給了開發人員。同是,這也表示開發者可能沒有使用最新和最進步的 DirectX 版本確認最佳化著色器編譯的方式。
為什麼遊戲主機上就不會有著色器編譯卡頓的問題?
著色器編譯問題在 PS5 和 Xbox Series X|S 等遊戲中完全不存在。這僅僅是因為遊戲主機內部的硬體是固定的,開發者只需要針對特定項目來預編譯所有著色器,無需在本機系統上因為每個玩家硬體不同而分別編譯。
對於著色器編譯卡頓問題,你能做些什麼?
不幸的是,大多數關於著色器編譯卡頓必須由開發者來修復,好消息隨著遊戲開發工具的進步會有所改善。像 Unreal Engine 5.1 中可能就包含有自動化功能,可以幫助開發者暫存而部會對效能產生那麼嚴重的影響。對於著色器編譯卡頓你能做的相當有限,但其中一些可能會稍微有點幫助:
- 如果遊戲允許你預先編譯著色器,請同意它,這可能需要一點時間,但在進入遊戲體驗後將無卡頓現象發生。
- 延後 GPU 驅動程式更新,直到你完成當前遊戲進度,以防再次觸發編譯。
- 當遊戲中開始卡頓時,請暫停遊戲並等待一會兒讓它執行完成再繼續。
- 玩 DirectX 11 而不是 DirectX 12 版本的遊戲,通常著色器卡頓會減少或不存在,但也會失去 DX12 的某些功能。