VR开发中性能问题—OculusWaitForGPU
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 savingsprivate 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.!!!
就是这样了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
转载于:https://www.cnblogs.com/jukan/p/6037628.html
VR开发中性能问题—OculusWaitForGPU相关推荐
- 【狂云歌之unity_vr】VR开发中的优化
[狂云歌之unity_vr]VR开发中的优化 前言 大概做了大半年的VR开发,HTCVive上与room scale和手柄控制器.激光相关的开发做过,gearvr使用oculus sdk开发做过,使用 ...
- 7个VR开发中容易混淆的概念:SteamVR、OpenVR、OpenXR……
在进行Unity VR应用程序开发过程中,有几个容易混淆的概念, 本文将尝试做一次区分,如果有任何疑问,读者可在文末留言共同讨论.这几个概念包括OpenVR .OpenVR Desktop.OpenV ...
- Unity VR开发中UI始终优先渲染不被物体遮挡
Unity VR开发中UI始终优先渲染不被物体遮挡 在用Vive开发VR的时候,3DUI很容易被场景中的物体遮挡,解决办法是使用一个Shader:Overlay.shader,这个shader很好找, ...
- VR开发中陀螺仪数据转换
1.判断手机是否支持陀螺仪 SystemInfo.supportsGyroscope 2.获取陀螺仪数据并转换 Gyroscope gyro = Input.gyro; gyro.enabled = ...
- VR硬件演进与其游戏开发中的若干注意事项
最近两年虚拟现实(Virtual Reality,简称VR)从刚刚走进公众视野到逐渐变得炙手可热,很多不同领域的IT开发者都想进入虚拟现实领域.本篇文章将首先讲解VR入门所需要学习的知识,然后从VR软 ...
- VR开发基础(一)一文理清unity xr plugin架构与openxr标准
一,VR开发中的几个概念:从openVR到openXR 1. OpenVR OpenVR是Valve公司开发的一套包含一系列SDK和API的工具集,旨在从驱动层级为硬件厂商提供软硬件开发支持.硬件设备 ...
- 【获奖公布】走进VR开发世界——我们离开发一款VR大作还有多远?
此次征文比赛以分享VR开发经验为核心,在对所有参赛文章进行审核后,以"开发"为先,评选出一.二.三等奖,共9名. 获奖名单 奖项 文章 作者 评语 一等奖 <VR游戏交互开发 ...
- 访《VR开发实战》作者冀盼——VR 开发者的核心竞争力
"一边是火焰,一边是深海",可谓是 VR 行业的真实写照,因资本而起又因资本而却的 VR ,一时之间宛如六月天.如今硬件不温不火持续地升级,应用也一步一步地向 B 端市场摸索前行, ...
- 谈谈VR游戏中的性能优化
VR游戏相对传统游戏,个人认为主要有三个方面的不同:玩法设计,输入方式,性能压力.今天就来谈一下VR游戏中的性能优化. 为什么VR游戏的性能压力很大? ·主要有三个因素的影响:高帧率,高分辨率,画两遍 ...
最新文章
- Bitcoin ABC发布11月BCH升级要点,快看做了哪些改变?
- pythonfopen_Python之文件读写详解
- 关于bcp的那些事儿
- canopy算法流程_求助,kmeans(Canopy)算法如何正确导入数据集
- 7.18 collection random os sys等模块
- my-innodb-heavy-4g.cnf
- LeetCode 88. Merge Sorted Array
- 海外新趋势:挑战Tiktok,跨境卖家的新红利流量渠道?
- 虚拟机搭建测试环境(一)
- WIN10 下 autocad2006 及其他版本打开文件多窗口不能一个窗口的解决办法
- Hough直线检测的原理与实现
- 基于物理-虚拟协同图网络的客流预测
- 计算机知识高级试题,计算机高级技能证试题目计算机操作员高级理论知识复习.doc...
- 回溯法求地图填色实验(剪枝)
- 屏幕序列Screen Sequences
- PEID加密算法识别插件Krypto ANALyzer
- 如何使用掘金进行量化策略效析
- 正弦波放大电路与移相电路设计
- 20230308 Apdl lsdyna两杆撞击案例学习笔记
- Android仿淘宝页面布局