
着色器正在编译中...显卡的画质说明书
打开刚下载好的心心念念的3A大作,结果卡在一个进度条上:"正在编译着色器...",一等就是许久,电脑风扇呼呼狂转,究竟发生了什么事。其实这是游戏的一种"标配仪式",今天就花几分钟了解下。

1."着色器"是什么?
"着色器"是一个文件,里面写着代码,可以理解为显卡的指导书。显卡要工作,要按照着色器里面的指导运行,比如游戏里面的光是如何反射的,水是如何流动表现的,色彩要哪种鲜艳度。没有指导书,显卡就不知道该如何工作,屏幕自然是一片黑或者乱码。"着色器" 作为指导书告诉显卡游戏应该是表现什么样的画面。
2. 那编译是什么?着色器为什么要编译?
上述说了“着色器”是一种代码文件,但里面的代码属于高等语言,用的是人类能看懂的"高级语言"(类似英语),符合人类思维,更易于程序员理解和操作。但显卡是个底层硬件(老外),听不懂这个语言,它需要自己的语言。编译,就是把一种语言翻译成另一种语言。把程序员的 "高等语言"(类似英语) 翻译成显卡能执行的 "底层语言"(机器码二进制)。只有翻译完了显卡才能工作。
3.为什么不能在游戏下载时就翻译好?
原因是比较复杂的,咱们挑两点重要的说:
- 原因一:硬件太杂了 (众口难调)
如果是 PS5 或 Xbox 这种游戏主机,全球几千万台机器硬件一模一样,厂商确实可以提前翻译好,所以你很少见主机游戏有这个进度条。但 PC端 不一样!显卡可能是 NVIDIA 的,也可能是 AMD 的;驱动可能是昨天的,也可能是去年的。不同的显卡、不同的驱动程序,需要的 "显卡语言" 完全不同。如果厂商想提前编译好,就得为市面上成千上万种 "显卡 + 驱动" 的组合分别准备一份。原本 100G 的游戏,可能要变成 10TB 才能装下所有版本!这显然不现实。所以,唯一的办法就是:把通用的源代码给你,让你在自己的电脑上,根据你的具体配置,现场翻译。
- 原因二:为了极致的性能 (现做的才香)
现场编译虽然慢,但能针对你当前的硬件进行极致优化。编译好的缓存会存在你硬盘里,下次再玩就不用等了(除非你换了显卡或更新了驱动)。
4.为什么有的游戏不显示这个进度条?
其实所有现代 3D 游戏都要编译。
- 小游戏/老游戏:着色器文件少,几秒钟就编完了,你还没注意到进度条它就结束了,或者它偷偷在后台边玩边编(但这会导致玩游戏时突然卡顿一下)。
- 大型 3A 游戏:着色器成千上万个,必须要在开始前集中火力编译完,否则玩到一半突然卡顿会更破坏体验。所以它们选择把痛苦集中在开头,明明白白告诉你: "我在干活,请稍候"。
总结:着色器是一种显卡的指导书,告诉显卡如何工作,编译是把着色器这个指导书翻译成显卡懂的语言。着色器编译其实就是 PC 游戏为了兼容万千硬件配置,不得不付出的"时间税"。它在用你开机时的十几分钟等待,换取你后续几十个小时的流畅体验。