可变速率着色

可变速率着色(Variable Rate Shading, 简称VRS)是GPU硬件提供给开发人员的一种技术,它可以让开发人员有选择地控制复杂片段着色器调用的频率,从而减少在图形渲染中不必要的着色成本。

 

可变速率着色 (Variable Rate Shading)

对三角片进行光栅化 (rasterization) 和着色

 

VRS可以使片段着色器着色一个以上的像素。当开发人员将2x2 VRS应用于三角形时,每个片段着色器调用最多可以在2x2区域内着色4个像素,因此片段着色器调用次数从31次大大减少到11次。

 

要注意的是,VRS并不消除光栅 (rasterized) 像素本身,而是有选择地降低细节较少的区域的着色率。因此,光栅像素的边缘仍然保留,以保持场景中地形边缘的质量。

 

使用方式

开发人员可以在三个不同的粒度上控制着色率:

  • 管线着色率 (Pipeline shading rate)
  • 根据距离、参数等在对象/实体/材质上控制着色率
  • 示例用法:无纹理表面
  • 细节请参阅第 2.3
  • 图元着色率 (Primitive shading rate)
  • 基于顶点着色器控制着色率
  • 示例用法:地形、植物
  • 细节请参阅第 2.4
  • 附件着色率 (Attachment shading rate)
  • 在帧缓冲器上使用专门的附件控制帧缓冲器的每一个区域的着色率
  • 示例用法:动态模糊
  • 细节请参阅第 2.5

 

GPU 可以从三种着色率和采样率的组合中产生有效的着色率。因此,开发人员可以从粗糙粒度(附件着色率)到细粒度(图元着色率)控制着色率,而硬件可以使用结合器 (combiner) 自动求得有效着色率(如下图所示),使用细节可以参阅第 2.3.3 节。

 

硬件将 3 种着色率结合为一个

 

值得注意的是,VRS与多重采样抗锯齿 (MSAA) 高度兼容。 MSAA是一种技术,用于通过对每个像素处理多个采样来减少锯齿边缘。将MSAAVRS结合时,每个片段着色器将其输出颜色扩散到粗像素区域的所有采样中。