cullingResults | 指定要绘制哪组可见对象(通常从 Cull 获取)。 |
drawingSettings | 指定绘制 GameObjects 的方式。 |
filteringSettings | 指定渲染管线应如何在场景中进一步过滤渲染器。 |
stateBlock | 指定要重载渲染状态的哪些部分。 |
tagName | Specifies the name of the Pass Tag or SubShader Tag that identifies renderers whose render state will be overridden. When this is not specified, the default value is "RenderType". |
isPassTagName | If set to true, tagName specifies a Pass Tag. If set to false, tagName specifies a SubShader Tag. When this is not specified, the default value is false. |
tagValues | Specifies the values of the Pass Tag or SubShader Tag that identifies renderers whose render state will be overridden. |
renderTypes | 指定重写其渲染状态的渲染类型。 |
stateBlocks | 指定要针对特定渲染类型重载渲染状态的哪些部分。 |
调度可见 GameObjects 的子通道的开头。
在 ScriptableRenderContext.DrawRenderers 调用过程中,ScriptableRenderContext 会将绘制参数注册到自己要执行的命令内部列表中。
这些命令的实际执行在 ScriptableRenderContext.Submit 期间执行。
如果提供状态块,则将针对渲染管线在函数调用期间绘制的所有 GameObjects 重写渲染状态。如果提供 RenderTypes 数组,则将针对以下 GameObjects 重写渲染状态:其中子着色器的 RenderType 与数组中的某个值匹配。如果有多个映射匹配,则 Unity 使用第一个。renderType 设置为 null 的映射与所有值都匹配。
如果绘制调用取决于在 CommandBuffer 中指定的管线的状态,请确保在 DrawRenderers 之前调用 ExecuteCommandBuffer。
以下代码示例说明按错误顺序提交命令的情况;接下来说明行为符合预期的情况:
using UnityEngine; using UnityEngine.Rendering;
internal class ExecuteCommandBufferExample { // TODO: replace with actual settings ScriptableRenderContext scriptableRenderContext; DrawingSettings drawingSettings; CullingResults cullingResults = new CullingResults(); FilteringSettings filteringSettings = new FilteringSettings();
Matrix4x4 myViewMatrix = Matrix4x4.Scale(new Vector3(2f, 2f, 2f));
public void DrawRenderersExampleIncorrect() { CommandBuffer myCommandBuffer = new CommandBuffer();
myCommandBuffer.SetViewMatrix(myViewMatrix);
scriptableRenderContext.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings); // NO! When scriptableRenderContext submits the DrawRenderers command, it will not know about myViewMatrix :(
scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer); myCommandBuffer.Clear(); }
public void DrawRenderersExampleBetter() { CommandBuffer myCommandBuffer = new CommandBuffer();
myCommandBuffer.SetViewMatrix(myViewMatrix);
scriptableRenderContext.ExecuteCommandBuffer(myCommandBuffer); myCommandBuffer.Clear();
scriptableRenderContext.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings); // OK! During next scriptableRenderContext.Submit() call, scriptableRenderContext will set myViewMatrix *before* drawing the renderers. } }