是否可以使用 Unity 预测丢帧,并在此之前停用除相机更新之外的所有内容以避免 VR 不适?

Posted

技术标签:

【中文标题】是否可以使用 Unity 预测丢帧,并在此之前停用除相机更新之外的所有内容以避免 VR 不适?【英文标题】:Is it possible to predict frames dropping with Unity, and before this happens deactivate all but the camera updating to avoid VR sickness? 【发布时间】:2021-07-29 16:47:52 【问题描述】:

由于良好的帧速率在 VR 应用中如此重要,我只是想知道您是否可以预测丢帧?如果是这样,在实际发生此问题之前,您是否可以停用某些脚本或其他功能,除了相机变换的更新和环境渲染?因此,如果性能下降(即帧丢失),则不会感到恶心。

【问题讨论】:

这听起来有点像你在尝试解决Halting Problem。也就是说if(going_to_crash()) dont(); 之类的东西。 tldr;不,我认为这不可能或更多人会这样做。 嗯,我在想更多类似 if( FramesAreDropping()) DontContinueAsNormal() 【参考方案1】:

预测未来的可能性不大,因此当您看到性能下降时,您将不得不即时适应。或者您可以想象创建一个用户可以运行的测试环境,您可以在其中尝试找出用户硬件设置的功能并相应地调整设置以供将来实际应用程序运行。 (即“测试环境在中等设置下运行低于所需的 120fps,因此从现在开始默认为低”)

我不知道你到底在哪个平台上,但万一你在 Oculus 生态系统中,你也许可以得到一些帮助。

默认情况下,在 Oculus 设备上,您会得到他们称为 "Asynchronous TimeWarp" 的支持。这实质上将头显的变换更新和渲染与应用程序的帧速率分离。如果没有可用的最新帧,则将根据最新的头部跟踪信息转换最新帧,从而减少此类打嗝的明显程度。不过,您仍然希望尽可能避免这种情况。

此外,Oculus 在其移动平台上支持"Fixed Foveated Rendering",根据您的 GPU 利用率,设备可以在您的视图边缘以较低的分辨率呈现。在实践中,我发现这非常有效,尽管(顾名思义)它固定在视图的中心并且不包括任何眼动追踪。但与之前的方法一样,不需要它总是更好。

不幸的是,我对其他设备上的选项不太熟悉,但我相信如果存在这些选项,其他人会参与其中。

【讨论】:

以上是关于是否可以使用 Unity 预测丢帧,并在此之前停用除相机更新之外的所有内容以避免 VR 不适?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Unity 3D 输入字段支持的 Windows 10 触摸键盘滑动和预测?

Unity动画系统Animator动态添加事件

使用 CSS3 动画确定丢帧的原因

朴素贝叶斯——实现贴吧精品贴的预测

已停用 iOS 应用程序上的地理位置

是否可以在 Unity 中保存 GameObject 及其组件?