可变速率着色
可变速率着色(Variable Rate Shading, 简称VRS)是GPU硬件提供给开发人员的一种技术,它可以让开发人员有选择地控制复杂片段着色器调用的频率,从而减少在图形渲染中不必要的着色成本。
可变速率着色 (Variable Rate Shading)
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是一种技术,用于通过对每个像素处理多个采样来减少锯齿边缘。将MSAA和VRS结合时,每个片段着色器将其输出颜色扩散到粗像素区域的所有采样中。