光栅器顺序视图
像素着色器代码可通过光栅器有序视图 (ROV) 使用声明来标记 UAV 绑定,该声明改变了 UAV 图形管道结果顺序的正常要求。 这可确保顺序无关透明度 (OIT) 算法能够正常工作,多个透明对象在视图中彼此对齐时,可以提供更好的渲染效果。
概述
标准图形管道在正确组合包含透明度的多个纹理时可能会遇到困难。 铁丝网、烟雾、火、植物和彩色玻璃等物体使用透明度来达到预期效果。 当包含透明度的多个纹理彼此成一条线时(例如,包含植被的玻璃建筑物前面有栅栏,而栅栏前面有烟雾),将会出现问题。 光栅器有序视图 (ROV) 使基础 OIT 算法能够使用硬件的功能来尝试正确解析透明度顺序。 透明度由像素着色器处理。
像素着色器代码可通过光栅器有序视图 (ROV) 使用声明来标记 UAV 绑定,该声明改变了 UAV 图形管道结果顺序的正常要求。
ROV 确保任何一对重叠像素着色器调用的 UAV 访问顺序。 在此情况下,“重叠”是指调用由相同的绘制调用生成,且在像素频率执行模式下共享同一像素坐标,在采样频率执行模式下共享同一像素和采样坐标。
像素着色器调用的重叠 ROV 访问的执行顺序与提交几何图形的顺序相同。 这意味着,对于重叠的像素着色器调用而言,像素着色器调用所执行的 ROV 写入必须可由后续调用读取,且不能影响前一次调用的读取。 像素着色器调用所执行的 ROV 读取必须反射前一次调用的写入,且不能反射后续调用的写入。 这对 UAV 很重要,因为会将其从输出不变性保证中显式省略,而输出不变性保证通常按照图形管道结果的固定顺序设置。
实现详细信息
(ROV) 的光栅器有序视图使用以下新的高级着色器语言 (HLSL) 对象进行声明,并且仅适用于像素着色器:
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
按使用其他 UAV 对象的方式来使用这些对象(如 RWBuffer
等)。
API 摘要
ROV 是仅适用于 HLSL 的结构,该结构将不同的行为语义应用到 UAV。 与 UAV 相关的所有 API 也与 ROV 相关。 注意,以下方法、结构和帮助程序类引用了光栅化器:
- D3D11_RASTERIZER_DESC2 :结构包含光栅器说明,并指出用于创建光栅器说明的CD3D12_RASTERIZER_DESC2帮助程序类。
-
D3D11_FEATURE_DATA_D3D11_OPTIONS2 :结构,包含布尔
ROVsSupported
值 ,指示支持。 - ID3D11Device::CheckFeatureSupport :方法,用于访问支持的功能。
相关主题
-
Shader Model 5.1(着色器模型 5.1)