如何为 VR 准备我的游戏?

How to prepare my game for VR?

假设我们有一些 C++ OpenGL 游戏。它使用我们自己的渲染引擎(也不是 Unity、UE 等)。让我们简化我们的问题。

例如,我们需要在VR模式下渲染一些简单的立方体。我们应该为此做什么?

我知道我们需要将屏幕分成两部分。但那又怎样?如何计算两个部分的旋转、距离?

我所说的 VR 是指 VR Box、Gear VR、Oculus Rift 等设备

所有主要头显在其网站上都有 API 文档,说明如何将 VR 支持集成到您的引擎中。您应该参考该文档了解详细信息。我的经验主要是使用 Oculus SDK,但其他 SDK 类似。

您通常不会自己直接将屏幕一分为二 - 您向 SDK 提供左右眼视图的图像,然后 SDK 对镜头光学执行变形并将输出发送到 HMD 显示器.

SDK 提供 APIs 来获取渲染每只眼睛的视图所需的相机和视口参数。使用 Oculus SDK,您还可以通过 API 调用获取每个眼视图的渲染目标。您可以根据 API 提供给您的 HMD 位置、方向、视野、目标分辨率等信息,构建视图和投影矩阵并为每个眼视图设置视口。

每只眼睛的渲染与您已经在引擎中进行的渲染基本相同,但当然您必须使用 SDK 提供的相机和视口信息渲染两次(每只眼睛一次),并且可能希望渲染第三个视图以显示在常规监视器上。您可能想要重组引擎的某些部分以提高效率,因为左眼和右眼视图非常相似,而不是天真地渲染整个场景两次,但这并不是绝对必要的。

可能会在一帧结束时调用,告诉 SDK 您已完成渲染并提交完成的眼缓冲区以供显示。除此之外,没有那么多了。 VR 渲染的大部分挑战在于实现所需的性能,而不是集成在显示方面相当简单的 SDK。