将 HDRP 从 Unity 2019.1 升级到 Unity 2019.2
在高清渲染管线 (High Definition Render Pipeline, HDRP) 中,某些功能在 Unity 的主要版本之间的工作方式有所不同。本文档可帮助您将 HDRP 从 Unity 2019.1 升级到 2019.2。
自定义着色器
在 2019.2 中对 HDRP 材质框架的着色器代码进行了改进,使您在编写着色器时拥有更大的自由度。如果创建了自定义着色器,并想将 HDRP 项目升级到 Unity 2019.2,则必须更新着色器以遵循新框架。
- 在 2019.2 中,HDRP 的光照模型使用
EvaluateBSDF()
,而在 2019.1 中使用BSDF()
。EvaluateBSDF()
返回一个CBSDF
结构,其中包含反射和透射的漫反射和镜面反射光的光照信息。在 2019.2 之前,HDRP 自动应用兰伯特 (Lambert) 余弦。从 2019.2 开始,必须在EvaluateBSDF()
内部手动应用它。使用IsNonZeroBSDF
可以检查是否需要评估 BSDF。 - 在 2019.2 中,
GetBSDFAngles
函数接受与先前不同的一组参数。该函数也不再返回NdotV
和NdotV
,您现在必须手动将其钳制在函数之外。 - 在 2019.2 中,LightEvaluation 和 SurfaceShading 文件包含 helper 函数,并且您可以选择在 Unity 项目中包含或排除这些函数。helper 函数处理所有 HDRP 材质所调用的通用材质和光源评估代码(包括 StackLit 和 Lit)。使用
#define
可以包含或移除每个 helper 函数。 - 在 2019.2 中,
GetAmbientOcclusionForMicroShadowing()
方法替代了ComputeMicroShadowing()
。GetAmbientOcclusionForMicroShadowing()
使用环境光遮挡属性进行微阴影处理,而 ComputeMicroShadowing() 使用的是微阴影值。 - WorldToTangent 现在重命名为 TangentToWorld,因为之前的命名是错误的。
ShaderGraph
在 2019.2 中,HDRP 在材质中而不是 ShaderGraph 中存储诸如 SurfaceType、BlendMode 和 DoubleSided 之类的属性。.现在,使用这种属性的每种材质可能会在场景中显示不正确,因为它们的值可能与主节点设置中的相应值不匹配。此更改与每个 ShaderGraph 主节点相关,但 PBR 和 Unlit 跨管线主节点除外。
在材质上更改这些属性时,HDRP 会在生成的着色器中切换本地着色器关键字。主节点本身仍会在设置视图 (Settings View) 中显示这些属性。主节点仍存储这些属性值,但是它们现在用作着色器和材质的默认值。材质上的属性值将覆盖这些默认值。
此更改意味着 HDRP 需要生成较少的着色器变体,因为它现在依靠着色器关键字进行渲染状态控制。此更改还使 HDRP 可以更有效地处理着色器剥离。
升级
要升级项目中的所有 ShaderGraph,请选择 Edit > Render Pipelines > Reset All Shader Graphs Scene Material Properties (Project)。此时会自动完成以下操作:
- 遍历项目中的每种材质。
- 复制将材质属性与其主节点值同步所需的所有关键字。
- 调用 HDRP 材质关键字重置函数。
将材质的渲染队列设置为与 ShaderGraph 上的渲染队列匹配。
要仅升级场景中的 ShaderGraph,请改为选择 Edit > Render Pipelines > Reset All Shader Graphs Scene Material Properties (Scene)。