当前位置:首页|资讯

“八十一难”第二难?着色器编译是什么?

作者:大象搞机发布时间:2024-09-23

相信大伙最近在玩《黑神话:悟空》的时候,都有碰上过“着色器编译”这么一个等待页面。原本以为只是个简单的等待加载,可没想到这一等就是二十多分钟......如果说游戏的八十一难第一难是解压,那着色器编译就是妥妥的第二难。

而除了黑神话,其实在《Apex:英雄》《最后生还者》等众多游戏里我们也能看到它的存在,为什么这些游戏都离不开着色器编译呢?

 NO.1 什么是着色器?   

着色器(shader)是一种计算机程序,用于计算图像中的光照、亮度、颜色等各种渲染细节。简单的来说就是一种专为图形渲染而生的代码,通常运行在GPU上。而有了着色器,我们才能看到各种精美的画面和场景特效等等。

它包括像素着色器、顶点着色器、光线追踪着色器等几种类型。以像素着色器为例,游戏开发者可以用它模拟火炬的闪烁光、枪口的喷火光效,或者创建逼真的爆炸照明效果,为玩家创造更为沉浸真实的游戏体验。

除了用于游戏的画面渲染,着色器也被广泛用于很多不同领域的工作,例如CG特效处理、影片后期处理等。

NO.2 为什么着色器需要编译 ? 

由于着色器本质上是一系列程序代码,要想让它能够在硬件上正常运行,就需要将其转变成计算机可以识别的语言。编译也就是将源代码转变为机器可执行代码的过程。

举个例子,我们可以把GPU假设为一个外国人,我们则是着色器。我们说的话必须翻译成他听得懂的语言,也就是上图中的机器码,这样他才能够理解我们的意思。只有经历这一过程,游戏开发者打造的无数令人惊叹的视觉效果,才得以最终呈现在我们面前。

 NO.3 为什么着色器编译等待时间这么长?

原因一:现代游戏材质的复杂性

现代的一个3A大作游戏,可能一帧画面就有多达上万个着色器在共同工作,极为耗费算力。进入一个不同的关卡、与新的敌人交战,或是观赏沿途的瑰丽景色,都需要游戏加载新的着色器,之后再进行编译,并由GPU执行渲染工作。这也是在我们进入游戏不同关卡时,通常会有过场画面或者播放CG动画的原因,而这时候就是在加载下一个场景的着色器。

原因二:每台机器的“体质”不同

而由于每个人的PC配置不同,例如不同的操作系统、显卡、驱动程序等等,开发人员不可能事先为这些成千上万种不同的组合预先编译,所以只能现编译各种着色器。一旦游戏更新、更换显卡或是更新驱动,就又要重新对着色器进行编译。

NO.4  如何解决着色器编译的问题

为了避免在一开始启动游戏时就进行全部的着色器编译,增加游戏的加载等待时间。游戏开发者通常会将主要的着色器编译,设置在游戏的启动页面或主菜单页面,再把剩余的编译工作隐藏在剪接场景、中层加载阶段等,从而改善玩家的游戏体验。

而对于玩家来说,能做的就不多了。尽量关闭后台不必要的程序,或是在初次进入游戏后不忙着开始游戏,而是在主菜单页面稍微等待一会儿,对着色器的卡顿现象可能会有缓解作用。

着色器通常是在GPU上运行的,不同架构的GPU编译速度也会不同。为了提高着色器的工作效率,显卡厂商也带来了新的技术优化。最新的40系显卡所采用的NVIDIA Ada Lovelace 架构,提供了新的技术——着色器执行重排序(SER)。这项技术能够动态调整工作负载的顺序,从而提高着色器执行效率。SER 可为光线追踪操作的着色器性能最高提升2倍,游戏的帧率最高提升25%。


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1