Unity3D:使用 CommandBuffer 来扩展内置渲染管线

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
使用 CommandBuffer 来扩展内置渲染管线
本页包含有关在内置渲染管线中使用 CommandBuffer 的信息。有关在渲染管线中基于可编程渲染管线使用 CommandBuffer 的信息,请参阅在可编程渲染管线中调度和执行渲染命令。
CommandBuffer 基础知识
CommandBuffer 保存渲染命令列表(例如设置渲染目标或绘制给定网格)。您可以指示 Unity 在内置渲染管线中的各个点安排和执行这些命令,因此,您可以自定义和扩展 Unity 的渲染功能。

可以使用 Graphics.ExecuteCommandBuffer API 立即执行 CommandBuffer,也可以进行安排,让它们在渲染管线中的给定点执行。要安排它们,请使用 Camera.AddCommandBuffer API 与CameraEvent 枚举,以及 Light.AddCommandBuffer API 与 LightEvent 枚举。要查看 Unity 何时执行以这种方式安排的 CommandBuffer,请参阅 CameraEvent 和 LightEvent 的执行顺序。
有关可以使用 CommandBuffer 执行的命令的完整列表,请参阅 CommandBuffer API 文档。请注意,一些命令仅在某些硬件上受支持。例如,与光线追踪有关的命令仅在 DX12 中受支持。
Command Buffer 示例

Unity 博客文章扩展 Unity 5 渲染管线:CommandBuffer 介绍了内置渲染管线中的 CommandBuffer,并包含示例项目和示例代码。它介绍如何使用 CommandBuffer 来实现几种不同的效果,并包含一个示例项目和示例代码。项目是为 Unity 的旧版本创建的,但原理相同。
CameraEvent 和 LightEvent 事件的执行顺序
CameraEvent
CameraEvents 执行顺序取决于项目使用的渲染路径。
延迟渲染路径
- BeforeGBuffer
- Unity 渲染不透明几何体
- AfterGBuffer
- Unity 解析深度。
- BeforeReflections
- Unity 渲染默认反射和反射探针反射。
- AfterReflections
- Unity 将反射复制到 G 缓冲区的 Emissive 通道。
- BeforeLighting
- Unity 渲染阴影。请参阅 LightEvent 执行顺序。
- AfterLighting
- BeforeFinalPass
- Unity 对最终通道进行处理。
- AfterFinalPass
- BeforeForwardOpaque(仅当存在无法以延迟方式渲染的不透明几何体时调用)
- Unity 渲染无法以延迟方式渲染的不透明几何体。
- AfterForwardOpaque(仅当存在无法以延迟方式渲染的不透明几何体时调用)
- BeforeSkybox
- Unity 渲染天空盒。
- AfterSkybox
- Unity 渲染光环。
- BeforeImageEffectsOpaque
- Unity 应用仅不透明的后期处理效果。
- AfterImageEffectsOpaque
- BeforeForwardAlpha
- Unity 渲染透明几何体以及具有 Screen Space - Camera 渲染模式的 UI 画布。
- AfterForwardAlpha
- BeforeHaloAndLensFlares
- Unity 渲染镜头光晕。
- AfterHaloAndLensFlares
- BeforeImageEffects
- Unity 应用后期处理效果。
- AfterImageEffects
- AfterEverything
- Unity 对渲染模式不是 Screen Space - Camera 的 UI 画布进行渲染。
前向渲染路径
- BeforeDepthTexture
- Unity 渲染不透明几何体的深度。
- AfterDepthTexture
- BeforeDepthNormalsTexture
- Unity 渲染不透明几何体的深度法线。
- AfterDepthNormalsTexture
- Unity 渲染阴影。请参阅 LightEvent 执行顺序。
- BeforeForwardOpaque
- Unity 渲染不透明几何体。
- AfterForwardOpaque
- BeforeSkybox
- Unity 渲染天空盒。
- AfterSkybox
- Unity 渲染光环。
- BeforeImageEffectsOpaque
- Unity 应用仅不透明的后期处理效果。
- AfterImageEffectsOpaque
- BeforeForwardAlpha
- Unity 渲染透明几何体以及具有 Screen Space - Camera 渲染模式的 UI 画布。
- AfterForwardAlpha
- BeforeHaloAndLensFlares
- Unity 渲染镜头光晕。
- AfterHaloAndLensFlares
- BeforeImageEffects
- Unity 应用后期处理效果。
- AfterImageEffects
- AfterEverything
- Unity 对渲染模式不是 Screen Space - Camera 的 UI 画布进行渲染。
LightEvent 执行顺序
在上面的“渲染阴影”阶段,对于每个投射阴影的光源,Unity 执行以下步骤:
- BeforeShadowMap
- BeforeShadowMapPass
- Unity 渲染当前通道的所有阴影投射器
- AfterShadowMapPass
- Unity 对每个通道重复最后三个步骤
- AfterShadowMap
- BeforeScreenSpaceMask
- Unity 将阴影贴图收集到屏幕空间缓冲区中并执行过滤 *AfterScreenSpaceMask
由3D建模学习工作室整理翻译,转载请注明出处!