Unity-使用命令緩沖區(qū)來(lái)擴(kuò)展內(nèi)置渲染管線
命令緩沖區(qū)可保存一組渲染命令。您可以指示 Unity 調(diào)度和執(zhí)行這些命令。
本頁(yè)包含有關(guān)在內(nèi)置渲染管線中使用命令緩沖區(qū)的信息。有關(guān)在可編程渲染管線中使用命令緩沖區(qū)的信息,請(qǐng)參閱在可編程渲染管線中調(diào)度和執(zhí)行渲染命令。
有關(guān)可以使用命令緩沖區(qū)執(zhí)行的命令的完整列表,請(qǐng)參閱?CommandBuffer API 文檔。請(qǐng)注意,一些命令僅在某些硬件上受支持。例如,與射線追蹤有關(guān)的命令僅在 DX12 中受支持。
立即執(zhí)行命令緩沖區(qū)
可以使用?Graphics.ExecuteCommandBuffer?API 立即執(zhí)行命令緩沖區(qū)。
調(diào)度命令緩沖區(qū)
在內(nèi)置渲染管線中,可以在渲染循環(huán)中的特定時(shí)間執(zhí)行命令緩沖區(qū)。為此,請(qǐng)將?Camera.AddCommandBuffer?API 與?CameraEvent 枚舉一起使用,并將?Light.AddCommandBuffer?API 與?LightEvent 枚舉一起使用。
例如,可以將命令緩沖區(qū)與?AfterGBuffer?CameraEvent 結(jié)合使用,從而將其他游戲?qū)ο箐秩镜窖舆t管線中(在管線處理所有不透明的游戲?qū)ο笾螅?/p>
CameraEvent 執(zhí)行順序
執(zhí)行順序取決于項(xiàng)目使用的渲染路徑。
延遲渲染路徑
BeforeGBuffer????Unity 渲染不透明幾何體。
AfterGBuffer????Unity 解析深度。
BeforeReflections????Unity 渲染默認(rèn)反射。Unity 渲染反射探針?lè)瓷洹?/p>
AfterReflections????Unity 將反射復(fù)制到 G 緩沖區(qū)的 Emissive 通道。
BeforeLighting????Unity 渲染陰影。請(qǐng)參閱?LightEvent 執(zhí)行順序。AfterLightingBeforeFinalPass????Unity 對(duì)最終通道進(jìn)行處理。AfterFinalPassBeforeForwardOpaque(僅當(dāng)存在無(wú)法以延遲方式渲染的不透明幾何體時(shí)調(diào)用)Unity 渲染無(wú)法以延遲方式渲染的不透明幾何體。
AfterForwardOpaque(僅當(dāng)存在無(wú)法以延遲方式渲染的不透明幾何體時(shí)調(diào)用)BeforeSkyboxUnity 渲染天空盒。
AfterSkyboxUnity 渲染光環(huán)。
BeforeImageEffectsOpaque如果使用?Post-processing Stack V2?包,則 Unity 會(huì)應(yīng)用僅限不透明的后期處理效果。
AfterImageEffectsOpaqueBeforeForwardAlphaUnity 會(huì)渲染透明幾何體以及具有?Screen Space - Camera?渲染模式的 UI 畫布。
AfterForwardAlphaBeforeHaloAndLensFlaresUnity 渲染鏡頭光暈。
AfterHaloAndLensFlaresBeforeImageEffects如果使用?Post-processing Stack V2?包,則 Unity 會(huì)應(yīng)用后期處理效果。
AfterImageEffectsAfterEverythingUnity 對(duì)渲染模式不是?Screen Space - Camera?的 UI 畫布進(jìn)行渲染。
前向渲染路徑
BeforeDepthTexture????Unity 渲染不透明幾何體的深度。
AfterDepthTextureBeforeDepthNormalsTexture????Unity 渲染不透明幾何體的深度法線。AfterDepthNormalsTexture????Unity 渲染陰影。請(qǐng)參閱?LightEvent 執(zhí)行順序。
BeforeForwardOpaque????Unity 渲染不透明幾何體。
AfterForwardOpaqueBeforeSkybox????Unity 渲染天空盒。
AfterSkybox????Unity 渲染光環(huán)。
BeforeImageEffectsOpaque如果使用?Post-processing Stack V2?包,則 Unity 會(huì)應(yīng)用僅限不透明的后期處理效果。
AfterImageEffectsOpaqueBeforeForwardAlphaUnity 會(huì)渲染透明幾何體以及具有?Screen Space - Camera?渲染模式的 UI 畫布。
AfterForwardAlphaBeforeHaloAndLensFlaresUnity 渲染鏡頭光暈。
AfterHaloAndLensFlaresBeforeImageEffects如果使用?Post-processing Stack V2?包,則 Unity 會(huì)應(yīng)用后期處理效果。AfterImageEffectsAfterEverythingUnity 對(duì)渲染模式為?Screen Space - Camera?的 UI 畫布進(jìn)行渲染。
LightEvent 執(zhí)行順序
在上面的“渲染陰影”階段,對(duì)于每個(gè)投射陰影的光源,Unity 執(zhí)行以下步驟:
BeforeShadowMapBeforeShadowMapPass
Unity 渲染當(dāng)前通道的所有陰影投射物
AfterShadowMapPass
對(duì)每個(gè)通道進(jìn)行重復(fù)AfterShadowMapBeforeScreenSpaceMaskUnity 將陰影貼圖收集到屏幕空間緩沖區(qū)中并執(zhí)行過(guò)濾AfterScreenSpaceMask
其他資源
Unity 博客文章擴(kuò)展 Unity 5 渲染管線:命令緩沖區(qū) (Extending Unity 5 rendering pipeline: Command Buffers)?介紹了內(nèi)置渲染管線中的命令緩沖區(qū),并包含示例項(xiàng)目和示例代碼。這篇文章與 Unity 的舊版本有關(guān),但原理相同。