Unity-在可編程渲染管線中調(diào)度和執(zhí)行渲染命令
在可編程渲染管線?(SRP) 中,應(yīng)使用 C# 腳本來配置和調(diào)度渲染命令。然后,需要告訴 Unity 的低級圖形架構(gòu)執(zhí)行這些命令,此過程會將指令發(fā)送到圖形 API。
主要做法是使用可編程渲染上下文,但是您也可以立即執(zhí)行命令緩沖區(qū)。
使用可編程渲染上下文
可編程渲染上下文用作 C# 代碼與 Unity 的低級圖形代碼之間的接口。在 SRP 中會使用延遲執(zhí)行的方式來實現(xiàn)渲染;您需要使用可編程渲染上下文來構(gòu)建渲染命令列表,然后告訴 Unity 執(zhí)行這些命令。Unity 的低級圖形架構(gòu)隨后將指令發(fā)送到圖形 API。
要調(diào)度渲染命令,您可以: * 使用?ScriptableRenderContext.ExecuteCommandBuffer(),將?CommandBuffer?傳遞到可編程渲染上下文 * 對可編程渲染上下文進行直接 API 調(diào)用(例如?ScriptableRenderContext.Cull()?或?ScriptableRenderContext.DrawRenderers())
為了告訴 Unity 執(zhí)行您所調(diào)度的命令,請調(diào)用?ScriptableRenderContext.Submit()。請注意,使用的是命令緩沖區(qū)還是通過調(diào)用 API 來調(diào)度命令,這并不重要;Unity 以相同方式在可編程渲染上下文中調(diào)度所有渲染命令,并且在調(diào)用?Submit()
?之前不會執(zhí)行任何這些命令。
以下示例代碼演示了如何使用命令緩沖區(qū)來調(diào)度和執(zhí)行命令以清除當(dāng)前渲染目標(biāo)。
立即執(zhí)行命令緩沖區(qū)
可通過調(diào)用?Graphics.ExecuteCommandBuffer()?來立即執(zhí)行命令緩沖區(qū),而不使用可編程渲染上下文。對該 API 的調(diào)用發(fā)生在渲染管線之外。
其他信息
有關(guān)可以使用命令緩沖區(qū)來調(diào)度的命令的更多信息,請參閱?Command Buffer API 文檔。