如下文章源头于腾讯游戏学堂 ,下代作者腾讯游戏学堂
导语:在往年的移端游戏开拓者大会(GDC 2024)上,来自腾讯游戏的图形专家不断带来前沿分享,环抱AI、暗区渲染、困绕跨端游戏开拓、手游实现王者荣耀辅助大全动画等游戏技术运用及游戏制作,中的追踪激发同行关注。光线本文为“暗区困绕手游:在挪移端打冒昧世代射击游戏”分享的下代图文版干货内容。
分享贵宾:王俊宏 腾讯互娱魔方暗区困绕手游名目图形挨次负责人
巨匠好,移端谢谢巨匠退出本次团聚。图形我叫王俊宏,暗区是困绕魔方使命室暗区困绕渲染组的主程。我在腾讯使命了12年,手游实现不断处置PC以及挪移游戏开拓。中的追踪
我将从介绍《暗区困绕》手游以及挪移光线追踪的布景起始,而后介绍《暗区困绕》中的光线追踪,搜罗光线追踪场景规画、反射、软阴影、情景遮挡以及优化,最后是一些论断。
一、布景介绍
《暗区困绕》是一款面向Android以及iOS配置装备部署的下一代沉浸式第一人称战术射击手游。该游戏于2022年7月正式宣告。制作人孙一鸣去年在GDC上介绍了游辱玩法。游戏运用的是Unreal Engine 4.26引擎。也是一款凋谢天上游戏。好比,最新的关卡矿区, 巨细约为4公里乘以4公里。冰块直装V5.0无需卡密场景中有逾越10万个网格实例以及3000多个流式加载关卡。因此,场景规画将是一个挑战。
咱们游戏中的一些关键渲染特色搜罗:首先,渲染管线接管的是前向渲染管线。其次,咱们运用了基于物理的渲染,搜罗基于物理的材质、光照、相机以及着色。好比,这个视频揭示了游戏中的自动曝光功能。
第三个关键特色是动态天气零星,我的共事陈家铭在2022年的GDC上介绍过。在这个视频中,阳光、天空光以及云都市随着光阴变更。
最后,咱们游戏中的全局光照基于估量算辐照度传输。因此,在这个视频中,当天气零星变更时,直接光也会有所差距。
接下来,我将介绍挪移光线追踪的情景。之后最新的智能手机已经反对于硬件减速的Ray Query(也称为Inline Ray Tracing)。Ray Query可能在任何着色器阶段运用,好比极点着色器、像素着色器或者合计着色器。可是王者冬瓜直装V3.0的最新版本更新内容,在挪移配置装备部署上调试光线追踪依然具备挑战性,由于大少数截帧工具以及GPU功能合成工具都不反对于挪移真个Vulkan Ray Query。
在咱们集成光线追踪以前,有一些豫备使命需要停止。首先,咱们启用了Android的Vulkan API。而后,更新了Shader交织编译工具到最新的Shader Conductor,以反对于光线查问的着色器指令。最后,咱们扩展了UE4的Vulkan以及Metal RHI。
二、《暗区困绕》手游中的光线追踪
之后,我来介绍《暗区困绕》手游中的光线追踪。在中国,带有光线追踪功能的Android版本已经于2023年宣告。而iOS版本的光线追踪功能正在开拓中。正如视频所示,咱们已经集成为了光线追踪的反射、软阴影以及情景光拆穿。接下来我将展如今智能手机上拍摄的截图。
,时长00:22
这是在智能手机上的截图,假如禁用光线查问,大理石地板上不会有反射下场。
可是,假如启用了光线查问,咱们将取患上使人印象深入的光线反射下场。
这是另一张在室外拍摄的截图,轮胎025王者公益直装箱子以及地板上不情景遮挡下场。
当启用光线追踪的情景遮挡时,直接光下场愈加传神。
当禁用光线查问的软阴影时,咱们运用CSM阴影以及硬件PCF。可是阴影贴图的分说率缺少以为金属栅栏或者其余一些细小物体渲染清晰的阴影。
启用光线追踪软阴影后,咱们可能取患上简直欠缺的软阴影下场。所有这些可以为玩家缔造愈加着实以及具备沉浸感的体验。
正如我之条件到的,对于咱们来说,规画光线追踪场景是一个挑战。稍后我将介绍咱们所面临的挑战以及运用的优化措施。
如下是三个主要挑战:第一个挑战是底层减速妄想(BLAS)的内存占用。第二个挑战是在挪移GPU上构建BLAS的合计老本较高。第三个挑战是在具备太多实例的顶层减速妄想(TLAS)中Trace颇为耗时。这是在PC上运用NVIDIA Nsight Graphics捉拿的截图,展现了咱们游戏中部份TLAS实例的情景。
首先,我将介绍当初场景规画的根基情景。咱们的关卡是由关卡流式加载零星规画的。当加载包时,会加模子的底级LOD。更低级的模子LOD则由模子流式加载零星加载。而一些带有遮罩、天下坐标偏移或者透明材质的模子不会建树BLAS。那末,咱们是否在加载模子LOD时建树BLAS呢?谜底能招供的。由于当加载舆图时,会建树逾越4700个BLAS,直装科技(防封)9.0无需root显存占用高达4.4GB,而后游戏会由于内存缺少而解体。
咱们运用了一个简略的算法来规画BLAS。在这个图中,P是相机的位置,r1是BLAS建树半径,r2是BLAS销毁半径,d是相机到物体领土球的距离。假如d小于r1,将标志为待建树;假如d大于r1且小于r2,将标志为待保存。而后,我会赶快处置待建树恳求。但对于不待建树或者保存标志的BLAS,将会被延迟销毁。这样可能防止物体挨近边缘时频仍建树以及销毁。
这里所有参数都是可调的。经由优化,BLAS的数目从4700个缩减到约700个。视频内存从4.4GB缩减到了1.1GB。
对于TLAS,咱们每一帧更新一次,并在构建时启用Fast Trace标志。咱们还运用距离剔除了以及投影角度剔除了来优化实例数目。运用这些优化后,图中TLAS实例数目降为600个摆布。
这是在名为Vivo X90的智能手机上的功能数据。构建BLAS的老本小于0.5毫秒。构建TLAS的老本约为1毫秒。
接下来,我将介绍光线追踪的反射,重点介绍渲染管线部份。
运用Ray Query实现反射面临多少个挑战。第一个挑战是若何对于反射像素妨碍着色。在Vulkan Ray Query中,不RTPSO。而且咱们的游戏中不Bindless Texture。可是场景中有数不胜数种差距的材质。不概况运用一个通用着色器来对于其妨碍着色;第二个挑战因此后的渲染流程是正向渲染,咱们需要为反射建树一个混合渲染管线;第三个挑战是功能。好比,耗电以及帧率。
这是《暗区困绕》手游的Ray Query反射渲染管线。第一个渲染Pass是Base Pass,它会取患上所需的像素信息。第二个Pass是Query Scene Pass,咱们发射光线以取患上屏幕空间中每一个像素的网格以及三角形信息。第三个Pass是可见性剖析Pass,该Pass将为每一个像素合计反射颜色。接下来的两次渲染运用散漫双边滤波来取患上光线反射纹理。最后,将光线反射纹理与场景颜色混合。稍后我将介绍关键步骤。
如下是一些豫备使命。在资源烘焙历程中会天生用于渲染反射颜色的着色器。在运行时,咱们将群集用于对于反射着色的绘制命令,并在每一帧重新调配网格实例ID以及命中组ID。
而后,我将介绍渲染流程中的关键渲染步骤。在Base Pass中,咱们将渲染一个格外的Render Target。它存储了法线、粗拙度以及一个标志位。咱们称之为Thin G Buffer。中间的图像是Thin G Buffer。
下一个是Query Scene Pass。由于光线查问中不光线追踪管线形态工具(RTPSO),以是咱们运用Query Scene Pass以及Visibility Resolve Pass替换。在Query Scene Pass中,咱们重构天下位置以及反射光线倾向。而后发射一条光线,假如击中任何实例,则存储实例ID、三角形ID以及击中点的重心坐标。左侧的图像存储了打包的三角形ID以及重心坐标。右侧的图像存储了模子绘制ID。
对于Visibility Resolve Pass,咱们提交可见性剖析的Draw Call命令,而且运用Uniform Buffer提交绘制ID。每一个Draw Call都是一个全屏四边形。对于GPU而言,假如绘制ID不立室,像素将被扔掉。咱们运用Manual Vertex Fetch以及重心插值来合计像素着色器中的PBR参数。而后发射一条阴影光线以取患上阴影值。最后合计反射颜色并写入反射Render Target。
这种算法的短处是硬件兼容性好,易于集成。但缺陷是Draw Call以及Overdraw过高。因此,咱们运用GPU遮挡查问来删除了不私见的网格绘制命令,并运用深度测试来消除了偏激绘制。这张图揭示的是深度缓冲区,它存储了网格绘制ID。
优化之后,可见性剖析绘制调用从600多个缩减到约110个。而且残缺消除了Overdraw。这张图片揭示了可见性剖析的服从。
之后的迷糊处置Pass运用了散漫双边滤波器。输入是Thin G Buffer、反射纹理以及深度纹理。咱们运用一个核偏移来凭证粗拙度调解核巨细。右侧的纹理是光线反射纹理。
第二次迷糊处置与第一次简直同样,但运用了更大的卷积核偏移。
这是混合的服从。可能看到边缘被保存了下来。对于滑腻的地板,反射很清晰,而对于粗拙的墙壁,反射较迷糊。对于残缺粗拙的材质,在这里不会发射任何光线。
因此,最终咱们取患了精采的硬件兼容性以及高功能。对于Dimensity 9200,咱们的帧率逾越了60帧。这里也有一些缺陷。好比,处置透明或者遮罩材质比力难题。
下方我将介绍光线追踪的软阴影以及情景光拆穿。
软阴影以及情景光拆穿都需要发射大批的射线。这是运用1条阴晦射线以及1条情景光拆穿射线的服从,图像充斥了噪声。
这是软阴影以及情景光拆穿的渲染管线。咱们运用残缺的Pre Pass来取患上多少多法线以及深度。而后Query Scene Pass发射光线,它将输入带噪声的阴影以及情景光拆穿服从。接下来的渲染步骤是空间-时域降噪。最后,Base Pass将采样去噪后的阴影以及情景光拆穿服从。
对于Query Scene Pass,阴影以及情景光遮挡下场会各发射一条射线。三角形反面不发射阴晦射线。对于这个Render Target,R通道是阴影,G通道是情景光拆穿。两者都充斥噪点。为了提升功能,还可能运用较低的渲染分说率。
左侧是不降噪的图像,右侧是经由时域降噪后的图像。这里大部份噪声都被去除了。
这里还运用了A-Trous滤波器妨碍去噪。经由两次处置后,咱们患上到了右侧的服从。
左侧图像揭示的是阴影,可能看到边缘颇为暖以及。右侧情景光拆穿的品质也颇为高。
下方是游戏里最终的服从。
对于Dimensity 9200系列芯片,咱们实现为了逾越70的渲染帧率。
这里也有一些缺陷。好比,具备遮罩的材质需要运用其余阴影算法。对于透明概况,阴影以及情景光拆穿会患上到过错的服从。实际上,这里的玻璃阴影是不精确的。而且过多的渲染Pass以及纹理采样会导致较高的功耗。
咱们还运用了其余一些优化。好比帧预料,我的共事齐越也在GDC团聚介绍了它(在挪移端实现144帧渲染:《暗区困绕》手游中的帧预料)。
服从
最后,我将会揭示一些服从。这是Ray Query的详细功能数据。它可能平稳地运行在60帧每一秒。
平均功耗约为3000 mw。
最后一部份是致谢。咱们的名目成员搜罗钟建斌、高锴庚、齐越以及崔世文。上述所有使命都离不开全部团队的以及衷共济。还要谢谢咱们的相助过错MediaTek以及Vivo。
这里尚有一些参考质料。最后谢谢巨匠今日的到来!
评论专区