docs.unity3d.com
    显示 / 隐藏目录

    将 HDRP 从 5.x 升级到 Unity 6.x

    在高清渲染管线 (High Definition Render Pipeline, HDRP) 中,主要版本之间某些功能的工作方式有所不同。本文档可帮助你将 HDRP 从 Unity 5.x 升级到 6.x。

    自定义着色器

    在 6.x 中对 HDRP 材质框架的着色器代码进行了改进,使你在编写着色器时拥有更大的自由度。如果创建了自定义着色器,并想将 HDRP 项目升级到 Unity 6.x,则必须更新着色器以遵循新框架。

    • 在 6.x 中,HDRP 的光照模型使用 EvaluateBSDF(),而在 5.x 中使用 BSDF()。EvaluateBSDF() 返回一个 CBSDF 结构,其中包含反射和透射的漫射和镜面反射光的光照信息。在 6.x 之前,HDRP 自动应用兰伯特 (Lambert) 余弦。从 6.x 开始,必须在 EvaluateBSDF() 内部手动应用它。使用 IsNonZeroBSDF 可以检查是否需要评估 BSDF。
    • 在 6.x 中,GetBSDFAngles 函数接受与先前不同的一组参数。该函数也不再返回 NdotV 和 NdotV,现在必须手动将其钳制在函数之外。
    • 在 6.x 中,LightEvaluation 和 SurfaceShading 文件包含 helper 函数,并且你可以选择在 Unity 项目中包含或排除这些函数。helper 函数处理所有 HDRP 材质所调用的通用材质和光源评估代码(包括 StackLit 和 Lit)。使用 #define 可以包含或移除每个 helper 函数。
    • 在 6.x 中,GetAmbientOcclusionForMicroShadowing() 方法替代了 ComputeMicroShadowing()。GetAmbientOcclusionForMicroShadowing() 使用环境光遮挡属性进行微阴影处理,而 ComputeMicroShadowing() 使用的是微阴影值。
    • WorldToTangent 现在重命名为 TangentToWorld,因为之前的命名是错误的。

    ShaderGraph

    在 6.x 中,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)。此时会自动完成以下操作:

    1. 遍历项目中的每种材质。
    2. 复制将材质属性与其主节点值同步所需的所有关键字。
    3. 调用 HDRP 材质关键字重置函数。
    4. 将材质的渲染队列设置为与 ShaderGraph 上的渲染队列匹配。

      要仅升级场景中的 ShaderGraph,请改为选择 Edit > Render Pipelines > Reset All Shader Graphs Scene Material Properties (Scene)。

    返回到顶部
    Copyright © 2023 Unity Technologies — 商标和使用条款
    • 法律条款
    • 隐私政策
    • Cookie
    • 不要出售或分享我的个人信息
    • Your Privacy Choices (Cookie Settings)