虚拟现实(VR)头盔将屏幕作为两个独立的显示器直接带入用户的视野中(每只眼睛一个显示器),为用户带来沉浸式体验。
开发人员可以利用注视点渲染对渲染性能进行优化,以满足虚拟现实(VR)的高分辨率和帧率需求。按照附图1所示,在不需要高度细节的情况下,注视点渲染技术可以降低像素着色成本,从而可以减少渲染每一帧所需要的时间和/或消耗。
附图1 – 使用注视点渲染的虚拟现实视角概念图,其中以不同的分辨率渲染各个区域。
虽然注视点渲染传统上是在眼动追踪的背景下进行探讨,但是注视点渲染并不需要眼动追踪。在虚拟现实中使用的高视场(FOV)和平面投影可以导致外围过度渲染,以实现中心的清晰度(参看附图2)。此外,异步时间扭曲为了抵消镜头失真所使用的桶形失真,导致外围采样不足。目前的虚拟现实独立设备中采用了固定注视点渲染(FFR),以尽量减少过度渲染的情况。
附图2 – 左侧:外围过度渲染及视野中心渲染不足情况的显示。右侧:桶形失真效果的显示。
通过注视点渲染提供的增强性能,可以确保开发人员能够灵活提高整体分辨率、帧率和/或改变着色复杂性,从而可以提供更好的视觉质量和更好的用户体验。
支持注视点
自发布首先在Oculus Go上使用的本公司Snapdragon 821移动平台以来,在Snapdragon® 移动平台上设置的Qualcomm® AdrenoTM图形处理器即可支持注视点渲染。该功能随着后续Snapdragon移动平台的发布而不断演进,包括在Oculus Quest中使用的Snapdragon 835移动平台,以及为Oculus Quest 2提供动力的最新的Snapdragon XR2 5G平台(XR2)。
本公司通过QCOM_texture_foveated扩展程序在OpenGL提供了Adreno版注视点渲染,并通过VK_EXT_fragment_density_map扩展程序在Vulkan中提供了注视点渲染。本公司的qcom_texture_foveated 2扩展程序建立在qcom_texture_foveated基础上,并增加了删除屏幕区域的能力。
确保实现高效、高性能注视点渲染的关键功能是Adreno图形处理器的贴片式渲染方法。贴片式注视点渲染将帧划分为贴片,每个贴片依次渲染到图形处理器上的高速内存中。一旦贴片完成,最终结果将被发送到系统内存中,而图形处理器则渲染下一个贴片。这样,只需要将最终帧内容复制到系统内存中。应用程序为构建帧而执行的读取和重写操作应使用本地高速存储器完成。下面,我们论述了Adreno上贴片式注视点渲染的演进情况。
标准贴片式注视点渲染
在本公司推出Snapdragon XR2平台之前,标准贴片式注视点渲染是通过在高速图形处理器内存中的低分辨率渲染,然后在将贴片复制到系统内存时对结果进行升级,如附图3所示:
附图3 – 将帧划分为贴片,并将每个贴片依次渲染到图形处理器上的高速内存中的标准贴片式注视点渲染。最终帧显示了向用户渲染的内容。
增强型贴片式注视点渲染
在Snapdragon XR2平台上,我们通过增强型贴片式注视点渲染程序改进了注视点渲染,从而获得更高的质量、更低的带宽使用和更高的性能。这一改进是通过在系统内存中仅存储低分辨率的贴片数据,并在采样时间重新创建了升级数据来实现的,如附图4所示:
附图4 – 将原低分辨率贴片数据存储在系统内存中的增强型贴片式注视点渲染。
这种二次采样布局减少了内存带宽,并允许选择性升级,从而获得更好的视觉质量。开发人员只需要启用OpenGL中的QCOM_texture_foveated_subsampled_layout扩展程序或Vulkan中的VK_EXT_fragment_density_map扩展程序中的二次采样功能。
让我们回顾一下这些增强方式对于注视点渲染的意义:
质量
仅在采样过程中对低分辨率数据进行升级,可以提高双线性过滤的质量,因为系统内存中的邻近像素目前包含真正的邻域数据,因为渲染之前没有进行升级。此外,由于注视点纹理通常通过异步时间扭曲进行采样,并且也可以执行桶形失真,所以升级只会在需要显示的地方发生。
带宽
随着分辨率的持续提高,节省带宽变得越来越重要。在功率效率至关重要的情况下,这一点在独立形式因素中尤其如此。Snapdragon XR2的注视点增强功能仅将所需数据写入和读取到系统内存就解决了这一问题。在内存中存储低分辨率的贴片数据减少了渲染过程中的写带宽,也减少了纹理采样时的读带宽。在XR内容中,我们通常看到写带宽节省了大约30%到40%。
性能
注视点渲染的核心在于性能增强特性,与Snapdragon 835相比,Snapdragon XR2极大地提高了性能。在XR内容中,我们通常会看到2-3倍的性能改进。根据注视点的水平,性能可以提高4倍。这使得虚拟现实应用程序的开发人员能够利用Snapdragon XR2实现更高的帧率和分辨率。
随着眼动追踪技术的日益普及,我们可以通过移动注视点的焦点来跟踪分辨率最高的中心凹,并在看到较少细节周边区域进行较少的着色,从而可以在FFR方面获得进一步的增益。
面向引擎开发人员的注视点渲染
如今,许多虚拟现实开发人员使用Unity和Unreal Engine构建沉浸式虚拟现实环境,Oculus也提供了软件开发工具包来执行这两种系统的FFR。该类软件开发工具包所包含的应用程序接口可以填充注视点参数,这样开发人员就可以专注于解决高层次的虚拟现实问题。例如,用于Unity的OVRManager脚本允许开发人员将FFR设置为几个预先定义的细节层次。如要获得更多信息,请查看Oculus的Unity FFR和Unreal FFR文档。
开发人员如有兴趣了解更多关于Oculus Quest 2中所使用的Snapdragon XR2平台,则请查看Snapdragon XR2头盔式显示器参考设计。此外,请务必查看本公司的“如何指导:开发沉浸式现实”,以了解开发虚拟现实应用程序的其他技巧。
