本周 ReSpec 有点不同。我在阳光明媚的旧金山参加游戏开发者大会 (GDC) 度过了一周,从一个会议跑到另一个会议,试图找到一点时间写几句话。
我们决定发布新推出的 ReSpec 时事通讯中的条目样本,而不是普通的专栏,涵盖了我本周在 GDC 上看到的内容。如果您希望每周向您的收件箱发送相同的时事通讯,请立即注册并获取独家内容。
路径追踪是一个谎言
也许“谎言”这个词太强烈了,但在游戏中实现路径追踪时却相当棘手。我在 GDC 参加了《赛博朋克 2077》和《心灵杀手 2》的路径追踪会议,这两个会议都描述了在游戏中利用路径追踪的通用线程,该游戏旨在以可玩的帧速率实时运行。它被称为 ReSTIR 直接照明。
首先,路径追踪的工作原理:我们获取一个像素,然后从该像素追踪一条远离相机的线。它与某物碰撞并弹起。它会继续前进,在场景中弹跳,直到消失在以太中或在光源处结束。开发人员希望这些路径终止于光源,特别是在计算阴影时。
任何类型的实时环境中的问题是这个过程都极其昂贵。尽管实际上只使用其中的一小部分,但计算所有这些光线和所有反弹会占用大量资源。这就是为什么路径追踪长期以来一直是一种离线技术——你必须计算可能的路径并对它们进行平均。
《心灵杀手 2》和《赛博朋克 2077》的情况并非如此。对于直射光,ReSTIR 的工作原理是对场景中的光源进行加权并仅对其中的选择进行采样。然后,这些样本在时间上(跨帧)和空间上(与附近的像素)共享。在像《心灵杀手 2》这样的游戏中,某些灯光的权重较重,例如您在火车站看到的蓝色和红色“电影”灯光。
结果是图像组合得更快,至少足够快,以至于您可以以合理的帧速率玩游戏,并进行健康的升级和帧生成。
这是一个有趣的花絮,希望《心灵杀手 2》和《赛博朋克 2077》的泰坦开发者分享他们的作品后,这种花絮会变得更加常见。
微软正在努力升级
在 GDC 上,微软终于更多地谈论了 DirectSR ,甚至设法说服 AMD 和 Nvidia 的开发人员坐在同一小组中。一起,甚至! DirectSR 并不是像我们最初想象的那样结束升级战争的方法,但它为开发人员提供了一个统一的框架,以便向他们的游戏添加多种升级功能。
其中很大一部分是输入。与 DirectSR 交互时,开发人员会向应用程序编程接口 (API) 授予一组标准化输入。然后,它可以将这些输入传递给内置的升级器,例如 AMD 的 FSR 2,或需要特定硬件的变体,例如Nvidia 的 DLSS 。
它与 Nvidia 自己的 Streamline 框架没有什么不同,该框架是为了在 AMD 决定不合作之前完成类似的事情而构建的。看来微软作为这场战斗中的中立第三方,才是能够将大家团结在一起的人。
我仍然不确定这在游戏中实际上会是什么样子。 DirectSR 甚至尚未对开发人员开放。对于最终用户来说可能没有任何变化,我们仍然在图形菜单中看到多个升级选项。也许微软会更新 Windows 以包含通用升级选项,具体取决于您拥有的硬件。目前尚不清楚,但 DirectSR 仍应使开发人员能够更轻松地在 DLSS、FSR 和英特尔 XeSS 的游戏中实现各种升级。
最初没有实现的一个好处是该系统如何与更新配合使用。 Nvidia、AMD 和英特尔不断发布其升级技术的新版本,这些技术对图像质量进行了微小的改进,或者稍微调整了升级的工作方式。借助 DirectSR,开发人员无需将所有这些更新添加到他们的游戏中 – 他们只需通过 API 即可工作。
这对我来说都是竖起大拇指。升级一直是争论的主要焦点,尤其是像《Starfield》和《生化危机 4》这样的大型游戏,它们在发布时只支持一个升级。唯一的缺点是帧生成。目前 DirectSR 似乎还没有考虑到这一点,因此主要图形品牌未来仍将有很多来回。
你的CPU死了吗?不完全是
今年 GDC 最令人兴奋的公告之一是工作图。我上周在时事通讯中谈到了这一点,但在 Microsoft DirectX 国情咨文期间我更仔细地了解了工作图。它们背后的想法是通过让 GPU 指挥自己的工作来减轻 CPU 的压力。
谈话中还有一些细微差别。这为 GPU 提供了更多的权力来决定要做什么,类似于可编程着色器首次引入显卡时。工作图由节点组成,这些节点可以生成更多节点供 GPU 处理,而不是等待 CPU 的工作。微软将其描述为一个可以启动另一个计算着色器的计算着色器。
一个明显的优势是 GPU 利用率,PC 游戏玩家很快就发现了这一点。微软解释说,当前系统需要 GPU 和 CPU 之间有一个全局同步点。这通常意味着 GPU 作为高度并行的设备,在等待同步发生时会在短时间内不工作。
我没想到它会如何影响记忆。在 DirectX 12 中的当前编程中,微软解释说您将使用 ExecuteIndirect 命令,该命令要求您保存多个缓冲区。使用工作图,您不需要保留这些缓冲区,因为 GPU 可以开始自己的工作并继续为自己生成工作。
AMD 的 Robert Martin 展示了这对于需要 3.3GB 内存的场景来说是多么重要。使用工作图时,内存使用量仅为 113MB,并且性能略有提升。正如演示中所描述的,“内存占用量随 GPU 的大小而变化,而不是工作负载的大小。”
工作图对于最终用户来说是不可见的,但它确实是图形编程的下一个前沿领域,正如 AMD、Nvidia 和微软所说,这是开发人员多年来一直在努力的方向。更少的内存使用和更好的性能对我来说听起来不错。我们只需要等待工作图表在真实游戏中引起轰动即可。