硬件光线追踪

介绍基于硬件的实时光追功能。

Choose your operating system:

Windows

macOS

Linux

在为影视和可视化内容进行离线渲染时,光追技术经常被用来生成高品质、自然逼真的效果,因为它们能够提供柔和阴影、精确环境光遮蔽、交互式全局光照、反射以及其他功能。不过,以这种方法渲染图像,哪怕只是一帧画面,通常都需要及其昂贵的设备,以及大量的制作时间。

借助虚幻引擎,光追技术可以借助硬件成为可能,这样就能使用微妙的光照效果来实时渲染交互式体验。在虚幻引擎中,硬件光追功能与传统光栅化渲染技术相结合。这样,单个像素就能以较少的采样次数来实现追踪光线,结合去噪算法,用户体验将接近离线渲染器的效果。 

建筑可视化室内示例包含了基于实时渲染的光线追踪效果;该示例可在Epic Games启动程序中下载。

启用硬件光线追踪

项目设置(Project Settings)中,打开 引擎(Engine)> 渲染(Rendering)> 硬件光线追踪(Hardware Ray Tracing),然后重启编辑器。

ProjectSetting_EnableRT

启用光线追踪后,还会同时启用 支持计算皮肤缓存(Support Compute Skincache)

光线追踪的某些功能,例如 光线追踪阴影光线追踪天光,可以独立于其他光线追踪功能独立启用。在项目设置的硬件光追分段中,你可以启用这些功能。

ProjectSetting_EnableRT_Shadows_SkyLight

实时光线追踪功能

以下是受支持的硬件光线追踪功能。

光线追踪阴影

光线追踪阴影(Ray Traced Shadows) 为环境中的物体模拟柔和的面积光照效果。这意味着根据光源的大小或光源角度,物体的阴影在靠近接触面的部分会比较锐利,离接触面越远就越柔和且变宽。

使用阴影贴图的光栅阴影

光线追踪的柔和阴影

光线追踪环境光遮蔽

光线追踪环境光遮蔽(RTAO)准确地对环境光照被遮挡的区域投射阴影,使物体更好地融入环境,例如在角落和墙壁相交处投射阴影,或者为裂缝或皮肤上的皱纹增添深度。

屏幕空间环境光遮蔽(SSAO)

光线追踪环境光遮蔽(RTAO)

与屏幕空间环境光遮蔽(SSAO)相比,RTAO能使物体融入环境,并为场景增加深度,使被间接照明的区域呈现自然的阴影。

光线追踪环境光遮蔽 | 强度: 0.5

光线追踪环境光遮蔽 | 强度: 0.85

通过改变环境遮蔽效果的 强度(Intensity)半径(Radius) 属性,你可以控制其大小和强度。

光线追踪反射

此光线追踪功能已停止维护,可能会在未来被移除。

光线追踪反射(RTR)能够模拟准确的环境表现,并且可支持多次反射。

此示例比较了光线追踪反射单次反弹和多次反弹的结果。借助多次反弹, 我们可以让场景中的各个反射表面之间形成实时的相互反射效果。

单次反弹的光线追踪反射

多次反弹的光线追踪反射

相较而言,屏幕空间反射 (SSR)、平面反射、甚至包括反射捕获Actor在内,都无法动态捕获整个场景;光线追踪反射也没有其他反射方法中的一些限制。

相比之下,SSR仅能进行一次反射反弹,并且仅限于屏幕上的可见内容。与之不同的是,RTR能够多次反弹,并且不会局限于屏幕上的可见内容,这意味着我们可以看到书的侧面、摄像机背后的反射效果,以及通过窗户反射到表面上的额外灯光。

屏幕空间反射

光线追踪反射

光线追踪半透明

此光线追踪功能已停止维护,可能会在未来被移除。

光线追踪半透明(RTT)能准确表现玻璃和液体材质,在透明表面上显示符合物理的正确反射、吸收和折射。

光栅半透明

光线追踪半透明

光线追踪全局光照

此光线追踪功能已停止维护,可能会在未来被移除。

光线追踪全局光照(RTGI)会对那些未被光源直接照射的场景区域施加实时交互反射光照效果。

仅使用场景光照

光线追踪全局光照 | 暴力方法

在后期处理体积中,你可以选择两种光追全局光照方法:

  • 暴力方法(Brute Force) 能够模拟离线渲染器的间接光照效果,但是渲染速度更慢。

  • 最终收集(Final Gather) 提供单次反射的间接光照,但是渲染速度更快。

最终收集法

这是一种实验性方法。

最终收集(Final Gather) 是另一种基于光线追踪的全局光照法,使用基于最终收集的技术,力求提高运行时性能。它是一种包含两个通道(pass)的算法。第一阶段分配着色点(类似于暴力方法),但以逐像素一个采样的固定速率进行。在此阶段,着色点采样的历史记录(最多16个)将保存在屏幕空间中。在第二阶段中,该算法尝试重新连接到着色点历史记录,从而摊销该方法的开销。

暴力方法(Brute Force)旨在模拟路径追踪器的基准参考,与执行路径追踪结果类似。最终收集方法牺牲了模拟效果,从而换取性能。这会造成一些限制,比如,目前仅限基于单次反射的间接漫反射GI,并且上一帧GI采样数据的重投影很容易出现重影。

为处理临时重影的瑕疵,可以使用以下命令修改场景空间拒绝条件。

r.RayTracing.GlobalIllumination.FinalGatherDistance [number of units] 

其当前基于从原始着色点测量的场景距离。此拒绝条件默认为10个单位。

最终收集方法还需要在后期处理体积中进行以下设置,才能有效使用:

  • 最大反射次数:1

  • 逐像素采样:16

超过1的所有其他最大反射次数都会被丢弃(无提示);调整逐像素采样时,最好以2的幂次方进行增加(例如8、16、32、64)。

使用光线追踪功能

下述小节详细介绍了后期处理体积中与光追有关的各功能及属性。

后期处理体积

后期处理体积允许你控制某些光追效果:

  • 环境光遮蔽

  • 全局光照

  • 反射

  • 半透明

点击查看大图。

如需进一步了解可用的后期处理设置,请参阅光线追踪设置

光源

启用 投射光追阴影(Cast Ray Traced Shadows) 后,所有光源类型都能投射柔化区域阴影。柔化阴影区域的效果取决于光源大小及其与被照对象之间的距离。

光线追踪阴影:定向光源 | 光源角度:0.5357

光线追踪阴影:定向光源 | 光源角度:2.0

通过调节下列设置来控制阴影柔和度: 

  • 在定向光源上,设置 光源角度(Source Angle)

  • 在点光源和聚光源上,设置 光源半径(Source Radius)。 

  • 在矩形光源上,设置 挡光板角度(Barn Door Angle)挡光板长度(Barn Door Length) 来控制阴影柔和度。

天空光照

在启用 投射光追阴影(Cast Ray Traced Shadow) 并指定 光源类型(Source Type)后,天空光照可以支持柔和环境阴影。天空光照会捕捉关卡远距离处的光,并将其作为光照效果应用到场景中。

RT_SkyLight

如需让天光使用光追全局光照,请启用控制台变量 r.RayTracing.GlobalIllumination.EvalSkylight

性能与调试

下述小节介绍了可用于检查、调试项目光追性能的初步方法和工具。

Stat GPU

使用控制台命令 GPU Stats 来检查相关的光线追踪GPU性能。你会找到已启用的光线追踪功能的相关信息,并了解在当前视图中为了渲染它们花费了多少帧时间。 

GPUStats1

Stat D3D12RayTracing

使用控制台命令 Stat D3D12RayTracing 来检查相关的光线追踪资源使用情况。

StatD3D12RayTracing

光线追踪调试视图模式

硬件光追提供了一系列调试视图模式,可用于查看光追的特定效果和功能。请在关卡视口中点击 视图模式(View Mode) 下拉菜单中的 光线追踪调试(Ray Tracing Debug) ,选择可用的调试视图模式。 

RT_DebugOptions

强制禁用所有光追效果

请使用控制台变量 r.RayTracing.ForceAllRayTracingEffects 来快速启用或禁用场景中的所有光追功能。

  • 0 禁用所有光追功能。

  • 1 启用所有光追功能。

  • -1 使用上一个控制台变量设置的状态;它使用后处理体积中设置的数值。(默认)

支持的光线追踪功能

此列表旨在提供当前支持功能的概念,并未完整列出 虚幻引擎4.23 支持的光线追踪功能。

功能

支持(是/否/部分)

备注

Rendering Path

Deferred

Y

Forward

N

光源类型

定向光源(Directional Light)

天空光照(Sky Light)

点光源(Point Light)

聚光源(Spot Light)

矩形光源(Rect Light)

光照功能

自发光表面(Emissive Surfaces)

部分

支持表面反射,但不发射光线或投射阴影。

光透射(Light Transmission)

半透明阴影视为不透明,表示无彩色阴影或光线穿透材料。

Area Shadowing(区域阴影)

IES Profiles(IES描述文件)

Light Functions(光照函数)

Volumetric Fog(体积雾)

基于图像的照明(IBL)(Image Based Lighting (IBL))

HDRI和天空光照支持此功能。

材质:混合模式

不透明(Opaque)

遮罩(Masked)

半透明(Translucent)

各向异性(Anisotropic)

材质:着色模型

默认光照(Default Lit)

无光照(Unlit)

部分

遮罩(Masked)

部分

支持投射遮罩阴影。

次表面和次表面轮廓(SubSurface and SubSurface Profile)

预整合皮肤(Preintegrated Skin)

部分

可运行,但未正确光线追踪结果。其使用栅格化流程。

透明涂层(Clear Coat)

UE 4.25对透明图层着色模型进行了显著改善。

双面植被(TwoSided Foliage)

头发(Hair)

部分

可运行,但未正确光线追踪结果。其使用栅格化流程。

布料(Cloth)

部分

可运行,但未正确光线追踪结果。其使用栅格化流程。

材质函数(Material Functions)

双面(Two-Sided)

场景位置偏移(World Position Offset)

逐Actor启用静态网格体。

几何体类型

骨架网格体(Skeletal Mesh)

静态网格体(Static Mesh)

几何体缓存(Alembic)(Geometry Cache (Alembic))

地形(Landscape)

层级实例化静态网格体(HISM)(Hierarchical Instanced Static Mesh (HISM))

实例化静态网格体(ISM)(Instanced Static Mesh (ISM))

样条(Splines)

程序网格体(Procedural Mesh)

在光线追踪中渲染此类几何体的开销较高。

BSP笔刷(BSP Brushes)

细节等级(LOD)(Levels of Detail)

尚不支持颤动LOD过渡。

视觉效果(VFX)

Niagara

部分

目前仅支持Sprite、条带(Ribbon)和网格体发射器。

Cascade

平台支持

多视图(VR和分屏)(Multi-View (VR and Split-Screen))

本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。