光线追踪入门
高清渲染管线 (High Definition Render Pipeline, HDRP) 包括 Unity 2019.3 中的预览版光线追踪支持。光线追踪功能可用于访问屏幕上未显示的数据。例如,您可以使用该功能来请求位置数据、法线数据或光照数据,然后使用这些数据来计算使用传统光栅化技术难以计算出的数量。
尽管电影制作中广泛使用光线追踪技术,但很长时间以来,这项技术的资源消耗量使得其使用范围受限于离线渲染。现在,随着 GPU 硬件的最新发展,您可以实时利用光线追踪效果。
本文档介绍以下主题:
硬件要求
以下 GPU 支持全面的光线追踪硬件加速功能:
- NVIDIA GeForce RTX 2060、RTX 2060 Super、RTX 2070、RTX 2070 Super、RTX 2080、RTX 2080 Super、RTX 2080 Ti 和 NVIDIA TITAN RTX
- NVIDIA Quadro RTX 3000(仅限笔记本电脑)、RTX 4000、RTX 5000、RTX 6000、RTX 8000
NVIDIA 还为某些上一代显卡提供了光线追踪回退功能:
- NVIDIA GeForce GTX
- Turing 世代:GTX 1650、GTX 1660 Super、GTX 1660 Ti
- Pascal 世代:GTX 1060、GTX 1070、GTX 1080、GTX 1080 Ti
- NVIDIA TITAN V
- NVIDIA Quadro:P4000、P5000、P6000、V100
如果您的计算机装有上述显卡之一,则可以在 Unity 中运行光线追踪。
打开 Unity 之前,请确保将 NVIDIA 驱动程序更新为最新版本,并确保 Windows 版本至少为 1809。
将光线追踪集成到您的 HDRP 项目中
在 HDRP 项目中使用光线追踪功能之前,需要设置 HDRP 项目以获得光线追踪支持。HDRP 仅支持使用 DirectX 12 API 进行光线追踪,因此,光线追踪仅在使用 DirectX 12 进行渲染的 Unity 编辑器或 Windows Unity Player 中有效。您需要将 HDRP 项目的默认图形 API 从 DirectX 11 更改为 DirectX 12。
有两种方式可以做到这一点:
完成其中之一后,进入最终设置。
Render Pipeline Wizard 设置
您可以使用 Render Pipeline Wizard 在 HDRP 项目中设置光线追踪。
- 要打开 Render Pipeline Wizard,请选择 Window > Render Pipeline,然后选择 HD Render Pipeline Wizard。
- 选择 HDRP + DXR 选项卡。
- 单击 Fix All 按钮。
您的 HDRP 项目现在支持光线追踪。如需了解如何为场景设置光线追踪,请参阅最终设置。
手动设置
要手动设置光线追踪,需要:
- 让您的 HDRP 项目使用 DirectX 12。
- 在 HDRP 项目上禁用静态批处理。
- 在 HDRP 资源中启用和配置光线追踪。
- 确保正确分配光线追踪资源。
- 确保具有启用光线追踪的本地 HDRP 配置包。
- 在 HDRP 资源中启用屏幕空间阴影和屏幕空间反射。
升级到 DirectX 12
- 打开 Project Settings 窗口(菜单:Edit > Project Settings),然后选择 Player 选项卡。
- 选择 Other Settings 折叠箭头,然后在 Rendering 部分中禁用 Auto Graphics API for Windows。这样会显示出 Graphics APIs for Windows 部分。
- 在 Graphics APIs for Windows 部分中,单击加号 (+) 按钮,然后选择 Direct3d12。
- Unity 默认情况下使用 Direct3d11。要使 Unity 使用 Direct3d12,请将 Direct3d12 (Experimental) 移到列表顶部。
- 应用所做的更改。
现在,Unity 编辑器窗口应该会在标题栏中包含
禁用静态批处理
接下来,您需要禁用静态批处理,因为 HDRP 在运行模式下不支持此功能与光线追踪功能一起使用。为此需要执行以下操作:
- 打开 Project Settings 窗口(菜单:Edit > Project Settings),然后选择 Player 选项卡。
- 选择 Other Settings 折叠箭头,然后在 Rendering 部分中禁用 Static Batching。
HDRP 资源配置
现在 Unity 在 DirectX 12 中运行,并且已禁用静态批处理,接下来请在 HDRP 资源中启用和配置光线追踪。前面的步骤已将 Unity 配置为支持光线追踪,接下来的步骤将在您的 HDRP Unity 项目中启用光线追踪。
- 在 Project 窗口中单击 HDRP 资源以便在 Inspector 中查看该资源。
- 在 Rendering 部分中,启用 Realtime Ray Tracing。这将触发重新编译,从而使光线追踪在 HDRP 项目中可用。
光线追踪资源
要验证 HDRP 是否已正确分配了光线追踪资源,请执行以下操作:
- 打开 Project Settings 窗口(菜单:Edit > Project Settings),然后选择 HDRP Default Settings 选项卡。
- 确保向 Render Pipeline Resources 字段中分配了 Render Pipeline Resources 资源。
本地 HDRP 配置和 ShaderConfig 宏验证
高清渲染管线 (High Definition Render Pipeline, HDRP) 使用单独的包来控制其某些功能的可用性。您可以使用这个包在 HDRP 中配置某些设置,而无需更改 HDRP 包本身。首先,在您的项目中创建此包的本地副本,然后更改 manifest.json 文件以指向这个副本。有关如何执行此操作的更多信息,请参阅 HDRP 配置文档。然后,要在 HDRP 中启用光线追踪,请在 ShaderConfig.cs.hlsl 文件中更改宏的值。
打开 Packages > High Definition RP Config > Runtime > ShaderConfig.cs.hlsl,然后将 SHADEROPTIONS_RAYTRACING 宏设置为 1。
在 HDRP 资源中启用屏幕空间阴影和屏幕空间反射
HDRP 使用光线追踪来替换某些光栅化效果。为了在项目中使用光线追踪效果,必须首先启用该效果的光栅化版本。您需要在 HDRP 资源中启用的两个效果是屏幕空间阴影 (Screen Space Shadows) 和屏幕空间反射 (Screen Space Reflections)。按照下列步骤可以在 HDRP Unity 项目中启用这些效果。
- 在 Project 窗口中单击 HDRP 资源以便在 Inspector 中查看该资源。
- 选择 Lighting > Reflections,然后启用 Screen Space Reflection。
- 选择 Lighting > Reflections,然后启用 Screen Space Shadows。
- 将 Maximum 值设置为要在每帧评估的最大屏幕空间阴影数。如果场景中的光源数量超过此数量,则 HDRP 仅使用光线为该数量的光源投射阴影,然后为其余的光源使用阴影贴图。
您的 HDRP 项目现在完全支持光线追踪。如需了解如何为场景设置光线追踪,请参阅最终设置。
最终设置
现在,您的 HDRP 项目支持光线追踪,还必须完成一些步骤才能在场景中实际使用光线追踪。
帧设置
要使 HDRP 计算场景中摄像机的光线追踪效果,请确保您的摄像机使用启用了光线追踪的帧设置。您可以在默认情况下为所有摄像机启用光线追踪,也可以为场景中的特定摄像机启用光线追踪。
要在默认情况下启用光线追踪,请执行以下操作:
- 打开 Project Settings 窗口(菜单:Edit > Project Settings),然后选择 HDRP Default Settings 选项卡。
- 从 Default Frame Settings For 下拉选单中选择 Camera。
- 在 Rendering 部分中,启用 Ray Tracing。
要为特定摄像机启用光线追踪,请执行以下操作:
- 单击场景或层级视图中的摄像机以在 Inspector 中查看该游戏对象。
- 在 General 部分中,启用 Custom Frame Settings。随后将显示仅适用于此摄像机的帧设置。
- 在 Rendering 部分中,启用 Ray Tracing。
光线追踪效果概述
HDRP 使用光线追踪代替其某些屏幕空间效果、阴影技术和网格渲染技术。
- 光线追踪环境光遮挡取代了屏幕空间环境光遮挡,前者采用更精确的光线追踪环境光遮挡技术,可利用屏幕外的数据。
- 光线追踪接触阴影取代了接触阴影,前者采用更精确的光线追踪接触阴影技术,可利用屏幕外的数据。
- 光线追踪全局光照是 HDRP 中光照探针和光照贴图的替代方法。
- 光线追踪反射取代了屏幕空间反射,前者采用光线追踪反射技术,可利用屏幕外的数据。
- 光线追踪阴影取代了方向光、点光源和面光源等光源的阴影贴图。
- 递归光线追踪取代了网格的渲染管线。使用该功能的网格将递归投射折射和反射光线。
光线追踪项目
您可以在此处找到一个小型光线追踪项目,该项目中包含上面提到的所有效果: https://github.com/Unity-Technologies/SmallOfficeRayTracing 该项目已经设置了光线追踪支持。
预览版光线追踪的建议和支持的功能
DX12 和 DXR 当前处于预览版,因此缺少某些功能。 启用 DX12 时,Unity 会显示以下错误消息: d3d12:尚不支持为数组纹理生成 Mipmap。
目前,除 DX12 之外,在其他平台上均不支持光线追踪。
Unity 2019.3 中的 HDRP 光线追踪具有以下局限性:
- 不支持变形体(蒙皮、混合形状、Alembic、顶点动画)。
- 不支持曲面细分。
- 不支持每个像素位移(视差遮挡贴图、高度贴图、深度偏移)。
- 不支持 VFX 和地形。
- 不支持多个 HDRP 材质。这些材质包括毛发、StackLit、眼睛和 AxF 材质。
- 没有正确的阴影剔除。相反,使用的是视锥剔除。 Unity 2020.1 及更高版本中的 HDRP 光线追踪增加了对蒙皮、混合形状和 Alembic 的支持。