光栅器顺序视图

像素着色器代码可通过光栅器有序视图 (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 相关。 注意,以下方法、结构和帮助程序类引用了光栅化器:

Direct3D 11.3 功能

Shader Model 5.1(着色器模型 5.1)