CommandBuffer

本文介绍了Unity中的CommandBuffer,如何使用它扩展渲染管线,包括Blit、DrawMesh、DrawRenderer等API的用法,以及MaterialPropertyBlock和RenderTexture的管理。
摘要由CSDN通过智能技术生成

目录

前言

P1

P2


前言

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用于深度/模板缓冲区的存储操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值