XR“黑话”

MTP(Motion-To-Photon Latency):实际人体发生运动到图像显示到屏幕上的时间延迟。早期一些vr产生晕动症的主要原因。

ATW(Asynchronous Timewarp):主要解决两个问题,一是延迟,二是补帧。其原理是,应用程序输出图像以后,交给另一个渲染管线,后者在上屏的时候拿新的姿态数据做重投影计算。这样新的姿态更接近显示时的真实数据,弥补了MTP。同时应用掉帧的时候,ATW拿前一帧的图像重投影,一定程度上也可以弥补了。

OTW(Orientation Timewarp):可以认为是ATW重投影计算的3DOF版本,把图像视为无限远处的画面,仅引入HMD旋转带来的变量。早期VR设备都是3DOF的,这种计算非常有效。

PTW(Positional Timewarp):6DOF版的ATW,重投影中同时包括旋转和位移。必须要深度图,通过深度信息还原每个点的距离。理论上说每个像素都参与计算是最准确的,但是计算量太大,需要用其他办法来平衡。据oculus的说法:

“多年来,我们尝试了许多不同的 PTW 技术来评估各种权衡。一些技术(例如视差遮挡贴图)更加准确,但会消耗更多 GPU 时间。我们选择的技术类似于稀疏视差映射技术,因为它可以帮助我们认识上述所有要点。与 OTW 相比,使用我们的 PTW 方法的开销极低,同时也足以帮助解决 OTW 中由于 HMD 位移而出现的抖动伪像。”

这里边说的“类似于稀疏视差映射技术”到底如何实现,还不清楚。

ASW(Asynchronous Spacewarp):是用来补帧的,和ATW叠加使用,才能纵享丝滑。前面说的ATW的补帧,弥补的是场景里相机的运动,这里弥补的场景里物体运动带来的变化。oculus已经迭代了两版,下面是官方文章说的:

为了更好地理解ASW如何与PTW配合使用,我们首先需要了解ASW的流程。以下是 Oculus 运行时利用 ASW 的步骤的详细分解:

  1. ASW捕获由焦点 VR 应用程序提交的先前和当前 ovrLayerEyeFov 帧的纹理。
  2. ASW通过对前一帧进行时间扭曲来生成“预扭曲帧”以使用当前帧的姿势。
  3. ASW将当前和预变形帧纹理转换为 GPU 视频编码器友好的资源。
  4. ASW将两个帧纹理发送到 GPU 视频编码器进行对应分析。
  5. ASW从 GPU 视频编码器输出中收集“运动向量”。
  6. ASW对运动矢量进行后处理和转换以进行帧外推。
  7. ASW打包内容并注入合成器层,就像来自 VR 应用程序一样。
  8. 合成器像往常一样使用 ASW 注入的 ovrLayerEyeFov 图层内容进行时间扭曲和扭曲。

正如您在步骤 #2 和 #8 中看到的,我们依赖 Timewarp (TW)。在我们最初的 ASW 实现中,由于我们没有可用于 PTW 的深度缓冲区,因此在这些情况下使用的 TW 重投影技术是方向时间扭曲 (OTW)。然而,随着越来越多的 VR 应用程序开始提供深度缓冲区,我们可以利用 PTW 的数据。诀窍是确保上述两个步骤中使用的 TW 重投影技术(无论是 OTW 还是 PTW)属于同一类型。这可确保在 ASW 或 TW 中校正 HMD 运动重投影,但不能同时在两个位置校正,因为这会导致视觉伪影。当深度不可用时(即 VR 应用程序提交 ovrLayerEyeFov 而不是 ovrLayerEyeFovDepth),Oculus 运行时会自动恢复为该 VR 应用程序的 ASW 1.0 方法。

 个人理解最大的区别就是利用了PTW,能把场景中没有发生运动的点都剔除出来。

Motion Vector:运动矢量,ASW里的关键信息,直观理解就是上面图片中的小箭头。高通GPU提供了该能力,在OpenGL里提供了QCOM_motion_estimation extension扩展接口。

  void TexEstimateMotionQCOM(uint ref,
                             uint target,
                             uint output) ;
  void TexEstimateMotionRegionsQCOM(uint ref,
                                    uint target,
		                            uint output,
				                    uint mask) ;

参考链接:

https://developer.oculus.com/blog/developer-guide-to-asw-20/

Improving VR Performance Using Motion Estimation OpenGL Extensions

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值