本文已参加「新人创造礼」活动,一起开启创造之路。

本篇为Unity官方文档的摘抄集合,为方便后续翻看。

包括有关在内置烘托管线中运用 CommandBuffer 的信息。有关在烘托管线中基于可编程烘托管线运用 CommandBuffer 的信息,请参阅在可编程烘托管线中调度和履行烘托指令。

1、CommandBuffer 基础知识

CommandBuffer保存烘托指令列表(例如设置烘托方针或制作给定网格)。能够指示 Unity 在内置烘托管线中的各个点组织和履行这些指令,因而,您能够自定义和扩展 Unity 的烘托功用。

Unity-TA 成长之路(三)内置渲染管线-官方篇 - 使用 CommandBuffer 来扩展内置渲染管线

能够运用Graphics.ExecuteCommandBufferAPI 立即履行 CommandBuffer,也能够进行组织,让它们在烘托管线中的给定点履行。要组织它们,请运用Camera.AddCommandBufferAPI 与CameraEvent 枚举,以及Light.AddCommandBufferAPI 与LightEvent 枚举。要查看 Unity 何时履行以这种方法组织的 CommandBuffer,请参阅 CameraEvent 和 LightEvent 的履行次序。

有关能够运用 CommandBuffer 履行的指令的完好列表,请参阅 CommandBuffer API 文档。请注意,一些指令仅在某些硬件上受支持。例如,与光线追寻有关的指令仅在 DX12 中受支持。

2、Command Buffer 示例

Unity-TA 成长之路(三)内置渲染管线-官方篇 - 使用 CommandBuffer 来扩展内置渲染管线

Unity 博客文章扩展 Unity 5 烘托管线:CommandBuffer 介绍了内置烘托管线中的 CommandBuffer,并包括示例项目和示例代码。它介绍如何运用 CommandBuffer 来实现几种不同的作用,并包括一个示例项目和示例代码。项目是为 Unity 的旧版本创立的,但原理相同。

3、CameraEvent 事情的履行次序

CameraEvents 履行次序取决于项目运用的烘托途径。

3.1 推迟烘托途径

  • 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 画布进行烘托。

3.2 前向烘托途径

  • 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 画布进行烘托。

4、LightEvent 履行次序

在上面的“烘托暗影”阶段,对于每个投射暗影的光源,Unity 履行以下过程:

  • BeforeShadowMap

  • BeforeShadowMapPass

  • Unity 烘托当前通道的一切暗影投射器

  • AfterShadowMapPass

  • Unity 对每个通道重复最终三个过程

  • AfterShadowMap

  • BeforeScreenSpaceMask

  • Unity 将暗影贴图收集到屏幕空间缓冲区中并履行过滤 *AfterScreenSpaceMask