Unity Term Book
图形与特效

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-inURPHDRP
Shader Graph❌✅✅
VFX Graph❌✅✅
Ray Tracing❌❌✅
Volumetric Lighting❌Partial✅
2D Renderer❌✅❌
Mobile Support✅✅❌
DLSS / FSR❌Partial✅

一开始就选好 pipeline — 之后迁移 material/shader 费时,还容易出现粉红材质。

动手步骤

1

创建项目时选定管线

Unity Hub → New Project → 选择模板(3D Core = Built-in、URP、HDRP)。务必一开始就定好。

2

为现有项目添加 URP

Package Manager → 安装 "Universal RP" → Assets/Create/Rendering/URP Asset → 在 Project Settings → Graphics 中指定。

3

转换材质

Edit → Rendering → Materials → Convert Selected/All Built-in Materials to URP。

4

使用 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 */ }
}
✓ 兼容旧版✓ 容易上手✗ 无 Shader Graph✗ Deprecated

正在查看: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+)