欢迎光临散文网 会员登陆 & 注册

Unity-使用命令缓冲区来扩展内置渲染管线

2021-03-15 09:31 作者:unity_某某师_高锦锦  | 我要投稿

命令缓冲区可保存一组渲染命令。您可以指示 Unity 调度和执行这些命令。

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

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

立即执行命令缓冲区

可以使用 Graphics.ExecuteCommandBuffer API 立即执行命令缓冲区。

调度命令缓冲区

在内置渲染管线中,可以在渲染循环中的特定时间执行命令缓冲区。为此,请将 Camera.AddCommandBuffer API 与 CameraEvent 枚举一起使用,并将 Light.AddCommandBuffer API 与 LightEvent 枚举一起使用。

例如,可以将命令缓冲区与 AfterGBuffer CameraEvent 结合使用,从而将其他游戏对象渲染到延迟管线中(在管线处理所有不透明的游戏对象之后)。

CameraEvent 执行顺序

执行顺序取决于项目使用的渲染路径。

延迟渲染路径

BeforeGBuffer    Unity 渲染不透明几何体。

AfterGBuffer    Unity 解析深度。

BeforeReflections    Unity 渲染默认反射。Unity 渲染反射探针反射。

AfterReflections    Unity 将反射复制到 G 缓冲区的 Emissive 通道。

BeforeLighting    Unity 渲染阴影。请参阅 LightEvent 执行顺序。AfterLightingBeforeFinalPass    Unity 对最终通道进行处理。AfterFinalPassBeforeForwardOpaque(仅当存在无法以延迟方式渲染的不透明几何体时调用)Unity 渲染无法以延迟方式渲染的不透明几何体。

AfterForwardOpaque(仅当存在无法以延迟方式渲染的不透明几何体时调用)BeforeSkyboxUnity 渲染天空盒。

AfterSkyboxUnity 渲染光环。

BeforeImageEffectsOpaque如果使用 Post-processing Stack V2 包,则 Unity 会应用仅限不透明的后期处理效果。

AfterImageEffectsOpaqueBeforeForwardAlphaUnity 会渲染透明几何体以及具有 Screen Space - Camera 渲染模式的 UI 画布。

AfterForwardAlphaBeforeHaloAndLensFlaresUnity 渲染镜头光晕。

AfterHaloAndLensFlaresBeforeImageEffects如果使用 Post-processing Stack V2 包,则 Unity 会应用后期处理效果。

AfterImageEffectsAfterEverythingUnity 对渲染模式不是 Screen Space - Camera 的 UI 画布进行渲染。

前向渲染路径

BeforeDepthTexture    Unity 渲染不透明几何体的深度。

AfterDepthTextureBeforeDepthNormalsTexture    Unity 渲染不透明几何体的深度法线。AfterDepthNormalsTexture    Unity 渲染阴影。请参阅 LightEvent 执行顺序。

BeforeForwardOpaque    Unity 渲染不透明几何体。

AfterForwardOpaqueBeforeSkybox    Unity 渲染天空盒。

AfterSkybox    Unity 渲染光环。

BeforeImageEffectsOpaque如果使用 Post-processing Stack V2 包,则 Unity 会应用仅限不透明的后期处理效果。

AfterImageEffectsOpaqueBeforeForwardAlphaUnity 会渲染透明几何体以及具有 Screen Space - Camera 渲染模式的 UI 画布。

AfterForwardAlphaBeforeHaloAndLensFlaresUnity 渲染镜头光晕。

AfterHaloAndLensFlaresBeforeImageEffects如果使用 Post-processing Stack V2 包,则 Unity 会应用后期处理效果。AfterImageEffectsAfterEverythingUnity 对渲染模式为 Screen Space - Camera 的 UI 画布进行渲染。


LightEvent 执行顺序

在上面的“渲染阴影”阶段,对于每个投射阴影的光源,Unity 执行以下步骤:

BeforeShadowMapBeforeShadowMapPass

Unity 渲染当前通道的所有阴影投射物

AfterShadowMapPass

对每个通道进行重复AfterShadowMapBeforeScreenSpaceMaskUnity 将阴影贴图收集到屏幕空间缓冲区中并执行过滤AfterScreenSpaceMask

其他资源

  • Unity 博客文章扩展 Unity 5 渲染管线:命令缓冲区 (Extending Unity 5 rendering pipeline: Command Buffers) 介绍了内置渲染管线中的命令缓冲区,并包含示例项目和示例代码。这篇文章与 Unity 的旧版本有关,但原理相同。


Unity-使用命令缓冲区来扩展内置渲染管线的评论 (共 条)

分享到微博请遵守国家法律