终于!《影之刃零》在今天发售了。
有个小问题就是不知道为什么学《GTA6》都要在周四发布,而截至本文撰稿时,相信有很多社畜还在工位坐牢。

老猫有社畜朋友中午特地觉也不睡了,急着先体验一下《影之刃零》。

然后天塌了。为什么呢?是《影之刃零》不好玩吗?
那倒不是,是这游戏着色器编译为什么会这么久!!!
编译快一点也是一不小心几十分钟就过去了,结果牺牲午睡时间几乎啥也没玩到。
并不是朋友的电脑配置差。老猫看了看,网上到处都有玩家在吐槽着色器编译怎么那么慢慢慢。

相信大家能看到“77”这个关键词,确实挺多人不知道为什么就卡在77%。

有玩家都吐槽着色器一个不好就要搞1小时多,是不是梁其伟的防退款机制。

不仅如此,编译个着色器CPU的占用率能彪到接近100%,恐怖如斯,也是有玩家体验到了cpu占用近乎100%是什么感觉了,啥也干不了。

梁其伟:影境太大,你忍一下。
老猫想起当年玩《怪物猎人:荒野》和《神秘海域4》都要等着色器编译,非得编译完就算了,还等挺久。

说到这里,有的朋友可能会好奇这着色器是干嘛的?一定要在正式开始游戏前把这玩意编译好吗?
好消息!不用去问AI了,都看到这了,老猫就来聊聊这个。
今天老猫就向各位朋友简单科普一下什么是着色器——
着色器,其实顾名思义就能感觉到这玩意是参与上色的。专业一点来讲就是运行在显卡上的小程序,负责图形渲染过程中的特定计算。
计算什么呢?
就比如,你看这是主角挥动的一把长剑。

游戏里的剑为什么会反光?金属表面为什么和布料不一样?光源移动以后,阴影为什么变化?
这些五彩斑斓的画面背后,就有各类着色器参与计算。

大概知道着色器是什么后,就来到关键问题,为什么着色器要编译呢?
首先得解释一下,什么是“编译”。
简单来讲,编译就是把程序员写出来的代码,转换成计算机能够执行的指令。
毕竟计算机看不懂程序员写的代码,总得先翻译一下,人家才知道该怎么做吧。
着色器也是同样的道理。
然后呢,玩家显卡太太太多了,都是玩《影之刃零》的,有人用1060有人用5090,更何况即使用一样的显卡,显卡驱动版本还可能不一样。
就使得游戏无法简单地为所有玩家提供完全相同、可直接执行的“翻译”。

所以游戏需要玩家的机子针对当前硬件进行进一步的编译。
这也解释了为什么主机玩家几乎就不需要等着着色器编译,主机的硬件和软件环境更统一嘛,配置什么的都相对固定,开发者能够更有针对性地提前准备着色器的编译。
有的朋友可能会想,欸有不少游戏就没有这个打开游戏前要编译着色器来罚站的啊?
那只是系统没告诉你罢了。

有些游戏会把编译工作安排在加载界面,有些则会在游玩过程中逐步完成,还有些游戏本身需要编译的内容就没那么多,自然不需要玩家等上半天。
不过这个边玩边编译的方式,虽然能让玩家提前进入游戏,但也可能带来一个问题。
就是你打着打着,BOSS突然放出画面华丽的招式,游戏却因为相关着色器还没准备好,需要临时进行编译。
在你看来就是游戏画面卡了一下,恼人的抽帧问题!
老猫前文提到过的《怪物猎人:荒野》,卡普空就承认了游戏边玩边编译,导致游戏画面出现卡顿。

所以,提前编译和游玩时编译,某种程度上也是在“开玩前多等一会儿”和“玩到一半可能卡一下”之间做取舍。
(当然,并不是说提前编译,画面就一定不会卡,游戏卡顿的原因是多种多样的)
不知道各位会怎么选,反正换老猫的话,那还是提前编译好了,因为玩的时候突然卡一下确实挺烦人的。
相信大家也能明白如何在保证游戏流畅的同时,尽量减少玩家等待着色器编译的时间,是开发者需要解决的问题了。
而正好,正好!就在《影之刃零》发售前不久,巨硬发布了个新技术。
这新技术叫“Advanced Shader Delivery”,也就是高级着色器交付,简称 ASD。
它能让着色器编译的时间变短,还能减少因为着色器发生的卡顿,并节省功耗。

原理很简单。既然玩家的电脑要根据显卡和驱动组合来编译着色器,那能不能提前在云端把对应组合编译好,然后随着游戏一起提供给玩家?
巨硬正在做的就是这件事。
最近的《使命召唤:现代战争4》就使用了ASD,将着色器编译需要的时间缩短至几秒钟。

这新技术刚出来,《影之刃零》就没用上ASD,让大家想玩这游戏得先坐牢。希望靠着ASD,之后不再有游戏需要大家等着色器编译等那么久。
不过,那都是以后的事了。至于现在嘛,该坐的牢还是得坐。
老猫也是坐等回去打开《影之刃零》,看能编译多久了。
