
如果在渲染线程进行绘制之前(5ms时),重新再采样一下传感器数据,修正一下视口信息(不会对游戏逻辑产生影响),那延迟就缩短到了约12ms

做过渲染优化的人都知道,提交D3D Command后,需要等待GPU执行完毕,这部分时间在整帧时间中的占比还是相当高的。那有没有办法在渲染完成之后,提交到屏幕之前再次采样一次传感器数据呢? 如果像下图那样的话,延迟可以缩短到3ms!!!

这就是Timewarp的主要思想,我们来看看它是怎么实现的
Timewarp
了解过延迟渲染的人应该都知道,我们可以利用ZBuffer的深度数据,逆向推导出屏幕上每个像素的世界坐标

这就意味着,我们可以把所有像素变换到世界空间,再根据新的摄像机位置,重新计算每个像素的屏幕坐标,生成一幅新的图像: