Srp
Date: 2022-10-25
Tags: unity3d srp scriptable render pipeling
SRP, 全名为Scriptable Render Pipeline,最早是在GDC2018上演示Demo(Book of the Dead, 基于HDRP开发),并随后在Unity2018.1beta引入。与此同时还有两个基于SRP开发的渲染管线:
- HDRP(High-Definition Rendering Pipeline),偏向于更好的图形效果
- LWRP(Lightweight Rendering Pipeline), 后改名为URP(Universal Rendering Pipeline),偏向于高性能
提供了使用C#脚本调度和配置渲染命令(rendering command)的能力。Unity会将这些命令传递给底层的图形架构,最终会转换为指令发送给图形API。
什么是渲染管线
简单来说就是把物体渲染显示到屏幕上所需要的技术概括。大致流程可以抽象为:
- 剔除(Culling)
- 渲染物体(Rendering Objects)
- 后处理(Post processing)
SRP围绕这些技术提供若干工具,方便开发者对这些过程进行自定义。
有BuiltIn,为何要开发SRP
- BuiltIn开箱即用,功能完善
- SRP自定义,可扩展性强,掌控/自定义渲染流程,自由分配渲染资源
SRP本质上是对BuiltIn的一次扩展,其中的很多API都是引擎层暴露出来用C#包装,再提供给用户进行配置。
其实Unity2018以前已经允许用户对渲染流程进行一定程度的自定义,但是缺乏系统性的工具方便用户进行整体性的管线定制(例如视椎体剔除,遮挡剔除,CommandBuffer,GraphicsAPI等等,比较分散,或者直接绑定内置管线),SRP的提出也算是弥补了这一块的不足。
如何定制SRP
需要考虑很多因素,没有适用于所有游戏的管线解决方案。
- 游戏类型/核心玩法 RPG/RTS/SLG…
- 硬件平台 PC/Console/Mobile…
- 渲染风格 Reality/Cartoon/Pixel…
技术选型
- Multi Pass/Single Pass/Defer
- Lighting Model (PBR/Simple Material)
- Shadow
- HDR/LDR
- AA
基础架构


核心概念
- Rendering Loop: 渲染流程,ClearRenderTarget–>Culling–>Drawing
- ScriptableRenderContext: 渲染上下文,提供功能丰富的API,用以设置渲染状态和创建绘制命令
- RenderPipeline: 渲染管线,依赖渲染上下文,定义Rendering Loop