电源管理
2019-07-14 00:01发布
生成海报
电源管理是一个重要的考虑对移动VR开发。
现在移动设备是令人惊讶强大的,你能把它放入你的口袋--你能合理的期望找到4个2.6GHzCPU核和一个600MHz GPU。充分利用,它们能交付更好的性能比一个Xbox360或者PS3在一些案例中。
在设备监视器上一个管理者处理一个内部的温度和尝试正确的动作当温度上升到超过某一级别来预防故障或者滚烫的表面温度。正确的动作包含降低时钟速率。
如果你辛苦的运行到限制,温度会继续攀升尽管时钟速率是低的,CPU时钟可以下降到300MHz。设备可能恐慌在极端的条件下。VR性能会灾难性的下降。
默认的VR应用时钟速率是1.8GHz,双核,GPU 389MHz。如果你始终使用这些,你最终会运行进热量管理,尽管你最初没有问题。一个典型的表现是可怜的应用性能在10分钟好的演示之后。如果你过滤了日志输出为“thermal”你会看到多种多样的传感器读取的通知和采取的动作。
一个在移动和PC/控制台开发之间的不同鉴定是没有浪费最佳化。不考虑电源,如果你有帧及时准备好,这是没关系的你是使用90%的有效时间或10%。在移动上,每一个操作消耗电池和加热设备。当然,最佳化必须努力(它也能达到一个昂贵的东西),但是它是重要的去注意权衡。
固定时钟级别API
固定时钟级别API允许应用设置一个固定的CPU频率和一个固定的GPU频率。
在现代设备上,CPU和GPU时钟速率是完全固定的由应用设置的值直到设备温度达到限制,在这时CPU和GPU时钟会改变电源来保存频率。这个改变能被检测到。一些应用可以继续操作在一个退化的样式中,可能改变到30FPS或者单通道渲染。其他的应用可以显示一个警告屏来告诉演示不能继续了。
由固定时钟等级API设置的固定CPU等级和固定的GPU等级是抽象的等级,不是MHz/GHz,所以一些现在的努力使他们兼容未来的设备。对现在的硬件,0,1,2,3为CPU和GPU等级。0是最慢的和最有效率的;3是最快的和最容易发热的。典型的在0和3等级之间的不同是两个因素(速度和温度)。
不是所有的时钟组合是有效的对所有设备。例如。最高的GPU等级可以不是有效的为使用两个最高的CPU等级。如果一个无效的矩阵组合被提供,系统不会收到请求和时钟设置会进入动态模式。VrApi会断言和解决一个警告在这个案例中。
注意:组合(2,3)和(3,3)是允许初始化设备的发布版。然而,我们强烈阻止使用它们,就和它们喜欢快速导致过热。我们也不推荐使用CPU等级4和5和GPU 等级4,它们由S6,S6Edge和Note5的一些模型支持,就像它们喜欢导致可怜的性能在设备上(它们不支持这些等级)。
电源管理和性能
这儿没有魔法设置在SDK中来修复电源消耗--这是鉴定过的。
你的应用的运行的时间(进入热限制之前)长度依赖两个因素:你的应用做多少工作,时钟频率。改变时钟频率一直下降也只能减少大约25%在电源消耗上为同样的任务数量,所以很多电源节省是减少你应用的工作。
如果你的应用能运行在(0,0)设置,它应用不会有发热问题。两核工作在1GHz和一个240MHz GPU,所以它是必定可行的使复杂应用在那个等级上,但是Unity应用可能是困难的来最优化这个设置。
这是有效的工具来减少需求的GPU性能:
1.不使用 {MOD}彩失常修正在时间异常上。
2.不使用4xMSAA。
3.减少眼目标的分辨率。
4.使用16位 {MOD}彩和深度缓冲区可能有帮助。
5.它可能不是一个好的方法来减少到2xMSAA--你应该用减小眼目标的分辨率来代替。
这些是承担质量权衡(它们需要被平衡违反步骤)你可以在你的应用中采用:
1.减少透支(尤其是混合粒子)和复杂着 {MOD}。
2.一直确保纹理是压缩的和变频解码的。
大体上,CPU加载导致更多的热量问题不GPU加载。减小CPU性能需求不是直接了当的。Unity应用应该一直使用多线程渲染选项,因为双核运行在1GHz工作比单核运行在2GHz更有效。
如果你发现你只是没有接近,你可能需要设置MinimumVsyncs为2并运行你的游戏在30FPS,用TimeWarp产生另外的帧。一些事情解决好就像这样,但是一些接口风格和场景结构强调局限性。更多的怎样设置MinimumVsyncs的信息,请看TimeWarp技术注意。
总之,我们一般的设备:
如果你制作一个应用,它可能会使用一个长的时间周期,就像一个电影播放器,挑选非常低的等级。理想上使用(0,0),但是它可能使用更多的图形如果CPUs是一直大部分停顿,可以上升到(0,2)。
如果你是可以对应用被限制在10分钟演示的块,你能选择高的时钟等级。如果它工作的很好在(2,2),你可能需要做一些高级的工作。
在时钟频率固定下,在日志输出中观察FPS和GPU时间。GPU时间报告不包含时间花费在解决渲染回退到主内存重片上内存,所以它是被低估的。如果GPU时间保持在12ms或之下,你能减少你的GPU时钟等级。如果GPU时间是低的,但是帧率不是60FPS,你的CPU被限制的。
一直构建最佳化的应用版本为发布。甚至如果一个调试构建执行的很好,它会消耗更多的电力和加热设备比一个发布版本。
最优化知道它运行的很好。
更多的关于怎么改善你的Unity应用的性能的信息,请看“最佳实践:Mobile”在Unity集成指南中,移动SDK文档。
电源状态通知和减少策略
移动SDK提供电源等级状态监测和处理。
电源等级状态涉及到是否设备是正在操作在正常时钟频率下或者设备已经上升超过了一个热量阈值等正在发生。在电量节省模式下,CPU和GPU频率会被切换到电源节省等级。电源节省等级是等价的设置固定CPU和GPU时钟等级为(0,0)。如果温度继续上升,时钟频率会被设置为小数值(它们不是VR应用能支持的)。
一旦我们检测到热量正超过阀门正在发生,应用可以选择继续操作在一个退化的模式或者立即退出到Oculus菜单并发出一个头部追踪错误消息。
在第一种情况下,当应用第一次从正常操作转换电源节省模式,下面的会发生:
1.通用菜单会出现来显示一个可解雇的警告消息指示设备需要冷却。
2.一旦消息被解雇,应用汇恢复到30Hz时间异常模式并关闭 {MOD}彩失真修正。
3.如果设备时钟频率超过节气阀到小等级在继续使用之后,一个不能消失的错误消息会被显示,用户必须离开设备。
在这个模式下,应用可以选择采取附加的应用指定测量来减少性能需求。在native应用,你可以使用下面的应用接口调用来检测是否是电源节省模式:GetPowerSaveActive().在Unity中,你可以使用下面的插件调用:OVR_IsPowerSaveActive().在Moonling/OVRModeParms.cs有更多的细节。
在第二种情况下,当应用从正常操作转换到电源节省模式,Universal Menu会被显示并展示一个不能消失的错误消息和用户必须离开设备。这个模式倾向应用不可以好好的执行在减少等级甚至打开30Hz TimeWarp。
你可以使用下面的调用来关闭或打开电源节省模式策略:在Native,设置settings.ModeParms.AllowPowerSave在VrAppInterface::Configure()为真来让电源节省模式处理,或值为假来立即显示头部追踪错误消息。
在Unity中,你可以使能或不使能电源节省模式处理渠道OVR_VrModeParms_SetAllowPowerSave().查看Moonlight/OVRModeParms.cs获取更多的细节。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮