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

Unity3D:使用 CommandBuffer 来扩展内置渲染管线
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

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

本页包含有关在内置渲染管线中使用 CommandBuffer 的信息。有关在渲染管线中基于可编程渲染管线使用 CommandBuffer 的信息,请参阅在可编程渲染管线中调度和执行渲染命令。

CommandBuffer 基础知识

CommandBuffer 保存渲染命令列表(例如设置渲染目标或绘制给定网格)。您可以指示 Unity 在内置渲染管线中的各个点安排和执行这些命令,因此,您可以自定义和扩展 Unity 的渲染功能。

使用 CommandBuffer 进行模糊折射。
使用 CommandBuffer 进行模糊折射。

可以使用 Graphics.ExecuteCommandBuffer API 立即执行 CommandBuffer,也可以进行安排,让它们在渲染管线中的给定点执行。要安排它们,请使用 Camera.AddCommandBuffer API 与CameraEvent 枚举,以及 Light.AddCommandBuffer API 与 LightEvent 枚举。要查看 Unity 何时执行以这种方式安排的 CommandBuffer,请参阅 CameraEvent 和 LightEvent 的执行顺序。

有关可以使用 CommandBuffer 执行的命令的完整列表,请参阅 CommandBuffer API 文档。请注意,一些命令仅在某些硬件上受支持。例如,与光线追踪有关的命令仅在 DX12 中受支持。

Command Buffer 示例

使用 Command Buffers 贴花。
使用 Command Buffers 贴花。

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建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D:顶点光照渲染路径 (mvrlink.com)

下一篇:Unity3D:内置渲染管线的硬件要求 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号