导图社区 Unity URP渲染流程和核心架构
Unity URP渲染管线的渲染流程和核心架构,是Unity开发者、游戏开发爱好者以及图形学学习者深入掌握URP(Universal Render Pipeline,通用渲染管线)的实用指南。呈现了从URP模板创建新工程、安装URP到已有工程,再到理解性能以及为更好性能进行配置的全流程内容,助力用户快速上手并优化URP渲染。在Unity开发中,渲染管线对于图形渲染效果和性能起着关键作用。URP作为Unity推出的通用渲染管线,具有高效、灵活等特点。这张思维导图首先介绍了使用URP的起点,包括从URP模板创建新工程时会自动安装和配置URP,以及安装URP到已有工程所需的手动操作步骤,如安装相关包、配置URP资源等。对于Unity开发者来说,这张思维导图能帮助他们高效地使用URP进行项目开发,提升图形渲染效果和性能;游戏开发爱好者可以借此深入了解现代游戏图形渲染技术;图形学学习者则能通过它系统地学习URP的相关知识。万兴脑图以其便捷操作助力用户轻松掌握URP知识,是开发学习的得力助手。
编辑于2026-03-28 17:15:49URP简介
版本:14.0
要求
Unity编辑器兼容性
渲染管线兼容性
与内置管线:不兼容
与HDRP管线:不兼容
Unity Player系统要求
此包无特定于平台的任何额外要求
只需遵循Unity Player的一般系统要求
开始使用
从URP模板创建新工程:会自动安装和配置URP
安装URP到已存在的工程:需要手动安装、配置、转换甚至重新生成以适配URP,如光照shader和后处理等
开始安装URP之前
删除Post Processing包
删除自定义的后处理
带安装URP后重新创建以上后处理效果
安装URP:安装插件包
配置URP:创建URP资源,并将之设为激活的RP资源
升级shader:内置管线下的Standard Shader和自定义Shader需要转化成与URP兼容
包示例
Camera Stacking
Renderer Features
Lens Flares
Decals
Shaders
场景模板
使用场景模板可以快速创建包含预先配置的URP特定的设置和后处理效果的场景
理解性能
因素
使用或开启的URP功能和设置
场景包含的内容
目标平台
工具
Unity Profiler
GPU profiler
Xcode
RenderDoc
参数/指标维度
CPU用时
禁用每帧volume更新
纹理内存
禁用HDR以降低color buffer的大小
与内存之间copy的渲染纹理内存:对手机平台影响巨大
禁用创建depth texture
管线中pass数量
禁用opaque texture
禁用附加光阴影投射
发送给GPU的DrawCall数量
启用SRP Batcher
渲染到屏幕的像素数量:对手机平台影响巨大
降低render scale
为更好的性能进行配置
选择渲染路径:功能、性能和限制
Forward
Forward+
Deferred
降低URP使用的内存
关闭Depth Texture
关闭Opaque Texture
关闭HDR,降低到32位精度
使用Deferred渲染路径时,禁用Use Rendering Layers
降低主光源阴影图分辨率
降低附加光阴影图分辨率
关闭Light Cookies,降低分辨率和格式
在低端的移动平台,Store Actions设置为Auto或者Discard:避免来自每个pass的render target与内存之间相互拷贝引起的内存带宽消耗
降低CPU处理时间
Volume Update Mode:关闭每帧更新
低端移动平台,关闭Probe Blending和Box Projection
Shadows部分,降低Max Distance以处理更少的对象。这也降低GPU处理时间
Shadows部分,降低Cascade Count以减少渲染pass的数量。这也降低GPU处理时间
在附加光部分,关闭Cast Shadows。这也降低GPU处理时间
降低场景中相机数量,减少相机culling和rendering所耗资源。这也降低GPU处理时间
降低GPU处理时间
关闭或降低Anti-aliasing(MSAA),这样就不会使用内存带宽拷贝frame buffer。这也降低使用的内存量
关闭Terain Holes
开启SRP Batcher
在低端移动平台,关闭LOD Cross Fade以避免使用alpha测试
关闭附加光或者使用Per Vertex,以降低光照计算
关闭软阴影,或者降低质量
避免使用复杂光照shader。关闭Clear Coat
在低端移动平台,静态物体使用Baker Lit Shader,动态物体使用简单光照shader
升级指南
渲染管线转换器,将内置RP的资源转换为URP兼容的资源
转换类型和转换器
内置RP到URP
内置2D到URP 2D
URP 2D升级
如何使用RP转换器
URP14的新增功能
功能
Full Screen Pass Renderer Feature
Custom post-processing effects
Rendering layers
Forward+ Rendering Path
LOD Cross-fade
改进
已解决问题
已知问题
功能
URP与其他渲染管线功能比较
渲染管线概念
URP资源(Asset)
Rendering
Quality
Lighting
Shadows
Post-processing
Adaptive Performance
URP实例(RenderPipeline)
URP渲染器(Renderer)
Renderer Feature
中心主题
主题
主题
主题
中心主题
主题
主题
主题
中心主题
主题
主题
主题
后期处理
URP中包含后处理效果的集成实现,使用URP不需要安装额外的后处理插件包。 URP不兼容Post Processing Stack v2插件包。
如何配置
Cmaera开启后处理
Volume组件上添加Override
移动平台友好的效果
Bloom,关闭HDR高质量采样
Chromatic Aberration
Color Grading
Lens Distortion
Vignette
Depth of Field
移动平台:Gaussian
PC和主机:Bokeh
Anti-aliasing
移动平台:FXAA
HDR输出
Volumes
效果列表
自定义后处理
中心主题
主题
主题
主题
中心主题
主题
主题
主题
中心主题
主题
主题
主题
中心主题
主题
主题
主题
中心主题
主题
主题
主题
中心主题
主题
主题
主题
中心主题
StencilStateData
UniversalAdditionalLightData
UniversalAdditionalCameraData
MonoBehaviour
ScriptableRenderPass
ForwardRenderer
ScriptableRenderer
UniversalRenderPipeline
RenderPipeline
ScriptableRenderFeature
PostProcessData
ForwardRenderData
UniversalRenderPipelineAsset
ScriptableRenderData
RenderPipelineAsset
ScriptObject
帧渲染循环
引擎Callback:RenderPipelineManager.BeginContextRendering / RenderPipelineManager.BeginFrameRendering
相机按照depth排序
相机渲染循环:对每个相机都执行一遍
UniversalRenderPipeline.RenderSingleCamera()
ScriptableRenderer.Clear()
ScriptableRenderer.OnPreCullRenderPasses():回调所有feature
ScriptableRendererFeature.OnCameraPreCull()
ScriptableRenderer.SetupCullingParameters()
SetupPerCameraShaderConstants
InitializeRenderingData
AddRenderPasses():收集所有Feature的pass
ScriptableRendererFeature.AddRenderPasses()
ScriptableRenderer.Setup():Renderer相关初始化,如特定渲染路径下的pass收集
ScriptableRenderer.Execute()
SetupRenderPasses():回调所有feature
ScriptableRendererFeature.SetupRenderPasses()
InternalStartRendering()
ScriptableRendererPass.OnCameraSetup()
ClearRenderingState()
SetShaderTimeValues()
SetPerCameraShaderVariables()
SortStable():pass稳定排序,RenderBlocks会用到
Pass排序,以ForwardRenderer为例
AddRenderPasses()
ScriptableRendererFeature.AddRenderPasses()
m_MainLightShadowCasterPass
RenderPassEvent.BeforeRenderingShadows
ShaderTagId
ShadowCaster
m_AdditionalLightsShadowCasterPass
RenderPassEvent.BeforeRenderingShadows
ShaderTagId
ShadowCaster
m_DepthNormalPrepass
RenderPassEvent.BeforeRenderingPrepasses
RenderQueueRange.opaque
ShaderTagId
DepthNormals
m_DepthPrepass
RenderPassEvent.BeforeRenderingPrepasses
RenderQueueRange.opaque
ShaderTagId
DepthOnly
m_ColorGradingLutPass
RenderPassEvent.BeforeRenderingPrepasses
m_RenderOpaqueForwardPass
RenderQueueRange.opaque
ShaderTagId
SRPDefaultUnlit
UniversalForward
UniversalForwardOnly
LightweightForward
m_DrawSkyboxPass
RenderPassEvent.BeforeRenderingSkybox
m_CopyDepthPass
RenderPassEvent.AfterRenderingSkybox
m_CopyColorPass
RenderPassEvent.AfterRenderingSkybox
m_TransparentSettingsPass
RenderPassEvent.BeforeRenderingTransparents
m_RenderTransparentForwardPass
RenderPassEvent.BeforeRenderingTransparents
ShaderTagId
SRPDefaultUnlit
UniversalForward
UniversalForwardOnly
LightweightForward
m_OnRenderObjectCallbackPass
RenderPassEvent.BeforeRenderingPostProcessing
m_PostProcessPass
RenderPassEvent.BeforeRenderingPostProcessing
m_CapturePass
RenderPassEvent.AfterRendering
m_FinalPostProcessPass
RenderPassEvent.AfterRendering + 1
m_FinalBlitPass
RenderPassEvent.AfterRendering
m_SceneViewDepthCopyPass
RenderPassEvent.AfterRendering + 9
回调所有pass的Configure方法
ScriptableRendererPass.Configure()
SetupLights()
ExecuteBlock(RenderPassBlock.BeforeRendering)
ScriptableRenderer.ExecuteRenderPass()
ScriptableRendererPass.Execute()
SetCameraMatrices()
ExecuteBlock(RenderPassBlock.MainRenderingOpaque)
ScriptableRenderer.ExecuteRenderPass()
ScriptableRendererPass.Execute()
ExecuteBlock(RenderPassBlock.MainRenderingTransparent)
ScriptableRenderer.ExecuteRenderPass()
ScriptableRendererPass.Execute()
ExecuteBlock(RenderPassBlock.AfterRendering)
ScriptableRenderer.ExecuteRenderPass()
ScriptableRendererPass.Execute()
ScriptableRenderer.InternalFinishRendering
ScriptableRendererPass.OnCameraCleanup()
ScriptableRendererPass.OnFinishCameraStackRendering()
引擎Callback:RenderPipelineManager.EndContextRendering / RenderPipelineManager.EndFrameRendering
中心主题
DrawObjectsPass
SRPDefaultUnlit
UniversalForward
UniversalForwardOnly
DrawSkyboxPass
DepthOnlyPass
m_ShaderTagId
CopyColorPass