Version: 2019.2
计算着色器
GPU 实例化

图形命令缓冲区

命令缓冲区可用于扩展 Unity 的内置渲染管线。命令缓冲区包含一系列渲染命令,这些命令在摄像机渲染期间的各个点执行。要在 Unity 的内置渲染管线中指定要执行命令缓冲区的位置,请使用 CameraEvent 枚举

例如,可以将命令缓冲区与 AfterGBuffer CameraEvent 结合使用,从而将其他游戏对象渲染到延迟管线中(在管线处理所有不透明的游戏对象之后)。

下面是摄像机如何使用前向或延迟管线在 Unity 中渲染场景的高度概括性描述。

  • 黑框表示内部 Unity 流程。
  • 蓝框表示 CameraEvent,您可以在其中添加命令缓冲区。

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 缓冲区纹理而不是累积光照。 此技术将每个贴花作为一个盒体处理,并且仅影响盒体体积内的几何体。

计算着色器
GPU 实例化