我读过这篇文章http://www.gamasutra.com/blogs/BrianKehrer/20160125/264161/VR_Distortion_Correction_using_Vertex_Displacement.php 关于VR中顶点位移的失真校正。此外,还有一些关于其他失真校正方法的话。我使用unity进行实验(并尝试修改fibrum sdk,但在我的问题中并不重要,因为我只想了解这些方法的工作原理)。
正如我所提到的,有三种方法可以进行这种修正:
我理解基于像素的着色器是如何工作的。但是,我不了解其他人。
第一个问题是将投影渲染目标放到扭曲的网格上。根据我的理解,我应该首先将图像从游戏相机渲染到2(对于每只眼睛)细分四边形,然后对该四边形应用具有校正的着色器,然后在主相机前面绘制四边形。但我害怕,我错了。
第二个是关于顶点位移。我应该简单地应用着色器(将每个对象的顶点坐标从世界空间转换为逆镜头失真和屏幕空间(镜头空间))到相机吗?
P.S。对不起我糟糕的英语,我只是想了解它是如何运作的。
答案 0 :(得分:0)
对于第三种方法(顶点位移),是的。这正是你做的。但是,您必须小心,因为这是一个非线性变换,并且它不会在顶点之间进行适当的插值。您需要对网格进行合理细分,才能使此技术正常工作。其他方面,长边可能会显示为扭曲曲线,您也可能存在z-fighting问题。 Here您可以看到对该技术的良好描述。
对于扭曲的扭曲网格,这是它的方式。您可以将屏幕呈现为渲染纹理而不会失真。通常,此纹理大于实际屏幕分辨率,以补偿失真对表观分辨率的影响。然后创建一个细分四边形,扭曲其顶点,并使用纹理将其渲染到屏幕。由于这些顶点是扭曲的,因此会使图像失真。