URP 包含多个注入点,可让您将渲染通道注入帧渲染循环并在不同事件上执行。
注入点使自定义渲染通道可以访问 URP 缓冲区。渲染通道对每个注入点的所有缓冲区都有读取和写入访问权限。
Unity 在渲染循环中提供了以下事件。您可以使用这些事件注入自定义通道。
| 注入点 | 描述 |
|---|---|
| BeforeRendering | 在为当前摄像机渲染管线中的任何其他通道之前执行 ScriptableRenderPass 实例。此时,未设置摄像机矩阵和立体渲染。您可以使用此注入点来绘制稍后会在管线中使用的自定义输入纹理,例如 LUT 纹理。 |
| BeforeRenderingShadows | 在渲染阴影贴图(MainLightShadow、AdditionalLightsShadow 通道)之前执行 ScriptableRenderPass 实例。此时,未设置摄像机矩阵和立体渲染。 |
| AfterRenderingShadows | 在渲染阴影贴图(MainLightShadow、AdditionalLightsShadow 通道)之后执行ScriptableRenderPass实例。此时,未设置摄像机矩阵和立体渲染。 |
| BeforeRenderingPrePasses | 在渲染预通道(DepthPrepass、DepthNormalPrepass 通道)之前执行 ScriptableRenderPass 实例。此时,摄像机矩阵和立体渲染已设置。 |
| AfterRenderingPrePasses | 在渲染预通道(DepthPrepass、DepthNormalPrepass 通道)之后执行 ScriptableRenderPass 实例。此时,摄像机矩阵和立体渲染已设置。 |
| BeforeRenderingGbuffer | 在渲染 GBuffer 通道之前执行 ScriptableRenderPass 实例。 |
| AfterRenderingGbuffer | 在渲染 GBuffer 通道之后执行 ScriptableRenderPass 实例。 |
| BeforeRenderingDeferredLights | 在渲染 Deferred 通道之前执行 ScriptableRenderPass 实例。 |
| AfterRenderingDeferredLights | 在渲染 Deferred 通道之后执行 ScriptableRenderPass 实例。 |
| BeforeRenderingOpaques | 在渲染不透明对象(DrawOpaqueObjects 通道)之前执行 ScriptableRenderPass 实例。 |
| AfterRenderingOpaques | 在渲染不透明对象(DrawOpaqueObjects 通道)之后执行 ScriptableRenderPass 实例。 |
| BeforeRenderingSkybox | 在渲染天空盒(Camera.RenderSkybox 通道)之前执行 ScriptableRenderPass 实例。 |
| AfterRenderingSkybox | 在渲染天空盒(Camera.RenderSkybox 通道)之后执行 ScriptableRenderPass 实例。 |
| BeforeRenderingTransparents | 在渲染透明对象(DrawTransparentObjects 通道)之前执行 ScriptableRenderPass 实例。 |
| AfterRenderingTransparents | 在渲染透明对象(DrawTransparentObjects 通道)之后执行 ScriptableRenderPass 实例。 |
| BeforeRenderingPostProcessing | 在渲染后期处理效果(Render PostProcessing Effects 通道)之前执行 ScriptableRenderPass 实例。 |
| AfterRenderingPostProcessing | 在渲染后期处理效果之后但在最终__ blit__“位块传输 (Bit Block Transfer)”的简写。blit 操作是将数据块从内存中的一个位置传输到另一个位置的过程。 See in Glossary、后期处理抗锯齿效果和颜色分级之前执行 ScriptableRenderPass 实例。 |
| AfterRendering | 在渲染所有其他通道之后执行 ScriptableRenderPass 实例。 |
下图显示了 URP 帧中的通道和帧资源流程: