光线追踪入门
高清渲染管线 (High Definition Render Pipeline, HDRP) 包括 Unity 2019.3 中的预览版光线追踪支持。光线追踪功能可用于访问屏幕上未显示的数据。例如,您可以使用该功能来请求位置数据、法线数据或光照数据,然后使用这些数据来计算使用传统光栅化技术难以计算出的数量。
尽管电影制作中广泛使用光线追踪技术,但很长时间以来,这项技术的资源消耗量使得其使用范围受限于离线渲染。现在,随着 GPU 硬件的最新发展,您可以实时利用光线追踪效果。
本文档介绍以下主题:
硬件要求
以下 GPU 支持全面的光线追踪硬件加速功能:
- NVIDIA GeForce 20 系列:
- RTX 2060
- RTX 2060 Super
- RTX 2070
- RTX 2070 Super
- RTX 2080
- RTX 2080 Super
- RTX 2080 Ti
- NVIDIA TITAN RTX
- NVIDIA GeForce 30 系列:
- RTX 3060
- RTX 3060Ti
- RTX 3070
- RTX 3080
- RTX 3090
- NVIDIA Quadro:
- RTX 3000(仅限笔记本电脑)
- RTX 4000
- RTX 5000
- RTX 6000
- RTX 8000
NVIDIA 还为某些上一代显卡提供了光线追踪回退功能:
- NVIDIA GeForce GTX
- Turing 世代:GTX 1660 Super、GTX 1660 Ti
- Pascal 世代:GTX 1060 6GB、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 项目现在支持光线追踪。如需了解如何为场景设置光线追踪,请参阅最终设置。
手动设置
要手动设置光线追踪,需要:
- 让您的 HDRP 项目使用 DirectX 12。
- 在 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 编辑器。如果出现窗口提示告诉你要重新启动编辑器,请单击窗口中的 Restart Editor。
现在,Unity 编辑器窗口应该会在标题栏中包含 <DX12> 标签,如下所示:
禁用静态批处理
接下来,您需要禁用静态批处理,因为 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 资源中启用光线追踪效果
HDRP 使用光线追踪来替换某些光栅化效果。为了在项目中使用光线追踪效果,必须首先启用该效果的光栅化版本。需要修改 HDRP 资源的四个效果如下:
- 屏幕空间阴影 (Screen Space Shadows)
- 屏幕空间反射 (Screen Space Reflections)
- 透明屏幕空间反射 (Transparent Screen Space Reflections)
- 屏幕空间全局光照 (Screen Space Global Illumination)
要在 HDRP Unity 项目中启用以上效果,请执行以下操作:
- 在 Project 窗口中单击 HDRP 资源以便在 Inspector 中查看该资源。
- 选择 Lighting > Reflections,然后启用 Screen Space Reflection。
- 启用 Screen Space Reflections 后,选择 Lighting > Reflections,然后启用 Transparent Screen Space Reflection。
- 选择 Lighting > Shadows,然后启用 Screen Space Shadows。
- 选择 Lighting > Lighting,然后启用 Screen Space Global Illumination。
你的 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。
构建设置
要将项目构建到 Unity Player,光线追踪要求该构建使用 64 位架构。要将构建设置为使用 64 位架构,请执行以下操作:
- 打开 Build Settings 窗口(菜单:File > Build Settings)。
- 从 Architecture 下拉选单中,选择 x86_64。
场景验证
为了检查是否可以在场景中使用光线追踪,HDRP 包含一个菜单选项,用于验证场景中的每个游戏对象。如果没有正确设置游戏对象,则此过程将在 Console 窗口中引发警告。要使用它,请执行以下操作:
- 单击 Edit > Rendering > Check Scene Content for HDRP Ray Tracing。
- 在 Console 窗口(菜单:Window > General > Console)中,检查是否有任何警告。
光线追踪效果概述
HDRP 使用光线追踪代替其某些屏幕空间效果、阴影技术和网格渲染技术。
- 光线追踪环境光遮挡取代了屏幕空间环境光遮挡,前者采用更精确的光线追踪环境光遮挡技术,可利用屏幕外的数据。
- 光线追踪接触阴影取代了接触阴影,前者采用更精确的光线追踪接触阴影技术,可利用屏幕外的数据。
- 光线追踪全局光照是 HDRP 中光照探针和光照贴图的替代方法。
- 光线追踪反射取代了屏幕空间反射,前者采用光线追踪反射技术,可利用屏幕外的数据。
- 光线追踪阴影取代了方向光、点光源和面光源等光源的阴影贴图。
- 递归光线追踪取代了网格的渲染管线。使用该功能的网格将递归投射折射和反射光线。
- 光线追踪次表面散射取代了次表面散射,前者采用更精确的光线追踪次表面散射技术,可利用屏幕外的数据。
光线追踪模式
HDRP 包括两种光线追踪模式,这些模式定义了它如何评估某些光线追踪效果。这些模式为:
- Performance:此模式针对实时应用程序。如果选择此模式,则光线追踪效果包括一些可以更改以平衡性能与质量的预设。
- Quality:此模式针对需要最佳质量结果的技术性演示和应用程序。
根据所选择的光线追踪模式,HDRP 可能会显示某些光线追踪效果的差异属性。
可以在项目级别或效果级别上更改 HDRP 使用的光线追踪模式。要为整个项目进行更改,请执行以下操作:
- 在 Project 窗口中单击 HDRP 资源以便在 Inspector 中查看该资源。
- 在 Rendering 部分,从 Supported Ray Tracing Mode 下拉选单中选择光线追踪模式。
如果选择 Both,则可以更改每个光线追踪效果的光线追踪模式。为此需要执行以下操作:
- 在 Scene 视图或 Hierarchy 视图中,选择一个包含 Volume 组件且该组件包含光线追踪效果的游戏对象。
- 在光线追踪效果的 Inspector 中,将 Mode 属性更改为希望该效果使用的光线追踪模式。这将更改 Inspector 中可用的属性。
光线追踪项目
您可以在此处找到一个小型光线追踪项目,该项目中包含上面提到的所有效果: https://github.com/Unity-Technologies/SmallOfficeRayTracing 该项目已经设置了光线追踪支持。
不受支持的光线追踪功能
目前,除 DX12 之外,在其他平台上均不支持光线追踪。
Unity 2020.2 中的 HDRP 光线追踪具有以下局限性:
- 不支持顶点动画。
- 不支持贴花。
- 不支持曲面细分。
- 不支持每个像素位移(视差遮挡贴图、高度贴图、深度偏移)。
- 不支持 VFX 和地形。
- 没有正确的阴影剔除,可能会在光线追踪效果中出现阴影缺失的情况。
- 不支持 MSAA。
- 对于具有 LOD 的渲染器,光线追踪加速结构仅包含最高级别的 LOD,而忽略较低的 LOD。
- 不支持 Graphics.DrawMesh。
- 渲染反射探针时不支持光线追踪。
不受支持的路径追踪功能
目前,除 DX12 之外,在其他平台上均不支持路径追踪。
Unity 2020.2 中的 HDRP 路径追踪具有以下局限性:
- 不支持 3D Text 和 TextMeshPro。
- 不支持使用导数的 Shader Graph 节点(例如:纹理的法线)。
- 不支持贴花。
- 不支持曲面细分。
- 不支持管状和圆盘形面光源。
- 不支持半透明和不透明材质。
- 不支持多个 HDRP 材质。这些材质包括织物、眼睛、StackLit、毛发、贴花。
- 不支持每个像素位移(视差遮挡贴图、高度贴图、深度偏移)。
- 不支持 MSAA。
- 对于具有 LOD 的渲染器,光线追踪加速结构仅包含最高级别的 LOD,而忽略较低的 LOD。
- 不支持 Graphics.DrawMesh。
光线追踪不支持的 Shader Graph 节点
使用 Shader Graph 构建自定义着色器时,某些节点与光线追踪不兼容。因此需要避免使用它们,或者需要使用光线追踪着色器节点来提供替代行为。以下列出了不兼容的节点:
- DDX、DDY 和 DDXY 节点。
- View Space 模式中的 Inputs > Geometry 下的所有节点(Position、View Direction、Normal 等)。
- Checkerboard 节点。