注入点
要确定 Unity 执行 Custom Pass Volume 的时间,请在 Custom Pass Volume 组件中选择一个注入点 (Injection Point)。
每个注入点都会影响自定义通道在场景中的显示方式。HDRP 渲染循环中有六个注入点。Unity 在每个注入点中只能执行一个 Custom Pass Volume。
注入点使 Custom Pass Volume 组件可以访问某些缓冲区。每个可用缓冲区在每个注入点具有不同的读取或写入访问权。每个缓冲区包含在具体通道之前渲染的对象子集。
在绘制渲染器自定义通道 (DrawRenderers Custom Pass) 中,只能在特定注入点使用某些材质。有关兼容材质的完整列表,请参阅材质和注入点兼容性。
要分析 Unity 在渲染循环中执行的操作以及查看 Unity 在何处执行自定义通道,请使用帧调试器。
Unity 会按从上到下的顺序触发帧中的以下注入点:
注入点 | 可用缓冲区 | 描述 |
---|---|---|
BeforeRendering | 深度(写入) | Unity 恰好在此注入点之前清除深度缓冲区。 在此注入点中,可以写入深度缓冲区,以使 Unity 不会渲染经过深度测试的不透明对象。 还可以清除分配的缓冲区,即 Custom Buffer 。为 FullscreenCustom Pass 选择此注入点之后,Unity 默认将摄像机颜色缓冲区分配为目标。 |
AfterOpaqueDepthAndNormal | Depth (Read | Write), Normal and roughness (Read | Write) | 此注入点可用的缓冲区包含所有不透明对象。 在此注入点中,可以修改法线、粗糙度和深度缓冲区。HDRP 在光照和深度棱锥中会考虑这一点。 法线和粗糙度位于同一缓冲区中。可以使用 DecodeFromNormalBuffer 和 EncodeIntoNormalBuffer 方法来读取/写入法线和粗糙度数据。 |
BeforePreRefraction | Color (no pyramid | Read | Write), Depth (Read | Write), Normal and roughness (Read) | 此注入点可用的缓冲区包含所有不透明对象和天空。 在此注入点中,可以渲染任何需要折射的透明对象。然后,这些对象被包含在颜色棱锥中。Unity 渲染透明对象时将这个颜色棱锥用于折射。 |
BeforeTransparent | Color (Pyramid | Read | Write), Depth (Read | Write), Normal and roughness (Read) | 此注入点可用的缓冲区包括: - 所有不透明对象。 - 透明预折射对象。 - 已启用深度预通道和屏幕空间反射 (SSR) 的透明对象。 在此注入点中,可以对 Unity 用于透明折射的颜色棱锥进行采样。可以将其用于创建模糊效果。Unity 在此注入点渲染的所有对象都不会位于颜色棱锥中。 还可以使用此注入点来绘制一些折射整个场景的透明对象(例如水)。 |
BeforePostProcess | Color (Pyramid | Read | Write), Depth (Read | Write), Normal and roughness (Read) | 此注入点可用的缓冲区包含使用高动态范围 (HDR) 的帧中的所有几何体。 |
AfterPostProcess | Color (Read | Write), Depth (Read) | 此注入点可用的缓冲区包含场景的最终渲染(包括后期处理效果)。 Unity 应用任何后期处理效果后,此注入点将执行可用的缓冲区。 如果选择此注入点,则使用深度缓冲区的对象将表现出抖动瑕疵。 为 FullscreenCustom Pass 选择此注入点之后,Unity 默认将摄像机颜色缓冲区分配为目标。 |
下图描述了 Unity 将自定义通道注入到 HDRP 帧中的位置: