英文原文:https://resources.unity.com/games/introduction-universal-render-pipeline-for-advanced-unity-creators?ungated=true
渲染的演变:从内置渲染管线到SRP
Unity 的最大优势之一是其平台覆盖范围。 所有游戏工作室的理想选择是创建一次并有效地将他们的游戏部署到他们所需的平台范围,从高端 PC 到低端移动设备。
内置渲染管线被开发为适用于 Unity 支持的所有平台的万能解决方案。 它支持多种图形功能,并且可以方便地与 Forward 和 Deferred 管线一起使用。
然而,随着 Unity 不断增加对更多平台的支持,我们发现内置渲染管道存在以下缺点:
- 大部分代码是用 C++ 编写的,开发人员无法修改,使其成为黑盒系统。
- 渲染流程和渲染管线是预结构化的。
- 渲染算法是硬编码的。
- 不受约束的定制使得在所有平台上实现良好的性能变得困难。
- 它在渲染代码中公开触发管道中的同步点的回调。 这些回调阻止了多线程渲染优化,通过调用 C# 来动态更改帧中任何点的状态注入。
- 缓存数据以管理用户注入的持久性状态很困难
解决方案:可编写脚本的渲染管道
开发 SRP 是为了支持高效的多平台工作流程
提供:
- 从高端到低端设备的最大数量的硬件平台的智能和可靠的扩展。
- 使用 C# 而不是 C++ 自定义渲染过程的能力。 使用 C# 意味着不需要为每次更改都编译一个新的可执行文件
- 支持架构演进的灵活性
- 灵活地创建可在许多平台上执行的清晰图形
下图说明了 SRP 的工作原理。 使用 C# 来控制和自定义渲染通道和渲染控制,以及可以使用对艺术家友好的工具(例如 Shader Graph)创建的 HLSL 着色器。 着色器让您甚至可以访问较低级别的 API 和引擎层抽象。
高级用户可以从头开始创建新的 SRP 或修改 HDRP 或 URP。 图形堆栈是开源的,可在 GitHub 上使用。
为什么选择URP
- 可供广泛的用户使用:URP 可由美术师和技术美术师进行配置,为原型设计和改进渲染技术提供更大的灵活性,以实现完整的游戏制作。
- 可扩展和可定制:URP 允许用户修改现有功能并使用新功能扩展管线,使其成为高级用户的可靠选择,包括 Asset Store 和第三方包创建者、经验丰富的工作室和高级团队。
虽然出于性能目的,低级渲染 API 是用 C++ 编写的,但 URP 开发人员可以编写一个简单的 C# 脚本,以便在渲染管道期间调用,从而在不牺牲性能的情况下实现高级定制。
- 多种渲染选项:URP 提供了一个通用渲染器,它支持正向和延迟渲染器路径,以及一个 2D 渲染器。
这些渲染器可以通过附加功能和可编写脚本的渲染通道进行扩展。 渲染对象功能可用于在渲染管道中的不同事件中从给定的图层蒙版渲染对象。 它还允许您在渲染这些对象时覆盖材质和其他渲染状态,从而无需代码即可自定义渲染。 URP 可以使用自定义渲染器进行扩展以满足特定需求。
更好的性能:在大多数情况下,URP 提供的性能与内置渲染管道相同,甚至更好。 尤其是:
- URP 更有效地评估实时照明。 在前向渲染中,它在一次Pass中评估所有照明。 在延迟渲染中,它支持 Native RenderPass API,允许将 G-buffer 和光照通道组合成一个渲染通道。
- 绘制Mesh时对 CPU 和 GPU 进行了改进。 这是由于 SRP Batcher 确保了更少的绘制调用和处理深度的改进。
- URP 可以更有效地利用移动设备上的磁贴内存,从而降低功耗、延长电池寿命,从而延长游戏时间。
- URP 带有一个集成的后处理堆栈,与内置渲染管道相比,它具有更好的性能。 使用 Volume 框架,您可以创建依赖于相机位置的后处理效果,而无需编写任何代码。
- 与最新工具兼容:URP 支持最新的艺术家友好工具,例如 Shader Graph、VFX Graph 和 Rendering Debugger。
URP 尚未确定将内置渲染管道替换为 Unity 中默认渲染管道的日期。 至少在 2022 年的下一个发布周期内,内置渲染管道仍将是一个可用选项。
点击此链接可全面比较内置渲染管道和 URP 功能。