【GAD翻译馆】实现虚拟现实场景的转换

发表于2017-09-11
评论22 6.2k浏览

译者:刘鸿(lewis2012251423807     审校:王玥亭(玥亭)

几个月前,我们制作了一个关于如何正确使用SteamVR过渡场景的视频,我们想也许可以做一个书面版本的教程,所以接下来我们将带领大家一步学习。

通常在Unity中,当你尝试加载一个关卡时,有一个非常方便的API,就是调用SceneManager.LoadLevel(string levelname)。假设你已经确定将场景文件添加到了项目的Build Settings中,那么你将转换到你命名的场景里。

Unity里面的Build Settings界面

对于移动设备,或者是部分个人电脑来说,在游戏场景转换期间,可能会遭受一些帧的丢失,因为你的设备在场景转换期间,内存中很多东西需要交换。对于这样的设备来说,通常不是一个大问题,对终端用户来说也几乎察觉不到。对于场景过渡需要较长时间,可以很容易地添加令人讨厌的加载界面。

 

然而,对于VR游戏来说,即使在0.5秒内,也不能接受一些帧丢失。对于患有模拟晕动症的用户来说,帧波动的体验会变得非常不好,它会不断提醒用户他们处于模拟体验中,从而减少了他们的存在感,沉浸感。事实上,如果VR头盔检测到丢帧时候体验是非常糟糕的,应该弹出当前的应用程序直到它VR头盔渲染合格。

解决这个问题的一个简单方法是将当前场景淡化为黑色,然后在黑色场景中过渡FPS下降。然而,对于SteamVR开发者来说,有一种更好的方式。

 

实现

作为SteamVR的一部分,有一个SteamVR_LoadLevel.csc#脚本。为了测试这个脚本,你可以将它添加到任何GameObject上的组件,启用自动触发器,当你点击play时,你将转换到你指定的场景。在我们的视频中(链接底部),我们谈论脚本中更多的属性,所以如果你想要了解更多的细节。

正如您可能已经猜到的,这是一个脚本,你可以使用它来加载关卡而不必导致FPS下降。这里的诀窍是,当你在内存中加载场景时,SteamVR会将场景转换为Compositor,然后在准备就绪时将转换回你的新场景。

这是真的!!

Compositor是一个后台进程,它充当虚拟现实的集线器,你可以从它那里得到通知,转换到不同的应用程序,或者像ReVive一样添加驱动程序。用计算机的术语来说,把Compositor看作你的虚拟现实桌面。

通过使用Compositor,当您加载关卡时,你将有效地使用自定义的低功耗桌面,从而避免了FPS值下降。这是在场景之间转换的建议方法,虽然它在文档中没有明显的说明,但它将为你节省大量时间,避免你去思考为什么会丢失帧。

 

未来的改进

正如现在所做的那样,SteamVR_LoadLevel脚本不是非常灵活,使用起来有点混乱。幸运的是,它是一个开源项目,任何人都可以参与其中。我希望看到的是CubeMap支持Skybox和其他自定义比如在转换过程中可以播放视频。如果有人比我早实现这个,我会很兴奋的。

 

结论

如果你正在开发虚拟现实,尤其是SteamVR,务必使用SteamVR_LoadLevel。如果你想了解如何更详细地使用它,请查看我们下面的视频教程。

https://www.youtube.com/watch?v=OIA0cjY9ETQ

 

【版权声明】

原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。

 

 

 

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: