本文已参加「新人创造礼」活动,一起开启创造之路。
本篇为Unity官方文档的摘抄集合,为方便后续翻看。
包括有关在内置烘托管线中运用 CommandBuffer 的信息。有关在烘托管线中基于可编程烘托管线运用 CommandBuffer 的信息,请参阅在可编程烘托管线中调度和履行烘托指令。
1、CommandBuffer 基础知识
CommandBuffer保存烘托指令列表(例如设置烘托方针或制作给定网格)。能够指示 Unity 在内置烘托管线中的各个点组织和履行这些指令,因而,您能够自定义和扩展 Unity 的烘托功用。
能够运用Graphics.ExecuteCommandBufferAPI 立即履行 CommandBuffer,也能够进行组织,让它们在烘托管线中的给定点履行。要组织它们,请运用Camera.AddCommandBufferAPI 与CameraEvent 枚举,以及Light.AddCommandBufferAPI 与LightEvent 枚举。要查看 Unity 何时履行以这种方法组织的 CommandBuffer,请参阅 CameraEvent 和 LightEvent 的履行次序。
有关能够运用 CommandBuffer 履行的指令的完好列表,请参阅 CommandBuffer API 文档。请注意,一些指令仅在某些硬件上受支持。例如,与光线追寻有关的指令仅在 DX12 中受支持。
2、Command Buffer 示例
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