Unity Graphics Command Buffers 图形指令缓存

目录:Unity Graphics - 知识点目录(先占位,后续持续更新)
原文:Graphics Command Buffers。
版本:2019.1

Graphics Command Buffers

图形指令缓存

Command Buffers 允许你扩展 Unity 内置的渲染管线(Render pipeline)。Command Buffer 可持有一些渲染指令,这些指令可以在相机的渲染(Camera Rendering)的某个点,可以执行。要将这些Command Buffer指定在Unity的内置管线中的某个点至此那个,可以使用:CameraEvent.enum。

例如,你可以使用 Command Buffer带上 AfterGBuffer 的 CameraEvent(相机事件)设置,让额外的GameObject 渲染到 Deffered pipeline(延迟渲染管线),在管线的所有不透明的GameObjects都执行完后。

下图,是从一个高层面去看Unity的Camera如果渲染一个场景,使用Forward(正向渲染)或是Deferred(延迟渲染)管线。

  • 黑色框表示Unity内置处理。
  • 蓝色框表示可以使用CameraEvent来添加Command Buffers的地方。
    Unity Graphics Command Buffers 图形指令缓存_第1张图片

查看 CommandBuffer 类和CameraEvent 枚举来了解更多信息。你也可以使用Command Buffers来替代一些图像效果(image effects,这里一般指的是后效)的处理。

Example code

代码示例

这里有个使用Command Buffers来演示一些效果的Unity项目:RenderingCommandBuffers.zip。

Blurry refractions

毛玻璃折射

这个场景演示的是可以用于实现毛玻璃。
Unity Graphics Command Buffers 图形指令缓存_第2张图片

在Unity渲染了不透明对象与skybox天空和后,将当前的图像内容复制到一个临时的RT,并模糊处理它。然后再通过玻璃的shader来采样这个模糊的图像,并使用Normal Map(法线贴图)来偏移UV从而到达折射效果。获取当前图像内容的方式类似:Shader GrabPass。

(关于GrabPass内容,也可以参考我之前写的一篇:Unity Shader GrabPass 使用注意的问题)

Custom area lights in the deferred pipeline

在延迟渲染管线中自定义区域光

这场景展示的是,你可以给延迟渲染中添加圆形和管状形的区域光。
Unity Graphics Command Buffers 图形指令缓存_第3张图片

Unity使用处理一般的延迟光照渲染的pass时,为每一个自定义的光照绘制一个球体。每个一个球体使用Shader来计算光照并添加到光照缓存中(light buffer)。

Decals in the deferred pipeline

在延迟管线中实现贴花(Decals)

这个场景展示处理延迟渲染的贴花(Decals)。
Unity Graphics Command Buffers 图形指令缓存_第4张图片
Unity处理G-buffer时,将绘制每一个贴花(Decals)到G-buffer内容中。类似Unity处理延迟管线的光照处理,但他修改的是G-buffer纹理,而不是累计光照缓存。
Unity Graphics Command Buffers 图形指令缓存_第5张图片
这种贴花方式只处理几何体与立方体有交集的。


关于CommandBuffer也可以立刻执行:Graphics.ExecuteCommandBuffer。

你可能感兴趣的:(unity)