目录: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的地方。
查看 CommandBuffer 类和CameraEvent 枚举来了解更多信息。你也可以使用Command Buffers来替代一些图像效果(image effects,这里一般指的是后效)的处理。
Example code代码示例
这里有个使用Command Buffers来演示一些效果的Unity项目:RenderingCommandBuffers.zip。
Blurry refractions毛玻璃折射
这个场景演示的是可以用于实现毛玻璃。
在Unity渲染了不透明对象与skybox天空和后,将当前的图像内容复制到一个临时的RT,并模糊处理它。然后再通过玻璃的shader来采样这个模糊的图像,并使用Normal Map(法线贴图)来偏移UV从而到达折射效果。获取当前图像内容的方式类似:Shader GrabPass。
(关于GrabPass内容,也可以参考我之前写的一篇:Unity Shader GrabPass 使用注意的问题)
Custom area lights in the deferred pipeline在延迟渲染管线中自定义区域光
这场景展示的是,你可以给延迟渲染中添加圆形和管状形的区域光。
Unity使用处理一般的延迟光照渲染的pass时,为每一个自定义的光照绘制一个球体。每个一个球体使用Shader来计算光照并添加到光照缓存中(light buffer)。
Decals in the deferred pipeline在延迟管线中实现贴花(Decals)
这个场景展示处理延迟渲染的贴花(Decals)。 Unity处理G-buffer时,将绘制每一个贴花(Decals)到G-buffer内容中。类似Unity处理延迟管线的光照处理,但他修改的是G-buffer纹理,而不是累计光照缓存。
这种贴花方式只处理几何体与立方体有交集的。
关于CommandBuffer也可以立刻执行:Graphics.ExecuteCommandBuffer。