目录
前言
CommandBuffer是用来存储渲染绘制命令的缓冲区
CommandBuffer可以设置渲染目标或者绘制网格,也可以在渲染队列中执行自定义的RenderPass
常用API:DrawMesh(),DrawRender(),Blit(),GetTemporaryRT(),Set***()
参考:3720_command buffer20201207(未完成)(1)
Rendering.CommandBuffer - Unity 脚本 API

P1
为了更好扩展unity的渲染管线,unity提供了CommandBuffer,让你根据自己的需求,在不同的渲染阶段插入绘制指令,例如插入DrawRenderer,DrawMesh,DrawProcedure,绘制的时候也可以根据需要设置绘制时材质(Material)的MaterialPropertyBlock更改当前绘制的材质的属性。
相机渲染顺序


P2
Blit()
public void Blit (Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice);
| source | 要从中进行 blit 操作的源纹理或渲染目标。 |
| dest | 要作为 blit 操作目标的目标。 |
| mat | 要使用的材质。 |
| pass | 要使用的着色器通道(默认为 -1,表示“所有通道”)。 |
| scale | 应用于源纹理坐标的缩放。 |
| offset | 应用于源纹理坐标的偏移。 |
| sourceDepthSlice | 要从中执行 blit 操作的纹理数组源切片。 |
| destDepthSlice | 要对其执行 blit 操作的纹理数组目标切片。 |
DrawMesh()
public void DrawMesh (Mesh mesh, Matrix4x4 matrix, Material material, int submeshIndex, int shaderPass, MaterialPropertyBlock properties);
| mesh | 要绘制的网格。 |
| matrix | 要使用的变换矩阵。 |
| material | 要使用的材质。 |
| submeshIndex | 要渲染网格的哪个子集。 |
| shaderPass | 要使用着色器的哪个通道(默认为 -1,表示渲染所有通道)。 |
| properties | 在绘制此网格之前应用于材质的其他材质属性。请参阅 MaterialPropertyBlock。 |
DrawRenderer()
public void DrawRenderer (Renderer renderer, Material material, int submeshIndex, int shaderPass);
| renderer | 要绘制的渲染器。 |
| material | 要使用的材质。 |
| submeshIndex | 要渲染网格的哪个子集。 |
| shaderPass | 要使用着色器的哪个通道(默认为 -1,表示渲染所有通道)。 |
DrawMeshInstanced()
public void DrawMeshInstanced (Mesh mesh, int submeshIndex, Material material, int shaderPass, Matrix4x4[] matrices, int count, MaterialPropertyBlock properties);
| mesh | 要绘制的 Mesh。 |
| submeshIndex | 要绘制网格的哪个子集。这只适用于由若干种材质构成的网格。 |
| material | 要使用的 Material。 |
| shaderPass | 要使用着色器的哪个通道,或选择 -1,表示渲染所有通道。 |
| matrices | 对象变换矩阵的数组。 |
| count | 要绘制的实例数。 |
| properties | 在绘制此网格之前应用于材质的其他材质属性。请参阅 MaterialPropertyBlock。 |
如果 Material.enableInstancing 为 false,该命令不会立即失败并抛出异常,但如果检测到此类情况,则会记录错误并在每次执行命令时跳过渲染。
如果当前平台不支持此 API(即,如果 GPU 实例化不可用),则会抛出 InvalidOperationException。请参阅 SystemInfo.supportsInstancing。
GetTemporaryRT()
public void GetTemporaryRT (int nameID, int width, int height, int depthBuffer, FilterMode filter, RenderTextureFormat format, RenderTextureReadWrite readWrite, int antiAliasing, bool enableRandomWrite);
| nameID | 此纹理的着色器属性名称。 |
| width | 像素宽度,或为 -1,表示“摄像机像素宽度”。 |
| height | 像素高度,或为 -1,表示“摄像机像素高度”。 |
| depthBuffer | 深度缓冲区位(0、16 或 24)。 |
| filter | 纹理过滤模式(默认为 Point)。 |
| format | 渲染纹理的格式(默认为 ARGB32)。 |
| readWrite | 颜色空间转换模式。 |
| antiAliasing | 抗锯齿(默认为无抗锯齿)。 |
| enableRandomWrite | 是否启用对纹理的随机写入访问(默认为 false)。 |
| desc | 创建临时 RenderTexture 时,可将此 RenderTextureDescriptor 用于设置。 |
| memorylessMode | 渲染纹理无内存模式。 |
SetRenderTarget()
public void SetRenderTarget (Rendering.RenderTargetIdentifier rt, Rendering.RenderBufferLoadAction loadAction, Rendering.RenderBufferStoreAction storeAction);
| rt | 为颜色和深度缓冲区设置的渲染目标。 |
| color | 设置为颜色缓冲区的渲染目标。 |
| colors | 设置为颜色缓冲区的渲染目标 (MRT)。 |
| depth | 设置为深度缓冲区的渲染目标。 |
| mipLevel | 渲染目标的要达到的 Mip 级别。 |
| cubemapFace | 立方体贴图渲染目标要渲染到的立方体贴图面。 |
| depthSlice | 要设置的 3D 或数组渲染目标的切片。 |
| loadAction | 用于颜色和深度/模板缓冲区的加载操作。 |
| storeAction | 用于颜色和深度/模板缓冲区的存储操作。 |
| colorLoadAction | 用于颜色缓冲区的加载操作。 |
| colorStoreAction | 用于颜色缓冲区的存储操作。 |
| depthLoadAction | 用于深度/模板缓冲区的加载操作。 |
| depthStoreAction | 用于深度/模板缓冲区的存储操作。 |
本文介绍了Unity中的CommandBuffer,如何使用它扩展渲染管线,包括Blit、DrawMesh、DrawRenderer等API的用法,以及MaterialPropertyBlock和RenderTexture的管理。
4万+

被折叠的 条评论
为什么被折叠?



