网站搜索

什么是着色器编译以及为什么它会使 PC 游戏卡顿?


总结:由于每台PC的GPU都不一样,为了让游戏运行在不同品牌和型号的显卡上,需要进行shader编译。不幸的是,编译过程会导致烦人的卡顿。

有些游戏有一种卡顿现象,无论您的计算机有多强大,或者您选择的设置如何,都会发生这种情况。这是由称为“着色器编译”的过程引起的,这是 PC 游戏中日益严重的问题。

什么是着色器?

着色器是帮助确定渲染图形各个方面的计算机程序。例如,像素着色器计算像素的属性。这包括该像素的颜色、亮度、反射率或透明度。如果你想让游戏中的某些东西看起来很湿,你可以使用特殊的着色器来实现这种效果,而不是费力地手工完成。

着色器使现代 GPU 如此灵活,因为这些 GPU 旨在运行任何可以用着色器编程语言表达的东西。它们取代了旧的“固定功能管道”GPU 技术,在这种技术中,GPU 可以执行的图形数学类型被硬连接到其硅片中。

什么是着色器编译?

“编译”是一个计算机术语,指的是将人类程序员编写的代码转换为旨在运行相关软件的特定处理器可以理解的机器代码。因此,例如,您可以编译代码以在 Intel CPU 或 Apple Silicon 上运行。

GPU 也需要同样的东西。必须编译着色器代码以在相关的特定 GPU 品牌和型号上运行。如果您更改 GPU、更新其驱动程序或游戏收到更新,则必须重新编译着色器。

为什么有些 PC 游戏有着色器编译卡顿?

在某些游戏中,在后台编译着色器会干扰游戏本身,导致明显的卡顿。计算机在编译着色器时过于努力,无法顺利运行游戏。一些开发人员努力优化编译,以使其对游戏性能影响很小或没有影响,而其他开发人员则将着色器编译分散到整个游戏中,希望这种停滞是短暂的。在那种情况下,您只会在新关卡开始时遇到卡顿,或者当您进入使用到那时还不需要的着色器的新环境时。

编译停顿在虚幻引擎 4 游戏中尤为严重,这是一种广泛流行的游戏引擎。具体来说,在 DirectX 12 下运行游戏时,这些卡顿会成为一个问题。部分原因是 DirectX 12 改变了着色器编译的工作方式,将更多控制权交给了开发人员。然而,这也意味着开发人员可能无法使用最新最好版本的 DirectX 确定优化着色器编译的最佳方法。

为什么控制台没有着色器编译卡顿?

着色器编译卡顿是 PS5 和 Xbox Series X|S 等游戏机完全不存在的问题。这仅仅是因为开发人员确切地知道每个控制台中的硬件是什么,以便他们可以预编译所有着色器;无需在本地系统上编译它们,因为您已经知道您的目标是哪个 GPU。

可以在 PC 上执行此操作,但由于 GPU 和系统配置太多,因此不切实际。然而,就 Valve Steam Deck 而言,Valve 包含一些游戏的预编译着色器缓存,因为当然,所有 Steam Deck 都具有相同的 GPU。

编译卡顿怎么办?

不幸的是,大多数时候,开发人员必须修复着色器编译问题。好消息是他们最终会掌握这个过程。 Unreal Engine 5.1 可能包含一项自动化功能,可帮助开发人员进行缓存而不会对性能产生如此严重的影响。

您可以采取的措施来减轻口吃的清单并不长,但其中一些选项可能会有所帮助:

  • 如果一款游戏允许您预编译着色器,那就顺其自然吧。这可能需要一段时间,但游戏体验不会卡顿。
  • 除非游戏更新包括着色器卡顿修复,否则请等到您玩完游戏,否则着色器可能会再次编译。
  • 在您完成当前游戏之前不要更新 GPU 驱动程序,以防它再次触发编译。
  • 当游戏中开始出现编译卡顿时,请按下暂停按钮并等到它完成后再继续玩。
  • 使用 DirectX 11 而不是 DirectX 12 版本的游戏。着色器卡顿通常会减少或消失,尽管您会在讨价还价中放弃 DX12 功能。
  • 改为在控制台上玩游戏。

随着时间的推移,这个问题可能会消失或变得不那么具有侵扰性。例如,开发人员可能会将着色器编译卸载到游戏不需要的 CPU 内核上,这在具有许多内核的现代 PC 上很常见。在那之前,#stutterstruggle 仍将是 PC 游戏中的一个恼人问题。