/【雷火UX带你聚焦GDC2022】《杀手3》中的实时光线追踪(IO:Alessandro Dal Corso)

【雷火UX带你聚焦GDC2022】《杀手3》中的实时光线追踪(IO:Alessandro Dal Corso)


网易雷火UX用户体验中心编译,转载需注明本公众号

关于GDC

GDC是全球游戏行业最具规模、最有权威、最有影响力的专业峰会。GDC2022中,雷火UX共获邀17场演讲,分布在9个核心演讲以及8个峰会演讲,再度刷新中国游戏行业纪录,领跑全球。

每年的GDC大会上,全球顶尖的游戏开发者们将齐聚在这里,交流彼此的想法,构想游戏业的未来方向。接下来雷火UX公众号会选择一部分高质量的演讲,陆续为大家进行介绍。本篇为大家介绍的是来自IO Interactive的高级渲染程序员Alessandro Dal Corso的演讲“Advanced Graphics Summit: Real-Time Ray Tracing in 'Hitman 3' ”。

Alessandro Dal Corso

Senior Render Programmer, IO Interactive


演讲标题:

Advanced Graphics Summit: Real-Time Ray Tracing in 'Hitman 3' 
《杀手3》中的实时光线追踪
演讲者信息:

Alessandro Dal Corso ,AMD的GPU开发,IO Interactive高级渲染程序员,在基于物理的渲染、全局光照、光线追踪、高级渲染技术及虚拟现实等技术领域都有所涉猎。

演讲概述

本篇演讲主要分享了IO Interactive团队在《杀手3》开发中实时光线追踪的一些实现细节和优化方案。
本篇演讲的结构大致为:

《杀手3》游戏简介

● 光线追踪的基本概念及在《杀手3》中的应用效果

《杀手3》中光线追踪的实现结构

《杀手3》中对光线追踪的优化

● 总结




01.  关于《杀手3》

《杀手3》是IO Interactive《杀手》三部曲的最终章,游戏中玩家将扮演一位冷酷无情的杀手,代号47,在迪拜、柏林、重庆等六个地方进行暗杀任务,最终目的是消灭“神意密会”的合伙人。在游戏中玩家需要努力地潜入目标身边的环境,悄无声息地完成自己的暗杀任务。

为了营造更真实的游戏体验,IO Interactive增加了PC版《杀手3》的光线追踪功能,这为该作的暗杀世界带来了更高质量的反射和阴影效果。



02. 光线追踪及其在《杀手3》中的应用

光线追踪实际上是一个区别于光栅化的概念,由于光栅化难以实现一些全局的效果,像是软阴影、间接光照等,而利用光线追踪能够得到更好的渲染效果。

顾名思义,光线追踪是模拟光线并对其光路进行追踪的过程,在现实中,光线从光源出发,可能经过几次发射或折射进入人眼。但在光线追踪中却恰恰相反,根据光路的可逆性,可以从摄像机出发与当前操作的着色点进行连线,得到第一个交点后再去寻找与光源的关系,并计算颜色值。

接下来演讲者列举了一些光线追踪在《杀手3》中的应用效果。可以看到,下面两张图中打开光线追踪后,金属制品上反射的人影更加清晰。



下图在一个大堂场景中,当打开光线追踪后,墙顶上的吊灯影子映在了光滑的地板上。

下面这张图在打开光线追踪后,橱窗玻璃上的倒影效果明显增强了。

从以上游戏画面中可以很直观地看出《杀手3》的光线追踪对比,开启光线追踪后地面反射效果尤为明显,能在很大程度上增加游戏的真实感。



03. 《杀手3》中光线追踪的实现结构
游戏中这些光线追踪效果是如何实现的呢?首先需要进行一些前期准备工作。

前期准备工作

光线追踪着色

光线追踪着色器通常分为四类:anyhit,closest hit,miss,raygen。为了生成对应shader,需要引进两类几何形体(simple和deformable):simple可以认为是一种静态的物体,在场景中形态不会改变,但是仍然可被移动;deformable则是场景中动态的一些物体,像是被风吹拂的树叶、NPC等,难以直接获得最终的顶点位置,因此需要根据当前顶点信息进行模拟从而得到最终顶点位置。
对于simple来说,我们能够很常规地生成对应shader,由于anyhit shader按三角形操作,而vertex shader按顶点操作,因此需要拿取三次顶点属性,再进行插值,对于边界问题,可以自行处理。

对于deformable的情况要复杂一些,需要去缓存中间顶点的信息。这里需要生成两组shader,一组是vertex compute,而另一组称为the other hit,前者实际上运行vertex shader,并输出pixel shader需要的中间顶点的参数,像是uv,法线之类的;然后anyhit shader会去读取这些中间参数,对它们进行插值之后运行pixel shader,之所以要这么做是为了上面的对象空间缓冲区,它需要一些时间来生成底层加速结构(BLAS)。

加速结构

加速结构又被分为两大类:底层加速结构(BLAS)和顶层加速结构(TLAS),BLAS用于存放每个网格中每个三角形面片的顶点数据,而再由多个BLAS组成作为模型级别的场景信息的TLAS。
对于simple来说生成BLAS非常容易,只需要获得它的位置并存储在顶点中再构建结构即可,往往这之后还会有一个压缩的过程,以减少BLAS的内存占用。

而对于deformable,则是通过运行build或者update命令来管理BLAS。build就是构建结构,开销很大,而update则是更新数据,从上一帧复用这个结构,从而可以减少开销。

在《杀手3》中的着色表有32bite的空间,其上存储了绑定信息,划分成四个缓冲区,分别指向贴图和材质、一些对象数据、simple的顶点属性信息、中间参数。

全局数据段

由于光线可能照到场景中的任一物体, 所以所有可能被渲染的物体的数据,像是材质、贴图、顶点属性都需要同时可用,需要将其存储在一个全局空间中。
首先进行的是关卡的加载,它会在开头对所有存储的数据进行烘焙,之后基本上无开销地在每一帧的开头更新每一个有改动的对象数据,这之后通过对象空间缓冲区与中间参数缓冲区进行定点计算得到BLAS,并最终构建成TLAS。

实现过程

有了上文所述的前期准备后,就可以开始光线追踪了,而这其中最核心的部分便是反射,也是在光线追踪中开销最大的部分。除光线追踪外,还有诸如屏幕空间反射,平面反射,镜面探针等替代方案。镜面探针往往作为最低质量的兜底方案;平面反射技术太陈旧;而相较于屏幕空间反射,光线追踪反射摆脱了屏幕空间的限制,能够看到屏幕空间外的信息。接下来演讲者讲述了光线追踪的主要实现过程。

rescheduling

这里所要做的第一件事是rescheduling,首先先做屏幕空间反射,并由其获知是否击中了屏幕,出于性能考虑,通常只在屏幕空间反射失败的点上进行光线追踪。除此之外还会进行反射剔除,这取决于对于画面的质量要求,如果某些东西特别粗糙,就不需要进行光线追踪,照明效果可能会更好。这样就得到了一个重新计划后的点数组,团队要做的即是对这些点进行后续的反射算法。

体素网格数据结构

在光线追踪反射中,通过G-buffer能够获得距离最近的位置,因此当光线在场景中击中物体时,需要获得场景中的物体信息,但是仅仅通过屏幕空间信息又不足以生成这种光照,因为无法击中在非屏幕空间中——像是身后的物体。
《杀手3》中有所谓的房间系统,每一个房间都被人为地定义了边界和大门(或者说是房间之间的通道)。如下图所示的俯视角的例子,红点为摄像机位置,场景中有1和2两个光源(现实的光源情况往往复杂得多,这里用两个光源简单模拟一下说明问题),网格中的数字表示了会受哪几个光源的影响。现在假设摄像机通过红色虚线进行观察,白色实线为追踪的光线,它击中了一个受到1和2两个光源影响的房间。当想要对该点着色时,实际是通过灯光列表和房间系统计算灯光在哪个房间,再根据房间进行着色。

降 噪

通过上述两步已经能够得到不错的结果了,但要注意的一点是光线追踪有一个分布光线,因此它实际上是带有一定的随机性的,所以势必会带有一定的噪声,接下来要做的就是降噪。Nvidia提供了相当不错的降噪方案,他们称之为NRD,会根据图像的质量来进行降噪处理。

透明物体特殊处理

《杀手3》还对透明物体进行了特殊处理,透明物体并不会放入到加速结构中去,但是可以从透明物体来透射光线。所要做的就是在一个特殊的缓冲区中渲染这个透明对象的深度和法线,然后再从其开始发射光线。由于这类物体大多是玻璃制品,可以假设其为完全的镜面反射,因此不需要对其结果进行降噪。



04. 《杀手3》对光线追踪的优化

下图展示了在三个几乎是最复杂的情况下,该算法的性能开销,可以看出光线追踪算法的开销还是相当巨大的,接下来就来谈谈《杀手3》中所做的优化。


性能开销一览
简化光照

第一点是将灯光进行简化,可以由艺术家定义一个更为精简的灯光,再通过光线追踪强制简化照明路径,如下图所示,左侧的是完整未简化的一些灯光信息,右侧是简化后的灯光信息。

剔 除

第二点是对场景物体的剔除,如图中所示有一个摄像机,摄像机周围的几何图形往往是光栅化中渲染的内容,但是对于光线追踪的反射来说,涉及到的内容物通常来说会更广更多,光线会走得更远,因此需要一个范围更大的剔除结果。在右侧的TLAS中可以看到,实际上包含了比光栅化剔除结果更多的几何形体,同样也包括可能反射在屏幕之外的物体。

内容简化

最后是对于内容物的一种简化方案,下图中大图是渲染的最终结果,小图是光线投射的法线贴图,这也是TLAS中的内容。也就是说如果有人正在穿过场景,那么在TLAS中实际上是移除了前景的植物的,这样同样可以降低开销。



05.   总   结

从这篇演讲中可以看到《杀手3》中的实时光线追踪从前期的数据准备,到具体实现都秉承了多复用的原则,做了相当多的优化,使得这样一个开销较大的算法在一个立项七年的项目中成功落地,并且有相当不错的表现。




GDC2022雷火UX演讲一览


【实录】条条大路通罗马:在《永劫无间》中用不同学科方法分析流失

【实录】关注特殊:让颜色不再成为认知障碍
【实录】《逆水寒》的艺术实践:舞蹈与游戏间的细语
【实录】UX助力精益运营:来自《流星群侠传》的经验
【实录】《永劫无间》的UX设计:从原型到成品
【实录】如何早期评估是否是“好产品”:经验教训与最佳实践
【实录】录音艺术与工程实践:《天谕》中的乐器社交
【实录】《永劫无间》:构建一个受欢迎的自定义捏脸系统
【实录】观察变化:含时社交网络可视化与社区行为模式分析
【实录】多人在线游戏中的实时异常监测
【实录】助力游戏策划分析:如何开发一个在线透视图表工具
【实录】图灵模式和分形:程序化生成研究
【实录】游戏中的发型艺术:东西方玩家审美及制作
【实录】自动化实践:随机游戏内容生成指南

【实录】基于多模态模型的游戏帧率预测

预告】东方叙事:如何理解中国游戏中的“武侠”
往期文章:

 IP拓展——《部落冲突》IP宇宙案例研究

 在日本是大作,在欧美却不然:游戏跨文化吸引有多难
 游戏无障碍设计应该优先考虑什么?
 实证研究:如何在游戏中使用皮肤电技术
 文字和情感起伏的呈现:《失落之语》中的叙事设计

《死亡循环》用户研究历程复盘

 文字和情感起伏的呈现:《失落之语》中的叙事设计
 如何让游戏社区保持活跃?
 如何研究玩家的积极行为

 社区互动如何改进《无畏》的游戏设计

 让玩家打破故事进程:沉浸式模拟游戏的叙事设计
 时间循环如何影响《死亡循环》的叙事设计
《地平线:西之绝境》世界中的部落设计
 不要错过通行证:免费游戏最好的商业化设计

 内部实践社区对于育碧的关键作用


 推荐阅读 

本文来自微信公众号“网易雷火UX用户体验中心”(ID:LeihuoUX)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。