在为影视和可视化内容进行离线渲染时,光追技术经常被用来生成高品质、自然逼真的效果,因为它们能够提供柔和阴影、精确环境光遮蔽、交互式全局光照、反射以及其他功能。不过,以这种方法渲染图像,哪怕只是一帧画面,通常都需要及其昂贵的设备,以及大量的制作时间。
借助虚幻引擎,光追技术可以借助硬件成为可能,这样就能使用微妙的光照效果来实时渲染交互式体验。在虚幻引擎中,硬件光追功能与传统光栅化渲染技术相结合。这样,单个像素就能以较少的采样次数来实现追踪光线,结合去噪算法,用户体验将接近离线渲染器的效果。
建筑可视化室内示例包含了基于实时渲染的光线追踪效果;该示例可在Epic Games启动程序中下载。
启用硬件光线追踪
在 项目设置(Project Settings)中,打开 引擎(Engine)> 渲染(Rendering)> 硬件光线追踪(Hardware Ray Tracing),然后重启编辑器。

启用光线追踪后,还会同时启用 支持计算皮肤缓存(Support Compute Skincache)。
光线追踪的某些功能,例如 光线追踪阴影 和 光线追踪天光,可以独立于其他光线追踪功能独立启用。在项目设置的硬件光追分段中,你可以启用这些功能。

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


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


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


通过改变环境遮蔽效果的 强度(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) 后,所有光源类型都能投射柔化区域阴影。柔化阴影区域的效果取决于光源大小及其与被照对象之间的距离。


通过调节下列设置来控制阴影柔和度:
- 在定向光源上,设置 光源角度(Source Angle)。
- 在点光源和聚光源上,设置 光源半径(Source Radius)。
- 在矩形光源上,设置 挡光板角度(Barn Door Angle) 和 挡光板长度(Barn Door Length) 来控制阴影柔和度。
天空光照
在启用 投射光追阴影(Cast Ray Traced Shadow) 并指定 光源类型(Source Type)后,天空光照可以支持柔和环境阴影。天空光照会捕捉关卡远距离处的光,并将其作为光照效果应用到场景中。

如需让天光使用光追全局光照,请启用控制台变量 r.RayTracing.GlobalIllumination.EvalSkylight
。
性能与调试
下述小节介绍了可用于检查、调试项目光追性能的初步方法和工具。
Stat GPU
使用控制台命令 GPU Stats
来检查相关的光线追踪GPU性能。你会找到已启用的光线追踪功能的相关信息,并了解在当前视图中为了渲染它们花费了多少帧时间。

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

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

强制禁用所有光追效果
请使用控制台变量 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)) | 是 |