打开网易新闻 查看精彩图片

星彡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的。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

当然,这个话题涉及到灰色地带,就不继续展开了。

如果你正在经历着不正常的频繁卡顿,先不要慌——着色器缓存正在努力改善你糟糕的体验——而这个改善的过程,恰恰成了糟糕体验的来源。怎么办?凉拌。

打开网易新闻 查看精彩图片

我们能做的只有不要闲的没事就换一个显卡驱动,不要没事闲的就重新装一遍系统,不要觉得游戏有问题,就把它卸了重装,不要做些多余的动作,直接正常玩就行了。还有你们,做游戏的,不要每天瞎鸡儿热更新啊!

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片