英伟达:图灵显卡的纹理空间着色可提升VR渲染的效率


    英伟达的图灵架构最先登陆面向工作站的Quadro RTX系列,然后通过GeForce RTX 2000系列登陆消费者市场。图灵显卡是当前最先进的GPU之一,并提供了大量的全新图形,计算和AI功能。
    英伟达的工程师Henry Moreton和Nick Stam日前介绍了图灵显卡的一项全新着色功能:纹理空间着色(Texture Space Shading;TSS),并特别提到TSS在两个方面可以对虚拟现实带来的帮助。他们指出,“对于像VR这样需要大大提高图像质量,不能出现锯齿伪影和瞬时闪烁的应用而言”,TSS能够实现的时间稳定性十分重要。
    与此同时,对于高质量的VR而言,系统需要以90fps的速度为两个眼睛渲染相同的情景两次。两个渲染情景几乎完全一样,只是浏览角度有所不同(这样可以产生三维立体效果)。英伟达表示,借助TSS,系统只需渲染一个视图,然后可以将其作为第二个视图的基础,并只渲染在第一个视图中被遮挡的对象,从而能够大大降低所需的计算量。
    对于英伟达的这篇博文,映维网进行了具体的整理,希望可以帮助你进一步理解纹理空间着色对虚拟现实的帮助:
    图灵显卡新增了一项名为纹理空间着色(Texture Space Shading;TSS)的着色功能,其中系统将动态计算着色值,并将其作为纹理空间中的纹素存储在纹理中。接下来,系统对像素进行纹理映射,其中屏幕空间中的像素将映射至纹理空间,并使用标准纹理查找操作对相应的纹素进行采样和过滤。通过这项技术,我们能够以完全独立的速率和一个单独的(解耦)坐标系统对可见性和外观进行采样。借助TSS,开发者可以(重新)使用在解耦着色空间中完成的着色计算,从而同时提高质量和性能。
    开发者可以使用TSS来利用空间和时间渲染冗余。通过将着色与屏幕空间像素网格分离,TSS可以实现high-level的帧到帧稳定性,因为着色位置不会在一帧和下一帧之间移动。对于像VR这样需要大大提高图像质量,不能出现锯齿伪影和时间微光的应用而言,这样的时间稳定性非常重要。
    TSS具有内在的多分辨率灵活性,而这是继承自纹理贴图的MIP-map层次结构或图像金字塔。当对像素进行着色时,开发者可以将映射调整为纹理空间,选择MIP级别(细节级别),从而对着色率进行精细控制。由于位于细节底层的纹素较大,因此它们覆盖了较大的对象部分,而且可能覆盖多个像素。
    TSS能够记住已经着色的纹素,并且只着色新请求的纹素。着色和记录的纹理可以重复用于服务同一帧,相邻场景,或后续帧中的其他着色请求。通过控制着色率并重新使用先前着色的纹素,开发者可以管理帧渲染时间,并维持VR和AR等应用程序的固定时间预算。开发者可以使用相同的机制来降低已知低频现象的阴影率,如雾。能够记住着色结果的正面作用可以扩展到顶点着色器和计算着色器,以及一般计算。TSS架构可用于记住和重复使用所有复杂计算的结果。
    1. TSS的机制
    图1是传统的光栅化和着色过程。系统对3D场景进行栅格化,并转换为屏幕空间中的像素。像素会接受可见性的测试,为外观而进行着色,并进行深度测试。操作都发生在同一像素上的同一屏幕空间像素网格上。
    可见性采样(光栅化和z-testing)和外观采样(着色)这两个主要操作可以与TSS解耦,并以不同的速率,在不同的采样网格上,甚至在不同的时间线上执行。着色过程不再直接与屏幕空间像素相关联,而是发生在纹理空间中。根据图2,几何体仍然会进行栅格化以产生屏幕空间像素,而可见性测试仍然在屏幕空间中进行。但是,我们可以看到纹素需要覆盖输出像素,而不是在屏幕空间中着色。
    换句话说,屏幕空间像素的覆盖区域将映射到单独的纹理空间中,并且着色纹理空间中的相关纹理像素。映射到纹理空间是一种标准的纹理映射操作,对LOD和各向异性过滤等提供相同的控制。为了产生最终的屏幕空间像素,我们从着色纹理中进行采样。纹理是根据样本请求按需创建,仅为引用的纹素生成值。
    2. 对VR的用例
    TSS的一个示例用例是,它可以提高VR渲染的效率。图3说明了VR渲染中TSS的用例。VR需要渲染一对立体影像,左眼中可见的几乎所有元素也将显示在右眼视图中。借助TSS,我们可以对整个左眼视图进行着色,然后通过对左眼视图进行采样来渲染右眼视图。在没有找到有效样本的情况下(例如,左眼视图无法看到,但右眼可见的背景对象),右眼视图仅需要对新纹理元素进行着色。
    如前所述,借助TSS,你可以通过调整纹理LOD来动态地和连续地控制每像素着色率。通过改变LOD,我们可以根据需要选择不同的纹理MIP级别,从而减少着色纹理像素的数量。请注意,这意味着TSS的采样方法也可用于由图灵可变速率着色功能(Variable Rate Shading feature;VRS)提供支持的一系列相同的着色速率降低技术。哪种方法最适合开发者将取决于他们的目标。VRS对渲染管道的权重变化较轻,而TSS具有更大的灵活性并支持其他用例。