SRP / URP / HDRP
Scriptable Render Pipeline(SRP)是 Unity 灵活的渲染架构,自带 URP(Universal,适合大多数游戏)与 HDRP(High Definition)两套官方预设。选择正确的 SRP 决定画质上限、平台覆盖与扩展方式,帮助团队在移动、主机与主机级画质目标之间做出可维护的渲染选型。
想象一下...
Built-in Renderer 像普通家用厨房——什么都能做,但费电、未针对场景优化。URP 是现代电磁炉——快、省、适合手机与独立游戏。HDRP 是米其林厨房——细节极致,但需要高端硬件(PC/主机)。
概念详解
SRP(Scriptable Render Pipeline): 自 Unity 2018 起, 可通过 C# API 自定义渲染管线。可自写(custom SRP),或使用两套预设: URP 与 HDRP。
URP(Universal RP): 前身为 LWRP。面向 手机、Web、Switch。单通道前向渲染,并带 2D Renderer。使用 Shader Graph 与 VFX Graph。优于 Built-in,但缺少部分高级特性 (光线追踪、复杂后期处理)。
HDRP(High Definition RP): 面向 高端 PC/主机。支持 Ray Tracing、DLSS/FSR、Volumetric Lighting、Screen Space AO、Contact Shadows、Tessellation… GPU 开销大,但画面最强。
切换: 选定管线后不能随意跳转。Materials/Shaders 需要更新。 可用 Edit → Rendering → Materials → Convert… 自动迁移。
功能对比
| 功能 | Built-in | URP | HDRP |
|---|---|---|---|
| Shader Graph | ❌ | ✅ | ✅ |
| VFX Graph | ❌ | ✅ | ✅ |
| Ray Tracing | ❌ | ❌ | ✅ |
| Volumetric Lighting | ❌ | Partial | ✅ |
| 2D Renderer | ❌ | ✅ | ❌ |
| Mobile Support | ✅ | ✅ | ❌ |
| DLSS / FSR | ❌ | Partial | ✅ |
一开始就选好 pipeline — 之后迁移 material/shader 费时,还容易出现粉红材质。
动手步骤
创建项目时选定管线
Unity Hub → New Project → 选择模板(3D Core = Built-in、URP、HDRP)。务必一开始就定好。
为现有项目添加 URP
Package Manager → 安装 "Universal RP" → Assets/Create/Rendering/URP Asset → 在 Project Settings → Graphics 中指定。
转换材质
Edit → Rendering → Materials → Convert Selected/All Built-in Materials to URP。
使用 Renderer Features
URP Renderer → Add Renderer Feature(Outline、SSAO、Custom…)——相当于 Built-in 的 Image Effects。
交互模拟器
对比 Built-in / URP / HDRP —— 目标平台、性能与功能。
Target
全平台(旧版)
Performance
一般 — 未优化
Visual
基础,后期效果有限
// 旧版 Shader(Built-in)
Shader "Custom/OldShader" {
SubShader { /* 旧版 CG/HLSL */ }
}正在查看:Built-in Render Pipeline
代码示例
基础自定义 Renderer Feature —— 添加到 URP Renderer 资源以注入渲染通道。
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
// Custom Renderer Feature — add to a URP Renderer asset
public class OutlineRendererFeature : ScriptableRendererFeature
{
public OutlineSettings settings = new OutlineSettings();
private OutlineRenderPass _pass;
public override void Create()
{
_pass = new OutlineRenderPass(settings);
_pass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(_pass);
}
}
[System.Serializable]
public class OutlineSettings
{
public Color outlineColor = Color.white;
[Range(0f, 10f)] public float outlineThickness = 2f;
}📌 快速记忆
- ▸URP = 适合独立游戏、手机、2D
- ▸HDRP = 3A 画质,高端 PC/主机
- ▸先选管线——迁移成本很高!
- ▸SRP Batcher 可提升 URP 的 draw-call 性能
⚠️ 常见错误
❌ Built-in shader 在 URP 中不工作
材质变洋红(missing shader)
✅ 转换材质,或用 Shader Graph 重建
❌ 在 URP 里用旧的 Graphics.Blit API
已弃用——闪烁或无效果
✅ 使用 Blitter.BlitCameraTexture(URP 13+)