将 HDRP 从 6.x 升级到 7.x
在高清渲染管线 (High Definition Render Pipeline, HDRP) 中,主要版本之间某些功能的工作方式有所不同。本文档可帮助你将 HDRP 从 6.x 升级到 7.x。
新场景
HDRP 中的新场景系统依赖于项目中的预制件。此外,还取决于为体积设置的默认设置。如果您已经使用向导配置了一个预制件,则需要针对 Default Volume Profile Asset(在 Edit > Project Settings > HDRP Default Settings 中)对其进行更新。
如果您使用默认的预制件(由向导创建的预制件)并依赖默认的 Default Volume Profile Asset,那么您的预制件将不再与默认的体积配置文件同步,您必须对其进行更新。
最简单的方法是要求向导重新创建一个新的预制件:
- 打开向导 (Window > Render Pipeline > HD Render Pipeline Wizard)。
- 移除 Default Scene Prefab 中设置的预制件。
- [可选] 如果先前的预制件经过了自定义,请保留其副本以确保不会丢失您的版本。为此,只需重命名预制件即可。这样做可以防止被覆盖。
- 查看下面的 Configuration Checking 中是否有 Default Scene Prefab 行,然后单击 Fix 按钮。
- [可选] 在新创建的预制件中报告您的自定义更改。
然后,如果还使用 DXR,请对 Default DXR Scene Prefab 重复上述操作。
HDRP 中的新场景系统依赖于项目中的预制件。如果已经使用向导配置了一个预制件,则需要对其进行更新。
程序化天空
程序化天空覆盖在 7.x 中已弃用。如果你的项目使用程序化天空,则需要安装示例中的覆盖,或者切换到新的基于物理的天空。
要将程序化天空覆盖安装到 7.x 项目中,请执行以下操作:
- 在 Unity 编辑器中打开您的项目。
- 打开 Package Manager (Window > Package Manager),然后单击 High Definition RP。
- 在 Samples 部分中,单击 Procedural Sky 条目对应的 Import in project 按钮。如果您打开了一个使用程序化天空的场景,则天空会重新出现,但是其设置会重置为默认值。
- 要恢复天空设置,必须退出 Unity 且不要保存,然后重新打开项目。
最后一步很重要,因为如果您尚未安装示例,然后加载使用程序化天空的场景,那么体积中的程序化天空数据将丢失。Unity 不会对此序列化,因此您可以关闭并再重新打开 Unity 以恢复您的设置。
天空强度模式 (Sky Intensity Mode)
在 7.x 的 HDRP 中,更改了天空强度的处理方式。在更改之前有两个参数 Exposure 和 Multiplier 用于更改天空密度。现在,有一个新的组合框供用户在一个或另一个之间进行选择。在 Edit > Render Pipeline > Upgrade Sky Intensity Mode 中提供了一个更新脚本来升级现有的天空组件。
雾效
HDRP 已在 7.x 中弃用了线性雾 (Linear Fog)、指数雾 (Exponential Fog)、体积雾 (Volumetric Fog) 和体积雾质量 (Volumetric Fog Quality) 覆盖,并替换为单个雾效 (Fog) 覆盖。默认情况下,此覆盖用作具有高度分量的指数雾,并允许你添加其他体积雾。要将旧的雾效覆盖自动更新到新系统,请选择 Edit > Render Pipeline > Upgrade Fog Volume Components。请注意,并非所有情况下都能安全地转换,因此你可能需要在某些情况下手动升级。
阴影贴图
在 7.x 之前,HDRP 中的每个光源都针对阴影贴图偏差提供了多个选项。从 7.x 开始,HDRP 已将每个选项(除了 Normal Bias)替换为 Slope-Scale Depth Bias。引入此属性使得阴影贴图偏差设置与之前的设置非常不同。这意味着,如果默认值导致出乎意料的结果,则可能需要为每个光源提供新的偏差设置。
另外,在 7.x 之前,PCSS 具有不同的参量。从 7.x 开始,阴影柔和度由方向光的角直径以及点光源和聚光灯的形状半径进行控制。要将先前的阴影柔和度转换为形状半径,一个可用的近似函数为:0.333 * oldSoftness * (shadowResolution / 512)
。
此外,Minimum filter size 选项现在称为 Minimum Blur Intensity;这两者在功能上是等效的,只是将先前的范围 [0 ... 0.0001] 重新映射为 [0 ... 1]。
光源
从 7.x 开始,可用的光源类型为方向光 (Directional)、点光源 (Point)、聚光灯 (Spot) 和面光源 (Area),使这些光源类型与内置渲染器中的类型匹配。选择面光源 (Area) 作为光源类型后,可以选择面光源的形状(矩形光源 (Rectangle)、灯管 (Tube) 和圆盘光源 (Disc))。
面光源
在 7.x 之前,HDRP 会将面光源的发射网格 (Emissive Mesh) 的宽度和高度与光源变换组件的 localScale 同步。从 7.x 开始,HDRP 使用 lossyScale 来使发射网格 (Emissive Mesh) 负责设置父变换组件的缩放。这意味着必须根据父项的缩放比例来调整 Unity 项目中每个面光源的大小。
剪影纹理(聚光灯、面光源和方向光)以及平面反射探针
在 7.x 之前,我们将聚光灯、面光源和方向光的剪影以及平面反射探针存储到纹理数组中。由于使用了这些数组,因此我们只能对同一个数组中的每个元素使用相同的大小。对于剪影纹理,转换代码可确保如果纹理大小与纹理数组的大小(在 HDRP 资源中定义)不完全相同,则会缩放纹理以适合数组的大小。 现在,我们使用图集,不再受此限制。这意味着你现在使用的剪影大小可能会有所不同,因为我们现在使用的是纹理的实际大小,如果你的纹理太大或太小,可能会产生更锐利/像素化的剪影。如果遇到此类问题,建议你直接修复图像。 对于平面反射探针,这还意味着你可以为每个探针使用不同的分辨率。
您可能还会在控制台中遇到以下错误:No more space in the 2D Cookie Texture Atlas. To solve this issue, increase the resolution of the cookie atlas in the HDRP settings.
这意味着剪影图集内没有剩余空间,因为视图中的剪影太多或剪影纹理太大。要解决此问题,您可以降低剪影纹理的分辨率,也可以在 HDRP 设置中提高图集分辨率。
Max Smoothness、Emission Radius、Bake Shadows Radius 和 Bake Shadows Angle
在 7.x 之前,Max Smoothness、Emission Radius 和 Bake Shadows Radius 是用于点光源和聚光灯的单独控件。从 7.x 开始,UI 显示一个名为 Radius 的单一属性,该属性可以控制上述所有属性。 同样,Max Smoothness、Angular Diameter 和 Bake Shadows Angle 是方向光的单独控件。现在,UI 显示一个名为 Angular Diameter 的单一属性,该属性可以控制上述所有属性。
升级后,高光形状或阴影半影大小可能会发生轻微变化。如果将原始属性设置为与“Radius”或“Angular Diameter”的自动转换结果不匹配的值,则会发生这种情况。
实时 GI Enlighten
从 7.x 开始,对于新项目,HDRP 不再支持实时 GI。但是,对于先前仅针对 7.x LTS 创建的项目,HDRP 仍然支持实时 GI。
自定义着色器
7.x 引入了对反射探针的更改,允许你压缩在渲染探针内容时 Unity 使用的范围。这些更改中包括对着色器框架的微小更改,函数 SampleEnv()
现在需要一个额外的参数,此因子将应用于探针数据以补偿在探针渲染时进行的范围压缩。该值位于数据结构 EnvLightData
中,名称为 rangeCompressionFactorCompensation
。
HDRP 资源和默认设置
从 7.x 开始,许多 HDRP 的设置已移动位置。具体来说,先前位于 HDRP 资源中的大多数信息现在已镜像到项目设置 (Project Settings) 中。 这些设置分为两个不同类别:
- 默认设置 (Project Settings > HDRP Default Settings),您可以在其中提供默认的 Frame Andy Volume Settings。
- 质量设置 (Project Settings > Quality > HDRP),您可以在其中管理多个渲染管线资源的设置。
从 7.x 开始,已弃用 Baking Sky/Static Lighting Sky 组件。现在可以在 (Lighting Window > Environment lighting) 中进行设置,并使用体积配置文件资源和一个下拉选单选择用于烘焙的天空。你可以从场景中移除 Static Lighting Sky 组件。
体积设置的快捷方式
从 7.x 开始,上下文菜单中没有 Render Settings 快捷方式可用于创建预设的体积设置。HDRP 改用默认设置 (Project Settings > HDRP Default Settings)。HDRP 现在包括用于不同形状的局部体积的快捷方式,旨在简化设置体积的过程。此外,HDRP 还包括一个快捷方式,该快捷方式可以创建一个具有天空和雾效覆盖的体积,因为这是一种常用的体积类型。
HDRP 配置包
从 7.x 开始,HDRP 具有一个额外的小型包作为依赖项。这便是 HDRP 配置 (HDRP-Config) 包。你可以更改此包中的属性,以禁用或调整你无法在 HDRP 的 UI 中动态控制的功能。目前包括:
- 在延迟模式下选择阴影过滤质量。
- 摄像机相对渲染。
- 光线追踪。
- XR 最大视图。
- 面光源。
材质升级器
升级 High Definition RP 包时,Unity 现在会升级您的每种材质。这意味着第一次升级时会添加一个版本号,因此,如果发生 HDRP 着色器更改,Unity 可以修复您的材质,使材质仍然可以在完成新的更改后正常工作。
为此,Unity 在您开始升级时会打开一条提示信息,询问您是否要保存您的项目。在您同意保存项目之前,它会一直尝试升级旧文件。
游戏对象 SceneIDMap 缺失脚本
如果一个场景中包含 7.x 之前创作的烘焙探针,则在该场景中进入运行模式时,你可能会遇到有关名为 SceneIDMap 的游戏对象缺失脚本的警告。 要解决此问题,请在 Unity 编辑器中加载场景,然后选择 Edit > Render Pipeline > Fix Warning 'referenced script in (Game Object 'SceneIDMap') is missing' in loaded scenes。
光照强度和天空曝光与 HDRP 默认设置
默认情况下,HDRP 对光源使用物理上正确的强度。因此,HDRP 中存在的默认 HDRI 天空的曝光将设置为 11,以便匹配方向光强度 10000。注意,您也可以在模板项目中找到类似的值。 正确设置 HDRP 向导后,如果创建新的场景,Unity 会自动创建具有正确强度的游戏对象,以确保一切符合逻辑。但是,如果未正确设置 HDRP 向导,或者您从头创建方向光,则强度在物理上不正确。带来的后果是光源与默认的天空曝光不匹配,因此,场景中的任何游戏对象看起来都是黑色的,原因是自动曝光会补偿过亮的天空。 为避免这种情况,请确保相对于当前的天空曝光,为光照强度使用合理的值。
彩虹色颜色空间
以前,HDRP 使用错误的颜色空间来计算彩虹色。从 7.x 开始,HDRP 使用正确的颜色空间。因此,使用彩虹色效果时,颜色更鲜艳/饱和。