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