Async TimeWarp(异步时间扭曲)以下简称ATW,ATW是为了减少用户感知VR/AR头显设备运动造成的延迟感。直接盯着电脑屏幕的时候左右转动头部是没有延迟的,但在头显中会出现延迟。
延迟感是如何产生的?
下面是头显渲染画面的简化流程:
1.用户佩戴头显转动头部。
2.应用读取imu传感器解算姿态。
3.根据解算姿态绘制画面。
4.将画面提交给屏幕进行显示。
用户转动头部直到在头显中看到结果,间期花费的时间就是延迟感。
逐步分析可能存在的耗时:
- 在1之后第2步读取imu,传感器的频率是驱动设置的,一般是100-500Hz,如果为100Hz延迟最大为10ms,如果为500Hz延迟是1-2ms。
- 第3步解算imu姿态耗时和算法的复杂度相关,一般来说为1-2ms。
- 第3步绘制画面和渲染场景的复杂度相关,一般来说为1-2ms。
通过优化,前3步的延迟可以控制到1-6ms。 - 第4步提交渲染画面给屏幕进行显示可能产生十几ms以上的延迟,ATW就是用于解决这一步产生的耗时。
屏幕显示画面的延迟如何产生的?
-
屏幕分辨率。
如1920x1080,意思是宽有1920个像素,高有1080个像素,一共有2,073,600个像素。
-
屏幕刷新率。
屏幕的刷新率常见的有60Hz和120Hz。
-
屏幕刷新机制。
按照从左往右,从上往下的顺序匀速逐像素的刷新,以60Hz为例每隔16.6ms整个屏幕会完成一次刷新,并且在屏幕完成刷新时会发出Vsync信号。
屏幕的刷新是有间隔的,如果错过这一次的Vsync信号,那么送显的画面要下一帧才会被显示,如下图的第一个vsync所示,如果是双缓冲buffer那么造成的延迟还要再加上一个Vsync的时间。
ATW所做的就是实现上图的最后一个Vsync,把渲染时间控制到Vsync来临前越接近越好。