十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

着色器缓存大小怎么选?10GB与无限制实测对比及清理指南

着色器缓存大小怎么选?10GB与无限制实测对比及清理指南 着色器缓存这个话题我在好几个游戏群里都见人吵过。有人新装好显卡驱动后玩《赛博朋克2077》进游戏第一次拉开车门画面直接卡成PPT过几分钟又恢复正常有人清理了一下所谓的“缓存垃圾”结果下次开游戏读条时间翻了一倍吓得以为硬盘坏了。这些问题十有八九都出在着色器缓存上。这篇文章就把三件事讲透着色器缓存大小到底该设多少不同选项之间有多大区别以及清理之后到底会不会影响游戏体验。顺带把我这些年折腾显卡驱动、排查游戏卡顿的经验一起分享出来保证你读完能少走很多弯路。1. 先搞懂着色器缓存在干什么1.1 着色器到底是什么着色器Shader不是某个具体的文件它是一段运行在GPU上的程序负责告诉显卡“这个像素应该显示什么颜色、这个物体在光照下应该呈现出什么质感”。现代3A游戏的画面里每一帧都涉及成千上万个着色器计算水面反射、皮肤次表面散射、阴影贴图、体积雾这些东西底层全是着色器在干活。你可以把着色器理解成一道菜的菜谱。同样的食材模型、贴图、光源数据不同厨师GPU照着同一本菜谱做出来的菜应该是差不多的。但问题在于CPU和GPU是两套完全不同的硬件架构游戏引擎用高级语言写好的着色器代码必须先翻译成当前这块显卡能直接执行的机器指令这个过程叫“编译”。编译这一步特别吃CPU性能。一个大型3A游戏进入新场景时可能需要现场编译几千个甚至上万个着色器每个着色器的编译时间从几毫秒到几十毫秒不等。就算平均只要10毫秒一万个就是100秒。当然实际不会一次全编译但逐帧累积下来就会出现那种“玩几步卡一下、卡完又恢复”的典型症状业内管这个叫Shader Compilation Stutter着色器编译卡顿。1.2 缓存就是“把编译结果存下来”为了避免每次进游戏都重新编译一遍驱动和游戏引擎都会把编译好的结果存到硬盘上下次直接读取使用这就是着色器缓存的本职工作。NVIDIA在驱动面板里给出的选项控制的就是这个缓存文件能占用多大的磁盘空间。核心逻辑你记住一句话就行缓存足够大游戏画面就更流畅缓存不够大驱动只能优先保留最近用到的那部分早先编译好的结果被淘汰掉等游戏再次需要时就得重新编译卡顿就来了。实际玩同一款游戏比如我常跑的《艾尔登法环》第一次进游戏时打开地图小概率会感觉镜头移动不顺畅那就是驱动在临时补编译。玩过一段时间后同样的场景操作就完全平顺了因为编译结果已经被缓存命中。1.3 为什么有的游戏首次进图特别卡不同游戏引擎的建筑缓存策略差别很大。Unreal Engine系的游戏大多数会把Pipelines缓存写进项目配置目录试图在启动时全量预编译Unity系的大型开放世界游戏则更多依赖驱动层的缓存。至于《使命召唤战区》《暗黑破坏神4》这种体量的大作很多都内置了“着色器预编译”步骤启动游戏时先显示一个进度条那个过程就是在批量编译着色器。问题在于如果驱动层缓存空间设置得太小预编译结果根本存不下几个游戏以为“我已经预编译过了”直接跳过这个步骤结果实际运行中驱动发现缓存没命中又得临场编译。这就是为什么有些人明明等完了预编译进度条进游戏还是疯狂卡顿的直接原因。2. 缓存大小设置10GB和无限制到底差多少2.1 NVIDIA控制面板里的选项说明在NVIDIA控制面板里找到“管理3D设置”拉到全局设置列表找到“着色器缓存大小”你会看到四个选项关闭、默认、10GB、无限制。很多人的第一反应是直接拉满到无限制反正硬盘有空间但实际使用中并没有那么简单。选项实际行为适合人群关闭完全不缓存编译结果每次进游戏都从头编译不建议卡顿程度会让你怀疑电脑坏了默认驱动按需管理一般限制在数GB级别老驱动常见256MB-4GB不等只有一个常玩游戏、不常换游戏的轻度用户10GB固定最大10GB缓存空间覆盖大多数游戏的日常需求绝大多数玩家主力推荐无限制按需增长理论上缓存文件可以无限膨胀硬盘空间充裕、常玩多个大型游戏、喜欢开预载的玩家“默认”这个选项为什么不够用NVIDIA早期驱动默认缓存上限非常保守经常只有几百MB后来更新到较新版本驱动后默认值才逐渐放宽。但即便如此面对《战神》《心灵杀手2》这种着色器数量动辄上万的游戏默认档位的缓存很容易被顶满导致旧条目被淘汰游戏过一段时间又出现一次新的编译卡顿。2.2 10GB档位的实际表现我自己做过一个实测对比同一块RTX 4060同一台机器分别用“默认”和“10GB”两个档位运行《荒野大镖客2》。默认档位下从圣丹尼斯城跑到周边沼泽地带大概每隔三四分钟会出现一次半秒到一秒的明显顿挫切成10GB之后同样的路线跑一个多小时一次明显卡顿都没有出现过。为什么10GB就够了道理在于游戏工业里着色器的变体数量是有上限的单个游戏全流程涉及的独特着色器组合通常在几千到一万多这个量级每个编译结果的体积平均下来也就几百KB到一两MB。10GB足够覆盖一到两款主流3A游戏的全部缓存而且留出了足够的冗余空间。2.3 无限制档位要小心的问题无限制档位最大的坑在于磁盘空间管理。驱动不会自动帮你清理历史缓存旧的缓存条目会一直躺在硬盘上。如果你玩过的游戏很多几年下来这个文件夹可能膨胀到30GB甚至更多。我见过一位群友他的C盘里NVIDIA缓存文件夹占了47GB这就是“无限制”不设防的后果。另一个冷知识是NVIDIA的着色器缓存并不专属于某个游戏它是按项目的哈希值来命名的。你卸载游戏之后驱动不会自动删除对应的缓存所以那些缓存文件就成了“孤儿文件”白白占着硬盘空间。用无限制档位时间越长这种孤儿文件积累得越多。综合来讲我个人的习惯是固定10GB。它既不会因为太小而导致缓存淘汰也不会因为完全无限制而导致硬盘空间失控算是一个性价比非常高的折中档位。如果你硬盘空间本身就紧张而且玩的游戏不太多10GB也够用如果你经常同时玩十来个大型3A游戏又实在懒得定期清理那就认命选无限制然后定期看一眼磁盘占用。3. 清理着色器缓存影响真的那么大吗3.1 清理后会经历一个“阵痛期”这个问题的答案是有影响而且影响分两种一种是明显的、用户直接感受得到的另一种是隐性的、几乎察觉不到的。明显的感受就是清理完缓存之后你下一次运行游戏时驱动需要重新编译那些被删掉的着色器。编译期间游戏会出现可感知的卡顿、掉帧、读条变慢。某些优化较差的游戏甚至可能出现一两秒钟的完全假死CPU占用瞬间飙满。这个阵痛期长短取决于游戏复杂度从十几秒到十几分钟都有可能。隐性影响则体现在负载上。重新编译着色器不仅仅耗时还会让GPU和CPU同时处于高负载状态整机功耗上升风扇转速拉高。很多人在清理缓存后觉得“电脑变卡了”其实是把编译期的性能下降误判成了永久性损伤。好消息是这两类影响都是短暂的。缓存重新建立起来之后游戏流畅度会恢复到清理前的水平。清理着色器缓存不会影响存档、不会影响游戏设置、不会影响帧数上限更不会导致游戏无法运行。3.2 到底什么时候才需要清理既然清理会带来阵痛那平时就完全不要动它吗也不尽然下面这几种情况值得做一次清理第一种驱动大版本更新之后。NVIDIA和AMD的大版本驱动发布时大概率会改动底层编译策略旧缓存不一定兼容新驱动。最典型的例子是NVIDIA在某一版驱动后改用新的缓存格式旧缓存全部作废。这时候你不清驱动也会自动重来还不如手动清干净给新驱动一个清爽的起点。第二种游戏频繁崩溃并且错误日志指向DXGI_ERROR_DEVICE_REMOVED或类似图形错误。这种问题有时候是因为缓存文件损坏导致的。着色器缓存在写入过程中如果遇到断电、强制关机、蓝屏很容易留下损坏的条目驱动读取到坏缓存就可能直接报错。手动清一次相当于把可能损坏的旧数据全部推倒重来。第三种你明显感觉到硬盘空间吃紧而且确认缓存文件夹占了大量空间。这种情况多半是多年积攒的“孤儿缓存”在作祟清掉它们没有任何副作用只是下次玩对应游戏时会重新编译一次。3.3 各平台正确的清理姿势NVIDIA用户清理方式很简单先退出所有正在运行的大型游戏然后打开文件资源管理器在地址栏输入%ProgramData%\NVIDIA Corporation\NV_Cache把里面的文件全部删除。也可能存在C:\Program Files\NVIDIA Corporation\NV_Cache这个路径视驱动版本而定。同时别忘了检查%LocalAppData%\NVIDIA\DXCache和%LocalAppData%\NVIDIA\GLCache这两个文件夹分别存放DirectX和OpenGL类游戏的着色器缓存同样可以放心删除。AMD用户则有两个入口。旧的Radeon Software版本可以在“设置”里找到重置着色器缓存的选项新的Adrenalin版本通常在“游戏-全局图形”里会有相关选项。如果找不到直接删除C:\AMD\CNC或者%LocalAppData%\AMD\CNC里的文件也能达到类似效果不同版本路径有差异不确定就先备份再删。注意决不要为了清缓存去动游戏本体的存档目录比如Steam的userdata文件夹。那个文件夹里存的是云存档同步数据删错了你的游戏进度就真的没了。着色器缓存只跟图形驱动相关跟存档完全井水不犯河水。4. 常见问题排查与避坑实录4.1 清理完还卡先排查这几点有朋友按我上面的方法清完缓存之后游戏反而更卡了于是跑来问我是不是缓存有什么魔法。答案很简单清理之后那段时间本来就会更卡因为所有着色器都要重新编译。如果两三天之后情况依然没有好转问题就不在缓存本身了。第一个要查的是驱动版本。驱动本身有问题的话再怎么调缓存也没用。NVIDIA的驱动从GAME READY到STUDIO分支差异主要在认证上建议游戏用户优先选择Game Ready版本但注意不要追新追得太猛。我吃过一次亏某次更新到最新驱动后反而出现了贴图闪烁回滚到前一个版本才恢复正常。第二个要查的是Windows图形硬件加速GPU计划是否开启。这个选项在“设置-系统-屏幕-显示卡-默认图形设置”里打开之后据说能降低延迟但在部分老游戏上有兼容问题会导致卡顿不规律。如果开着它出现了奇怪卡顿关掉再试一轮很可能是它在捣乱。第三个排查方向是第三方录屏和监控软件。RTSS、微星小飞机这类工具会注入到渲染管线里它们和驱动层缓存机制本身不冲突但如果版本太老和新的着色器缓存逻辑碰到一起偶尔会引发帧生成时间异常。临场测试时先把这些后台工具全部关掉只留游戏本体能排除一大半干扰因素。4.2 为什么有的游戏每次启动都要重新编译每次启动游戏都要等一段时间编译重新打开又等这种问题其实频繁出现在某些特定引擎上。比如《逃离塔科夫》早年版本就有这个毛病Unity引擎的预编译机制做得不够好导致每次进新地图都会小卡一下。还有一类情况是游戏自身配置问题。某些游戏会把编译选项和画质档位绑定在一起你每次调整画质设置从“高”切到“超高”引擎都会判定着色器配置已更改于是把所有变体重新编译一遍。这种属于正常引擎逻辑不是驱动和缓存的问题。如果某款游戏在完全不动设置的情况下每次都从头编译一遍那大概率是这款游戏没把预编译结果写到缓存目录。你可以检查游戏安装目录下有没有ShaderCache或类似名字的文件夹如果有而且每次启动都会刷新那就是游戏内置缓存管坏了建议去官方社区反馈。4.3 一份速查表和几条实操心得症状原因对策清理缓存后进游戏卡顿着色器重新编译中正常现象连续玩几天自动恢复驱动更新后首次进游戏卡顿新旧驱动缓存不兼容提前手动清理旧缓存避免驱动自行处理某个游戏每次启动都要编译游戏引擎预编译机制缺陷先确认游戏内置缓存目录写权限正常缓存文件夹异常膨胀长期用“无限制”档位定期清理孤儿缓存或改回10GB档位游戏中隔几分钟顿一下缓存上限不足导致淘汰检查是否只有2GB-4GB档位直接拉高到10GB一条我踩了很多次坑之后总结出来的心得不要在游戏大版本更新当天去清缓存。很多游戏更新版本后会重做渲染管线旧缓存本来就要作废你再手动清一遍等于把原本可能还能复用的一部分也一起删了双倍阵痛。等更新完玩一两个小时让新缓存建立得差不多之后如果还有问题再动手。另一条经验是关于SSD的。着色器缓存的读取速度直接受到硬盘性能影响机械硬盘和SSD在加载编译结果时的差别是肉眼可见的。如果你还在用机械硬盘装游戏强烈建议把游戏和缓存放进SSD哪怕是一个老的SATA SSD改善都非常明显。这不是玄学是实打实的IO性能差距。还有一条就是别把着色器缓存当成万能调试工具。遇到游戏卡顿优先排查显卡驱动设置、游戏内画质选项、散热降频这些因素。把缓存大小从“默认”调到“10GB”解决的是编译类卡顿如果是显卡温度过高导致降频调缓存一点用都没有反而会浪费时间。我平时在给朋友装机或者远程帮忙调电脑时一般习惯这样操作先把着色器缓存稳定设在10GB然后观察游戏实际运行情况如果还有偶发卡顿再配合进程监控判断卡顿来自磁盘、CPU还是GPU。着色器缓存不是越大了不起它是整个图形管线里最基础的一块拼图拼对了流畅度自然就上来了拼错了也只是卡不会伤筋动骨。
返回列表