首页 / Unreal Engine has a solution for shader stuttering.

Unreal Engine has a solution for shader stuttering.

2025/2/6 00:04:17
Unreal Engine 5.2 引入预加载 PSO 系统,旨在缓解游戏中的着色器编译卡顿问题。传统方法难以应对复杂游戏中庞大的 PSO 组合数量,导致延迟和闪烁。新系统通过预先准备最有可能使用的 PSO,并在加载屏幕或需要时进行准备,从而减少明显的延迟。该技术目前仅适用于部分着色器,但未来计划改进全局着色器的处理方式。
Unreal Engine has a solution for shader stuttering.

Unreal Engine 5.2 引入了预加载管道状态对象 (PSO) 系统,旨在减少游戏中的着色器编译导致的卡顿问题。这缓解了着色器卡顿,目前是 PC 游戏面临的一大难题。

着色器编译卡顿(也称为着色器卡顿)发生在游戏需要在显示之前准备着色器时,导致明显的延迟和着色器明显闪烁。这种延迟是由于将高级着色器代码转换为不同图形卡可以理解的机器码非常复杂造成的。

现代图形API(如DirectX 12 和 Vulkan)引入了 PSO(渲染命令管道状态对象),以提高性能。PSO 将着色器和渲染设置组合在一起,以便预先准备。然而,在拥有许多不同材质和渲染选项的复杂游戏中,可能的 PSO 组合数量可能会让人望而生畏。 早期方法,例如 Unreal Engine 的“捆绑 PSO 缓存”,无法跟上步伐。这种缓存需要大量资源来跟踪和管理,并且难以管理。

Unreal 引入了新的 PSO 预加载系统,解决了之前的一些问题。 在加载时,它会检查材质、网格和整体设置,确定哪些 PSO 最有可能需要使用。这些将是在加载屏幕期间或刚需要的时候准备好的。如果物体稍后出现,它们可以等待 PSO 준비完毕或者使用基本材质。 这有助于减少明显的延迟。

很高兴引擎正在努力解决这个问题。有趣的是,这仅仅是因为技术的进步而成为一个问题。过去,游戏会附带预编译着色器代码,图形驱动程序会在游戏中运行时将其转换。对于较简单的游戏来说,这种方法效果很好,但随着着色器的复杂性和图形卡的提升,性能问题逐渐出现。

请记住,处理材质变化是一个正在进行的工作,目前只适用于某些着色器。例如,全局着色器(用于运动模糊等效果)的处理方式不同,仍然会遇到问题。不过,未来计划改进这一点。

尽管如此,似乎 Unreal Engine 正走在解决这个问题的前列。希望永久解决方案能让着色器卡顿成为过去。