在开发初期,为项目选择合适的 Unity 渲染管线非常重要。
不同的渲染管线具有不同的功能和性能特征,因此适用于不同的游戏、应用程序和平台。
将项目从一种渲染管线切换到另一种可能非常耗时,尤其是当项目开发已进行到后期时。不同渲染管线使用的着色器不同,所具备的功能也可能不一样。
下表显示了管线之间的一些关键差异,有助于在项目初期选择合适的渲染管线。
注意:不能同时使用通用渲染管线和高清渲染管线 (HDRP)。它们都是使用可编程渲染管线 (Scriptable Render Pipeline, SRP) 构建的,但它们的渲染路径和光照模型不同。
| 功能 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 内置渲染管线 |
|---|---|---|---|
| 目标用途 | 需要跨所有平台(尤其是基于图块的延迟渲染 (TBDR) 平台和不受限的 VR 平台)进行渲染可扩展性的项目。 需要扩展和自定义渲染管线的项目。 2D 和 3D 项目。 |
需要在高端平台上实现逼真和高保真渲染的项目 3D 项目 |
需要跨所有平台的渲染可扩展性的项目。 2D 和 3D 项目。 |
| 平台支持 | 支持所有 Unity 支持的平台 专注于基于图块的延迟渲染 (TBDR) 平台和不受限的 VR 平台的效率 |
支持桌面平台、Xbox 和 PlayStation 平台 专注于高效使用高级 GPU 硬件功能,例如异步计算着色器和光线追踪(如果硬件支持)。 |
支持所有 Unity 支持的平台 |
| 源代码访问 | 主要使用 C# 语言 在 GitHub 上公开访问 URP 源代码。还可以使用 URP 作为基础来创建自定义管线 与内置渲染管线相比,更易于阅读、修改和扩展 |
主要使用 C# 语言 可在 GitHub 上公开访问 HDRP 源代码。还可以使用 HDRP 作为基础来创建自定义管线 与内置渲染管线相比,更易于阅读、修改和扩展 |
主要使用 C++ 语言 通过购买源代码访问权限进行私有访问 |
| 管线扩展 | 管线提供 API 和注入点,也能修改公开的源代码 比内置渲染管线更容易扩展 |
管线提供 API 和注入点,也能修改公开的源代码 比内置渲染管线更容易扩展,但 HDRP 很复杂并具有高级功能,所以比 URP 难一些 |
管线提供 API 和注入点 |
| 通过美术师工具进行自定义 |
Shader Graph,可用于自定义着色、材质和屏幕空间效果 Built-in Particle System,可用于自定义视觉效果。有限的自定义 VFX Graph,可用于设计视觉效果,从简单的常见粒子行为到在 GPU 上运行的复杂模拟。 |
Shader Graph,可用于自定义着色、材质和屏幕空间效果 Built-in Particle System,可用于自定义视觉效果。有限的自定义 VFX Graph,可用于设计视觉效果,从简单的常见粒子行为到在 GPU 上运行的复杂模拟。 |
Shader Graph,可用于自定义着色、材质和屏幕空间效果 除了现有功能的错误修复之外,Shader Graph 不会收到内置渲染管线支持的更新 Built-in Particle System,可用于自定义视觉效果。有限的自定义 |
| 通过手动编码着色器进行自定义 | 您可以自定义源代码中的 HLSL 着色器和 URP 着色器 | 您可以自定义源代码中的 HLSL 着色器和 HDRP 着色器 建议仅向高级用户手动编码着色器,因为 HDRP 着色器很复杂并具有高级功能 |
HLSL 着色器和表面着色器 |
| 光照 | 专为逼真光照和风格化光照而设计 基础 PBR 和一些高级 PBR,例如透明涂层 对于像卡通渲染这样的自定义光照模型,更易于进行自定义 |
专注于逼真感和物理精准光照,内置对物理光单位的支持 基础和高级 PBR。例如透明涂层、皮肤、毛发、眼睛、次表面散射和水 高级的屏幕空间和体积效果 对于像卡通渲染这样的自定义光照模型,更难以进行自定义 |
专为逼真光照和风格化光照而设计 基础的基于物理的渲染 (PBR) 对于像卡通渲染这样的自定义光照模型,更易于进行自定义 |
| 性能 | 支持静态批处理和动态批处理 使用可编程渲染管线 (SRP) Batcher 进行高级绘制调用批处理 与 BatchRenderer Group API 和 Entities 兼容 |
支持静态批处理 使用可编程渲染管线 (SRP) Batcher 进行高级绘制调用批处理 与 BatchRenderer Group API 和 Entities 兼容 |
支持静态批处理和动态批处理 |
有关各渲染管线与哪些功能兼容的详细信息,请参阅渲染管线功能比较,有助于为项目选择正确的管线。