命令缓冲区可用于扩展 Unity 的内置渲染管线。命令缓冲区包含一系列渲染命令,这些命令在摄像机渲染期间的各个点执行。要在 Unity 的内置渲染管线中指定要执行命令缓冲区的位置,请使用 CameraEvent 枚举。
例如,可以将命令缓冲区与 AfterGBuffer CameraEvent 结合使用,从而将其他游戏对象渲染到延迟管线中(在管线处理所有不透明的游戏对象之后)。
下面是摄像机如何使用前向或延迟管线在 Unity 中渲染场景的高度概括性描述。
See the CommandBuffer Class and the CameraEvent Enum for more information. You can also use Command buffers in conjunction with, or as a replacement for, image effects.
这是一个示例 Unity 项目,演示了可以使用以下命令缓冲区创建的一些效果: RenderingCommandBuffers.zip。
此场景演示了一种可用于创建模糊折射的技术。 Unity 渲染不透明对象和天空盒后,此技术将当前图像复制到临时渲染目标并使其变模糊。然后,玻璃着色器对此模糊图像进行采样,并使用法线贴图来偏移 UV 坐标以模拟折射。 此技术类似于着色器 GrabPass。
此场景显示了一种可用于创建自定义延迟球形和管形光源的技术。 Unity 处理常规延迟光源通道后,此技术为每个自定义光源绘制一个球体。然后,每个球体使用着色器来计算光照并将其添加到光照缓冲区。
此场景显示了处理延迟贴花的基本技术。 Unity 处理 G 缓冲区后,此技术绘制每个贴花并修改 G 缓冲区内容。此技术的工作方式与 Unity 在延迟管线中处理光源的方式类似,但此技术会修改 G 缓冲区纹理而不是累积光照。 此技术将每个贴花作为一个盒体处理,并且仅影响盒体体积内的几何体。