英伟达详细介绍可变速超级采样VRSS,大大提升VR体验
以更少的处理能力在注视点区域提供更高的清晰度。
(映维网 2020年01月28日)虚拟现实行业正在迎来新一轮的硬件迭代,更高分辨率的头显和更优性能的光学组建成为了厂商的重要关注点。软件方面同样出现了类似的情况,一波强调流畅VR体验的应用正在涌向终端消费者。
利用图灵架构,英伟达显卡能够以原生分辨率提供VR体验所需的性能。为了进一步提升图像清晰度,英伟达在CES 2020大会期间发布了“可变速率超级采样(Variable Rate Supersamplin;VRSS)功能。
日前,英伟达资深软件工程师DeepChand Palswamy和资深系统软件工程师Swaroop Bhonde撰文对其进行了介绍,下面是映维网的具体整理:
可变速率超级采样(VRSS)扩展了图灵架构的可变速率着色(Variable Rate Shading;VRS)功能,它可以通过执行选择性超级采样来改善图像质量。VRSS仅在GPU周期可用时开启,但你可以选择地进行启用。无需应用开发者集成,这项功能可完全在英伟达显示驱动中处理。
1. 背景
1.1 超级采样
SSAA(超级采样抗锯齿)是一种早期的抗锯齿方式。具体来说,先把图像映射到缓存并把它放大,再用超级采样对放大后的图像像素进行采样,一般选取2个或4个邻近像素,然后将采样混合起来,生成最终像素,令每个像素拥有邻近像素的特征,从而致使图形边缘的过渡趋于平滑。最后再把最终像素恢复至原来大小的图像,保存到帧缓存,并输出到显示器。
MSAA(多重采样抗锯齿)主要是通过专用的多重采样缓冲区(渲染目标)来实现。缓冲区的可用配置为2倍,4倍,8倍。MSAA发生在管道的光栅化阶段。你可以理解成是一种特殊的SSAA。MSAA只对Z缓存(Z-Buffer)和模板缓存(Stencil Buffer)中的数据进行超级采样抗锯齿的处理,亦即只对多边形的边缘进行抗锯齿处理。
尽管SSAA有利于提升视觉质量,但它存在自身的局限性:
- SSAA是性能密集型功能:像素负载与样本数量成线性比例
- 难以精细控制着色率:无法对4x MSAA缓冲区执行2x超级采样,同时无法根据渲染区域或任何其他条件选择性地对对象进行着色。
图1:MSAA和SSAA的像素着色器执行。MSAA为覆盖样本执行一次像素着色器并共享数值,SSAA为所有样本执行像素着色器。
1.1.1 MSAA和SSAA的示例
图2将每个像素显示为一个正方形,点表示一个像素内的样本位置。
在运行像素着色器之前,硬件会生成一个“覆盖遮罩”。它存储当前三角形所覆盖及未覆盖的样本。
在方框1中,覆盖所有4个样本。在方框2中,覆盖3个样本。
MSAA | 超级采样 |
像素着色器为中心的像素执行一次,仅生成一个着色并将其复制到“覆盖”样本中。 | 像素着色器为每个采样位置的样本执行一次,为每个覆盖样本生成唯一的着色。 |
方框1:所有4个样本都包含完全相同的着色,所以将它们平均会产生相同的着色;没有质量提升 | 方框1:所有4个样本均包含唯一的着色。所以,将它们平均会产生更为准确的着色;提升质量+内部抗锯齿 |
方框2:3个样本包含完全相同的着色,第4个样本包含背景色,所以将它们平均会产生抗锯齿输出;没有质量提升,但边缘抗锯齿 | 方框2:3个样本包含唯一的着色,第4个样本包含背景色,所以将它们平均会产生更正确的和抗锯齿的输出;提升质量+边缘抗锯齿 |
1.2 超级分辨率
应用可以具有用于缩放渲染分辨率的动态缩放功能。这个方法涉及按比例缩放渲染目标。但这种缩放是整帧执行,甚至外围都是以更高的分辨率缩放和渲染,而VR并不真正需要这样。更好但更复杂的解决方案是仅缩放中心区域,并按比例缩小以提高质量。
1.3 目标区域
对于VR,渲染区域可分为中心区域或外围区域。用户一般是把注意力集中在VR屏幕的中心区域。透镜畸变会严重挤压图像的外围,但用户一般无法感知。仅在中心区域进行的任何优化都会改善最终用户的整体体验。
1.4 图灵可变速率着色(VRS)
图灵的VRS功能能够选择性地控制整个渲染表面的着色率。VRS可以使用以下两种方式之一来动态改变实际像素着色期间的着色率,而不是每个像素执行一次像素着色器:
- 粗略着色:每个多栅格像素执行一次像素着色器,然后将相同的着色复制到像素
- 超级采样:每个单栅格像素执行多次像素着色器。
VRS功通过仅对注视区域进行超级采样来改善视觉质量。
2. 可变速率超级采样(VRSS)
2.1 介绍
VRSS的工作原理是选择性地对帧中心区域进行超采样:固定注视点超级采样。你可以使用VRS功能为渲染目标应用不同的着色率。在对中心区域进行超采样的同时,你不会触及外围区域。VRSS仅在空闲GPU周期可用时进行选择地启动。
图3:VRSS的示例。
根据应用程序选择的MSAA级别,中心区域可以进行多达8倍的超级采样。所有这一切都可以由英伟达显示驱动处理,无需任何应用集成。
用户可以通过NVIDIA Control(控制面板)->“Manage 3D Settings(管理3D设置)”页面->“Program Settings(程序设置)”标签启用VRSS。在开启时,你可以看到数个选项。
- Adaptive(自适应):将超级采样应用于帧的中心区域。中心区域的大小取决于可用的GPU余量
- Always On(始终开启):将超级采样应用于固定大小的中心区域。这个模式不考虑GPU余量,并可能导致丢帧。
这项功能仅适用于满足以下条件并接受英伟达性能分析的应用:
- DirectX 11 VR应用
- MSAA+正向渲染
2.2 幕后
VRSS不需要任何开发者集成,并且完全是由英伟达显示驱动实现和处理。
英伟达显示驱动处理多个功能板块,包括:
- 帧资源跟踪:驱动跟踪每帧遇到的资源,并构建启发式模型来标记可以调用VRS的情景。在配置VRS着色率时请注意MSAA级别:在图像中心使用的超级采样因子。提供用于配置VRS遮罩的渲染目标参数。
- 帧渲染监视:这涉及测量跨帧的渲染负载,应用程序的当前帧速率,基于头显刷新率的目标帧速率等。这反过来会计算VRSS自适应模式所需的渲染统计信息。
- 可变速率超级采样支持:如前所述,VRS允许你能整个渲染表面配置着色率。这是通过着色率遮罩和着色率查找表完成。有关所述技术的详细信息,请参见Turing Variable Rate Shading in VRWorks页面。VRS架构设置:处理VRS遮罩和VRS着色率查找表的配置。VRS框架根据性能统计信息配置,如下所示:
3.1:VRS遮罩:中心区域遮罩的大小与余量可用性成比例配置
3.2:根据检测到的MSAA缓冲区采样数配置VRS着色率
图4:VRS的帧周期表格
3.3 VRSS模式
- Adaptive(自适应):自适应模式将考虑性能限制,它会尝试最大化超级采样区域,同时不影响VR体验。在这里,中心区域的大小与可用的GPU余量成比例增大/缩小。
图5:自适应模式的中心区域动态变化。绿色遮罩描绘了超采样区域。 基于GPU负载(场景复杂度),超采样区域会缩小并增长。
- Always On(始终开启):这个模式始终对固定注视点中心区域进行超级采样,从而最大程度地提高图像质量。中心区域的大小足以覆盖中心的用户视场。它可以帮助用户感知最大的质量增益。但是,这可能会导致性能密集型应用出现丢帧情况。
4. 开发者指南
这项功能面向接受英伟达性能分析的应用,而你可以将游戏和应用提交给英伟达审核。
VRSS的优势包括:
- 无需集成:不需要显式VRS API集成。完全封装在英伟达显示驱动之中。
- 易用:可通过简单的开关(利用英伟达控制面板)打开/关闭超级采样。
- 质量提升:超级采样可提供最高的渲染质量,并尽可能减轻锯齿。
- 性能模式:自适应模式尝试在不减损性能的情况下提高图像质量。
- 无需维护:因为整个技术是由驱动处理,所以无需开发者进行维护
对VRSS应用程序进行性能分析的标准如下:
- DirectX 11 VR应用
- MSAA+正向渲染:超级采样需要使用MSAA缓冲区,所以它兼容使用MSAA的应用。所应用的超级采样因子级别基于MSAA缓冲区中使用的基础样本数量。对于MSAA-2倍,中心区域着色2倍;对于MSAA-4倍,着色4倍。MSAA级别越高,超级采样效果越强。
MSAA是一种与正向渲染相关的热门抗锯齿技术,非常适合VR。诸如Unreal和Unity之类的游戏引擎都支持在VR中进行正向渲染。如果已经启用正向渲染,则添加MSAA支持会相对容易。
受益于超级采样的内容同样会受益于VRSS。超级采样不仅可以减轻锯齿现象,而且可以显示图像中的细节。但需要注意的是,质量提高的程度因内容而异。
图6:受益于VRSS的示例。
遇到以下类型的内容时,超级采样的效果将会非常明显:
- 高分辨率纹理
- 高频内容
- 具有Alpha通道的纹理,如栅栏,树叶,菜单图标和文本等。
但下面情况则没有太大的质量提升:
- 平面阴影几何
- 低细节层次的纹理
5. 已兼容的游戏和应用
VRS技术已经作为显式编程API提供,并提供用于应用集成的精细控制。开发者同时可以利用VRS进行透镜匹配着色(lens matched shading),内容自适应着色,注视追踪着色等。
VRSS开箱即用,无需为基于DirectX 11 MSAA的应用进行任何应用集成。
下面24款游戏已通过英伟达驱动441.87支持VRSS。