Meta分享:Quest Pro眼动注视点渲染的原理、实践和应用
基于眼动追踪的注视点渲染功能Eye Tracked Foveated Rendering(ETFR)
(映维网Nweon 2023年02月17日)Meta在Connect 2022大会为Quest Pro推出了基于眼动追踪的注视点渲染功能Eye Tracked Foveated Rendering(ETFR)。这种全新的图形优化可以利用眼动追踪,以高像素密度渲染注视点区域,并以低像素密度渲染外围区域,从而为开发者节省了大量的GPU算力。同时,ETFR的设计可以允许你在Unity和Unreal中轻松集成。
例如,《Red Matter 2》的开发者表示:““集成ETFR是一个无缝的过程,激活就像拨动开关一样简单。然后,我们的团队专注于最大化像素密度。结果令人印象深刻,像素密度增加了33%,相当于光学中心渲染的像素增加了77%。ETFR和Quest Pro的Pancake透镜组合提供了非常清晰的图像。ETFR真正提升了游戏体验。”
下面这篇博文将进一步介绍ETFR的工作原理,最佳实践和常见问题解答,从而帮助你优化Meta Quest应用的图形。
什么是ETFR?
固定注视点渲染Fixed Foveated Rendering(FFR)固定地在屏幕中心(又称为注视点区域)渲染全像素密度,并在屏幕边缘渲染低像素密度。至于ETFR,它可以利用眼动追踪数据来移动需要渲染全像素密度地注视点区域。由于低像素密度区域始终隐藏在外围视觉中,所以可以基于眼睛注视数据应用更大胆的策略,相对较FFR节省更多的GPU算力。
工作原理
ETFR通过首先从眼动追踪摄像头图像计算用户的注视方向,然后使用注视方向在应用渲染管道中移动高像素密度的注视点区域。
为了做到这一点,Meta的Unity和Unreal集成实现了一个新的Vulkan扩展:Tile Offset (VK_QCOM_fragment_density_map_offset)。通过指定像素偏移值,它允许重复使用相同的foveation map并平滑地移动。如下面的动画所示,Tile Offset在移动注视点区域时提供了更精细的控制,并避免了传统方法中的闪烁伪影:
有Tile Offset
没有Tile Offset
API架构
相关的OpenXR API是从现有的XR_FB_foveation框架(FFR使用的框架)扩展而来。Meta的Unity和Unreal集成在后台调用API,所以你不需要处理细节。原生VR应用程序可以遵循相同的步骤来支持ETFR。
延迟优化
在ETFR管道中,摄像头传感器和处理以与显示器相同的帧速率运行,并与渲染管道完全同步,以最小化眼睛运动和显示时间之间的延迟。特别是,团队抵消了眼动追踪摄像头的捕获时间,从而最小化“眼动追踪器产生新的注视输出”和“用于更新foveation map的注视输出“之间的差距,如下面红色框中显示:
根据当前渲染负载,UE4测试应用程序中测得的端到端管道延迟在46到57毫秒之间。如果在logcat(adb logcat -s VrApi)中读取类似的ETFRLat度量,你应该会得到类似的结果。
限制和最佳实践
ETFR是一个强大的工具,但它不是万能药,可能不适合所有类型的应用。如果你的应用程序属于fragment-heavy片段密集型(例如,使用复杂的材质或以非常高的分辨率渲染),ETFR会有巨大的帮助,因为它会减少给定渲染过程中的片段着色执行。所以如果你的程序属于vertex bound,所述工具不会提供太大的帮助。
另外,ETFR目前仅适用于你的眼睛缓冲区(主层),这意味着如果你使用其他合成器层,渲染和合成相关层的GPU成本将不会随着ETFR而提高,仅会降低眼睛缓冲区的成本。
最终,你应该决定如何以及何时使用这个工具,并确保彻底测试应用程序。就像FFR一样,低像素密度的外围区域会导致闪烁,尤其是对于高对比度和复杂的几何结构。所以,你应仔细选择最大的foveation level,从而平衡性能和视觉质量。
额外的GPU算力节省
Meta建议使用ETFR的额外GPU增益来增加渲染目标大小,从而获得更清晰和更塑形的图像。以下是UE4测试应用程序中以默认和增加眼睛纹理大小渲染的FFR/ETFR的GPU渲染时间示例:
如上表所示,如果你的应用程序现在正在使用FFR-3进行渲染,你可以尝试切换到ETFR-2,从而提高眼睛纹理分辨率,并使用MSAA-2以获得更清晰的图像。其中,GPU时间成本大致相同。
ETFR的GPU算力节省将取决于应用程序的内容,所以请确保以不同的foveation level和渲染目标大小来配置应用程序。
Dynamic Foveated Rendering动态注视点渲染
Meta同时建议启用Dynamic Foveated Rendering动态注视点渲染,以便根据当前GPU渲染负载自动调整foveation level。最大foveation level可由“Foveated Rendering level”指定。在启用这个选项之前,开发人员应确保在最大foveation level下充分测试渲染质量(例如,外围视觉中的视觉伪影不能太多)。
开发人员工具包
ETFR现已支持SDK v49(Unity和Unreal)。
最后的想法
ETFR主要降低了像素吞吐量,并可能为未来的头显实现高PPD(像素/度)渲染。当然,你最终需要平衡应用程序的图形复杂性、分辨率、MSAA和foveation level,在性能节省和视觉质量之间进行权衡。
Meta致力于为你提供更简单的图形优化和性能提升方法,而发布ETFR只是这一旅程的开始。下面是关于ETFR的常见问题解答。
ETFR是否需要OpenXR?
是的,只支持OpenXR,因为Meta完全致力于支持未来的OpenXR API。例如在UE4中,请确保在“XR API”设置下选择了“OpenXR OVRPlugin”。
ETFR是否需要Vulkan?
对于Meta的UE4/Unity ETFR集成,仅支持使用Vulkan+Multiview的应用程序。由于缺少fragment density map和Tile Offset扩展的支持,ETFR无法支持GLES。Meta建议所有UE和Unreal开发者在Quest应用程序中使用Vulkan。
ETFR是一个‘要么用要么不用’的功能吗?
不是,你可以在游戏引擎脚本level的任何时候打开/关闭ETFR或切换到FFR。例如,你可以尝试在游戏主菜单中完全关闭ETFR,并仅在进入游戏场景时打开ETFR。
如何处理眼动追踪许可?
用户第一次使用ETFR打开应用程序时,系统将显示一个权限提示,请求用户接受眼动追踪权限。如果权限被拒绝,应用程序将回退到FFR渲染,但是,你可以选择在游戏引擎脚本level以不同的方式处理回退逻辑。
请注意,用户可以随时选择在通用菜单中暂停眼动追踪,在系统设置中禁用眼动追踪,或取消眼动追踪权限。