像素密度提升33%,Quest Pro动态注视点渲染原理详解

news2024/10/2 1:36:42

在Connect 2022上,Meta发布了Quest Pro,并首次在VR中引入动态注视点渲染(ETFR)功能,这是一种新型图形优化技术,特点是以用户注视点为中心,动态调节VR屏幕的清晰度(注视点中心最清晰、像素密度高,周围边缘清晰度低,像素密度低),好处是在节省GPU运算量的同时,也保持了足够清晰的VR观感。

自ETFR功能推出后,陆续有多款VR游戏支持该功能,比如《Vertical Robot》、《Red Matter 2》等等。据悉,《Red Matter 2》由Vertical Robot开发,该作登陆Quest Pro后,像素密度比之前提升了33%(等同于视觉中心的像素数量增加了77%),文字清晰度、光影和色彩表现足够优秀,突破了Quest头显的图形极限。

Vertical Robot指出:在《Red Matter 2》中激活ETFR功能很简单,随后只需要考虑如何提升VR游戏的像素密度,以及测试效果。结果发现,该作在Quest Pro上画质非常清晰,真正提升了游戏体验。

什么是ETFR

我们知道,Quest头显支持固定注视点渲染(FFR),虽然也是在视觉中心渲染高分辨率,在周边渲染低分辨率画面,但视觉中心的位置基于你转头的方向,而不会跟随注视点移动而实时变化。

相比之下,ETFR基于实时眼球追踪技术,清晰区域跟随眼球运动,因此可以进一步缩小高分辨率区域,比FFR节省更多GPU算力。

开启Offset

ETFR是怎么实现对VR画面动态渲染的呢?原来,Meta为Unity和Unreal引擎开发了专门的Vulkan扩展插件:Tile Offset(分块补偿),该插件可指定像素补偿值,并设定注视点贴图(也就是视觉中心和余光区域的比例),这个注视点贴图支持重复使用、平滑运动,可以根据注视点变化,进一步调整图像清晰度。Tile Offset还有一个好处,就是避免了图像分辨率每次更新时可能产生的闪烁问题。

关闭Offset

OpenXR API

Meta指出,Quest正在全面支持OpenXR API,因此ETFR功能也仅支持OpenXR标准。因此UE4开发者需要在引擎中选择OpenXR OVRPlugin插件,才能接入ETFR API(由FFR所使用的框架XR_FB_foveation扩展而来,现在是一个基于OpenXR的API)。

ETFR API的特点是,可在Unity、Unreal的Quest集成工具(v49版开始)后台调用API,开发者无需处理细节。不管是原生VR游戏,还是移植VR游戏,都可以在游戏引擎中开启ETFR功能。

优化延迟

不管是眼球追踪还是注视点渲染,这些过程都具有一定延迟,分别在多个步骤中产生,比如摄像头读取、眼球追踪、渲染线程、GPU渲染、显示等过程。

Meta为了降低ETFR渲染管道的延迟(从注视点运动到显示屏响应的时间),将相机传感器和处理器的刷新率设置为和显示屏相同,并且和渲染管道完全同步,此外,还抵消了眼球追踪相机的数据捕捉时间,从而缩短从捕捉到眼球信息到输出注视点贴图的时间。

经过测试,在UE4应用中运行ETFR的端到端延迟大约在46到57毫秒之间,具体数据根据当前的渲染负载变化。值得注意的是,ETFR还支持预测眼球运动,Meta测试了多种眼球运动,均获得不错的视觉体验。

有哪些局限?

尽管ETFR可以有效提升VR图像质量,但不一定适合所有类型的内容。Meta指出,如果VR应用使用大量复杂的材质,或是渲染分辨率很高,那么使用ETFR的效果会很好,可以将给定渲染通道的片段着色次数减少(此类应用通常受到像素限制)。然而,如果VR应用受到顶点限制(vertex),那么ETFR的作用不大。

此外,ETFR目前仅应用于眼睛缓冲区(主层),如果使用额外的合成器层,那么ETFR也无法优化渲染、合成这些涂层的GPU成本。也就是说,它只能改善眼睛缓冲区的渲染成本。

Meta建议,开发者应该根据VR应用类型去使用ETFR,并确保测试效果稳定。ETFR也存在和FFR一样的缺点,比如低像素密度的外围区域可能产生闪烁,尤其是在渲染高对比度、复杂的结合形状时,因此开发者需要尽可能扩大中心清晰区域的范围,更好的平衡性能和视觉质量。

进一步优化GPU

注视点渲染功能节省了部分GPU算力,这些算力可进一步提升中心区域的清晰度。Meta宣称,这样可以将渲染分辨率提升至1872x2048(像素数量提升至111%),而中心视觉区域的PPD可达15.5,整体效果要比FFR更好。

不过,ETFR能节省多少GPU算力还取决于应用内容,因此需要开发者经过测试来验证最佳参数组合,确保余光区域没有明显视觉伪影。

总之,ETFR的主要用途是减少VR渲染所需的像素数量,并尽可能平衡性能和视觉质量,提升中心视觉的PPD,以及优化图形复杂性、分辨率、MSAA(多重采样抗锯齿)等级、注视点区域范围等方面。该功能可作为FFR等图形/性能优化工具的一个补充,根据VR应用的类型和需求来选择是否开启。此外,也可以在游戏主菜单、游戏场景分别独立开启/关闭ETFR。

参考:Meta

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/397833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle VM VirtualBox6.1.36导入ova虚拟机文件报错,代码: E_INVALIDARG (0x80070057)

问题 运维人员去客户现场部署应用服务,客户是windows server 服务器(客户不想买新机器),我们程序是在linux系统里运行(其实windows也可以,主要是为了保持各地环境一致方便更新和排查问题)我们使…

吐血整理学习方法,2年多功能测试成功进阶自动化测试,月薪23k+......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试进阶方向 测试进…

[Gin]框架底层实现理解(三)

1.engine.Run(port string) 这个就是gin框架的启动语句,看看就好了,下面我们解析一下那个engine.Handler() listenandserve 用于启动http包进行监听,获取链接conn // ListenAndServe listens on the TCP network address addr and then ca…

【SOP 】配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Java中wait和sleep区别

文章目录1. Java中wait和sleep区别2. wait和sleep所属方法的不同3. wait的Demo3.1 没有synchronized同步代码块异常3.2 wait使用Demo4. sleep的Demo1. Java中wait和sleep区别 sleep属于Thread类中的static方法;wait属于Object类的方法sleep时线程状态进入TIMED_WAI…

java 如何实现在线日志

如何采集springboot日志至web页面查看 实现方案 基于Filter方式,在日志输出至控制台前,LoggerFitler 拦截日志通过websocket推送至前台页面 实现逻辑: LoggerFilter采集日志添加至LoggerQueue队列, LoggerConsumer 从LoggerQueue中采集推送至前台页面 #mermaid-s…

LearnOpenGL-光照-3.材质

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录材质例子1代码相关光照太强了例子2例子3: 不同的光源颜色材质 引出材质 如果我们想要在OpenGL中模拟…

TTS | 语音合成常见数据集及数据格式详情

linkLJSpeech网址 : The LJ Speech Dataset (keithito.com)数据集描述:数据集大小:2.6GB这是一个公共领域的语音数据集,由 13,100 个简短的音频剪辑组成 一位演讲者阅读 7 本非小说类书籍的段落。为每个剪辑提供转录。…

删除的文件怎么恢复?恢复方法在这里(支持Win和Mac)

案例:文件永久删除还能找回来吗?关于Win和Mac系统的恢复方法 “前几天我在清理电脑垃圾,不小心误删了重要的文件。有没有什么比较全面的方法,可以帮助我恢复删除的文件啊?在线急等回复!” 随着电脑使用的…

Golang 中 Slice的分析与使用(含源码)

文章目录1、slice结构体2、slice初始化3、append操作4、slice截取5、slice深拷贝6、值传递还是引用传递参考文献众所周知,在golang中,slice(切片)是我们最常使用到的一种数据结构,是一种可变长度的数组,本篇…

三维人脸实践:基于Face3D的渲染、生成与重构 <二>

face3d: Python tools for processing 3D face git code: https://github.com/yfeng95/face3d paper list: PaperWithCode 3DMM方法,基于平均人脸模型,可广泛用于基于关键点的人脸生成、位姿检测以及渲染等,能够快速实现人脸建模与渲染。推…

MySQL基础篇3

第一章 多表关系实战 1.1 实战1:省和市 方案1:多张表,一对多 方案2:一张表,自关联一对多 id1 name‘北京’ p_id null; id2 name‘昌平’ p_id1 id3 name‘大兴’ p_id1 id3 name‘上海’ p_idnull id4 name‘浦东’…

中国人工智能企业中集飞瞳全球港航人工智能领军者,箱况残缺检测视频流动态感知智能闸口,自动化港口码头数字化智慧港航中国人工智能企业

中国人工智能企业中集飞瞳全球港航人工智能领军者,箱况残缺检测视频流动态感知超级智能闸口,自动化港口码头数字化智慧港航。CIMCAI已完成全球250万人工智能集装箱箱况检验,完成全球上亿集装箱信息,先进产品在全球各港区及集装箱枢…

CNStack 多集群服务:基于 OCM 打造完善的集群管理能力

作者:学靖 概述 随着 Kubernetes 在企业业务中的应用和发展,单集群内的管理能力已经趋于完善,越来越多的客户期望在多云、多集群场景部署其业务,因此需要提供相应的多云、多集群管理能力。 CNStack 多集群服务是 CNStack 面向多…

【实现“大图”功能 Objective-C语言】

一、这时候,我们来实现另外一个功能,就是点击,实现这个“大图”, 1.点击“大图”按钮,实现这个“大图”, 那么我先给大家说一下,这个点击“按钮”,实现“大图”,这个思路是怎样的,大家看一下,这个示例程序,当你点击“大图”的时候,首先,这个图片变大,同时,后…

Nvidia jetson nano 部署yolov5_技术文档

Nvidia jetson nano 部署yolov5_技术文档 每天一句小姜格言:我行,我不是一般人儿 部署开始: 1、通过FileZilla,将window文件传输至jetson nano 上的nano文件夹下。 2、查看cuda 我买的jetson nano是带有配置好的镜像。系统配置…

[数据结构]:16-归并排序(顺序表指针实现形式)(C语言实现)

目录 前言 已完成内容 归并排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是…

嵌入式开发:CIA保护跨连接设备的嵌入式数据

在嵌入式开发中,ITTIA SDL保护数据并确保嵌入式系统的开发安全。嵌入式系统中的数据管理安全威胁是什么?ITTIA如何解决这个问题?嵌入式系统和企业系统的数据管理理想情况下遵循相同的安全威胁。有三个主要的基本原则或目标被称为CIA:保密性&#xff1a…

【FATE联邦学习】standalone版Fateboard修改配置

背景&做法 很多其他程序(比如vscode的code server)也会使用这个 127 0 0 1:8080 socket进行通信,这样就没办法远程用vscode去开发了,所以需要修改下Fateboard的socket配置。官方文档中也给出了如何修改配置 The default data…

代码随想录--数组--滑动窗口解决最长/短子数组题型

注意题目是说找连续数组的和>s的最小长度,是“和”,不然都不知道题目在说什么。 http://【拿下滑动窗口! | LeetCode 209 长度最小的子数组】 https://www.bilibili.com/video/BV1tZ4y1q7XE/?share_sourcecopy_web 看一下暴力算法&…