http://blog.csdn.net/cartzhang/article/details/50788894

VR开发中性能问题—OculusWaitForGPU

本文章由cartzhang编写,转载请注明出处。 所有权利保留。 
文章链接:http://blog.csdn.net/cartzhang/article/details/50788894 
作者:cartzhang

**

一、OculusWaitForGPU

在unity 5.3.0f4中测试,使用Unity提供的VR解决方案,直接在Build setting的Playersetting中,勾选使用Virtual Reality Supported,如下图所示: 

在运行程序的Profile时,你会发现OculusWaitForGPU 的占用时间特别高。 
如下图:

二、原因

先说配置: 
Unity 版本:Unity 5.3.0f4 
OC版本:0.8.0 beta的. 
是什么造成这个问题的呢?

网上搜索各种原因,如下: 
1. 有的说是因为,CPU在等待OC的GPU渲染数据返回。 
2. OC内部API强制垂直同步,罪魁祸首是Unity内部集成的当前OC驱动。 
3. Unity个版本问题,不仅仅各个大版本,还有各个小版本之间,有个的f,有的是P。

三、大致的解决方案

为啥说大致的解决方案呢?因为招了半天,没有具体的,也没有谁说有个自己好用,别人也好用的方法。更重要的是OC官方说的方法,也是针对某个版本的暂时之用。

故此,我总结的方法如下: 
1.使用64位模式。 
2.在GUp和shader的渲染处理优化。 
3. 换OC版本试试,使用0.6.0.1,0.7版本的可能效率低。 
4. 5.3.0f4对VR来说不太好,可选择5.2.3p3来解决多线程问题,也就是说你的换换其他版本来测试,安装OC官方推荐版本来试试(下面会给出官方推荐版本连接)。 
5. 对于使用Untiy插件的观众:你的选择有多了一个!!代码来解决,自己修改 TimeWarp,但是OCulus官方说这个是暂时的,以后版本就不能这样用 的。 
关于修改TimeWarp的代码如下:

using UnityEngine;
using System.Runtime.InteropServices; /// <summary>
/// Helper class to modify the internal Oculus TimeWarp values.
/// </summary>
public class OVRTimeWarp : MonoBehaviour
{
public enum VsyncMode
{
VSYNC_60FPS = 1,
VSYNC_30FPS = 2,
VSYNC_20FPS = 3
} #pragma warning disable 414
[SerializeField]
VsyncMode targetFrameRate = VsyncMode.VSYNC_30FPS;
#pragma warning restore #if (UNITY_ANDROID && !UNITY_EDITOR)
[DllImport("OVRPlugin")]
// Support to fix 60/30/20 FPS frame rate for consistency or power savings
private static extern void OVR_TW_SetMinimumVsyncs( VsyncMode mode );
#endif /// <summary>
/// Start modifying the TimeWarp
/// </summary>
void Start()
{
if (!OVRManager.isHmdPresent)
{
enabled = false;
return;
} #if (UNITY_ANDROID && !UNITY_EDITOR)
Debug.LogWarning( "Setting TimeWarp Rate to: " + targetFrameRate );
OVR_TW_SetMinimumVsyncs( targetFrameRate );
#endif
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

看清楚了,这个是需要OC对Unity的插件的,因为看到里面的

OVRManager
  • 1
  • 1

看到这个东西了吧,这个就是需要OVRManager.cs,也就是OC插件里带的相机管理脚本。 
里面还有个宏定义,也就是说在安卓下使用。


#if (UNITY_ANDROID && !UNITY_EDITOR)
[DllImport("OVRPlugin")]
// Support to fix 60/30/20 FPS frame rate for consistency or power savings
private static extern void OVR_TW_SetMinimumVsyncs( VsyncMode mode );
#endif #if (UNITY_ANDROID && !UNITY_EDITOR)
Debug.LogWarning( "Setting TimeWarp Rate to: " + targetFrameRate );
OVR_TW_SetMinimumVsyncs( targetFrameRate );
#endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

什么是TimeWarp呢?这个问题,很好。简单说就是:处理VR,提高帧率的一种手段。但是不是万能的。 
具体参考如下: 
http://xinreality.com/wiki/Timewarp 
http://www.myexception.cn/other/1883027.html

里面讲了TimeWarp的基本原理,时间扭曲和位置抖动等,可以参考一下!! 
就这样了。

最后,就是关于Unity版本推荐的OC官方网:

https://forums.oculus.com/viewtopic.php?t=25882

四、参考链接

https://www.reddit.com/r/oculus/comments/3of567/huge_fps_hit_in_unity_with_vr_enabled/ 
https://forums.oculus.com/viewtopic.php?f=37&t=27963&p=310144&hilit=OculusWaitforGPU#p310144 
http://forum.unity3d.com/threads/major-vr-performance-issue-oculuswaitforgpu-running-on-cpu.328442/

http://xinreality.com/wiki/Timewarp 
http://www.myexception.cn/other/1883027.html

重要更新:2016-07-28 
我们的解决方案: 
目前我们测试的低OculusWaitForGPU的版本为:5.3.2f1版本。当然也不是说其他版本不行。 
只是我们没有测试过。

还有就是:目前对OCulus0.80.支持的最后版本为: 
Unity 5.3.4p4 and 5.4.0b15 were the last versions that supported PC SDK 0.8.!!!

就是这样了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

VR开发中性能问题—OculusWaitForGPU的更多相关文章

  1. 关于VR开发中的穿墙问题随想

    在VR开发中,用户将以第一人称的视角进入虚拟世界,即用户同时身处两个坐标系:1. 现实世界坐标系(如房间的坐标系),用户的身体处于这个坐标系 2. VR世界坐标系,用户的感官处于这个坐标系,即用户觉得 ...

  2. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  3. Cocos开发中性能优化工具介绍之使用Windows任务管理器

    说到Windows平台,我们很快就想到了Visual Studio 2012,然而Visual Studio 2012在这方面没有很好的工具.如果我们只是想知道大体上内存.CPU等在某一事件前后变化情 ...

  4. Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用

    Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动.启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存. ...

  5. Java开发中程序和代码性能优化

    现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...

  6. 使用ThinkPHP开发中MySQL性能优化的最佳21条经验

    使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...

  7. 在 Android开发中,性能优化策略十分重要

    在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...

  8. C++研究之在开发中你可能没有考虑到的两个性能优化

     1:多余的存储引用导致性能减少. 2:利用局部性提高程序性能: 先来说说引用是怎么减少程序性能.个人觉得减少程序性能主要有两个原因,一是数据结构选择不合理,二是多层嵌套循环导致部分代码被多余反复 ...

  9. VR开发2015年终总结

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50617605 作者:car ...

随机推荐

  1. '用Roslynpad做一个轻量级的C#编辑器'

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:'用Roslynpad做一个轻量级的C#编辑器'.

  2. Usage of readonly and const

    Many new learners can not make sure the usage scenarios of readonly and const keywords. In my opinio ...

  3. CentOS 6系统下安装 JDK1.6

    CentOS 6系统下安装 JDK1.6 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的 ...

  4. hibernate 实体关系映射笔记

    @经常使用属性说明:     @Entity:实体类     @Table:指定相应数据表     @Id:主键,使用能够为null值的类型,假设实体类没有保存到数据库是一个暂时状态     @Col ...

  5. .net控件Control透明

    public partial class tspControl : UserControl { public tspControl() { InitializeComponent(); SetStyl ...

  6. 根据Entity Framework6.X 数据生成代码(仅获取表名)

    近来学习ASP.NET MVC ,一直在看韩迎龙(Kencery)的ASP.NET MVC+EF框架+EasyUI实现权限管理.在第九节(TT模板的学习)卡住了,作者使用EF5.0做数据源,而我使用的 ...

  7. 苹果开发工具:Xcode和Interface Builder

    摘要:在Mac OS X上开发,首选Xcode继承开发环境.本文对开发工具套件中最重要的Xcode和Interface Builder两个工具做了简要介绍,并提供<苹果开发工具概述>PDF ...

  8. Spark on Yarn遇到的问题及解决思路

    原文:http://www.aboutyun.com/thread-9425-1-1.html 问题导读1.Connection Refused可能原因是什么?2.如何判断内存溢出,该如何解决?扩展: ...

  9. 跳表SkipList

    原文:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html 跳表SkipList   1.聊一聊跳表作者的其人其事 2. 言归正 ...

  10. The Famous Clock

    描述 Mr. B, Mr. G and Mr. M are now in Warsaw, Poland, for the 2012’s ACM-ICPC World Finals Contest. T ...