index | 随机写入目标的索引。 |
uav | 设置为写入目标的缓冲或纹理。 |
preserveCounterValue | 是否保持追加/消耗计数器值不变。 |
为 Shader Model 4.5 级别像素着色器设置随机写入目标。
Shader Model 4.5 及更高级别的像素着色器可以写入某些纹理和缓冲的任意位置,这些位置在 UsingDX11GL3Features 中称为“无序访问视图”(UAV)。这些“随机写入”目标的设置方式类似于设置多个渲染目标的方式。你可以使用带有 enableRandomWrite
标志的 RenderTexture 或使用 ComputeBuffer 作为目标。
通过添加已使用的渲染目标的数量来偏移传给 SetRandomWriteTarget
的索引值。该值可能与着色器中设置的固定寄存器索引不太一致,因为 UAV 索引值在不同的平台之间可能有所不同。有关这些差异的详情,请参阅特定平台的文档。在 DX11 上,第一个有效的 UAV 索引是活动渲染目标的数量,因此在只有一个渲染目标的常见情况下,UAV 索引将从 1 开始。使用自动转换的 HLSL 着色器的平台将匹配此行为,但是,使用手工编写的 GLSL 着色器时,索引将匹配绑定。
设置 ComputeBuffer 时,preserveCounterValue
参数表示是否保持计数器值不变或将其重置为 0(默认行为)。
目标保持设置,直到您手动使用 ClearRandomWriteTargets 清除它们。最佳做法是在渲染完成后调用 ClearRandomWriteTargets。如果您不这样做,可能会出现渲染问题,并且一些 Unity 内置渲染通道可能会崩溃。
其他资源:RenderTexture.enableRandomWrite、ComputeBuffer、ComputeBuffer.SetCounterValue、UsingDX11GL3Features。