灌云论坛

Adaptive Performance:高品质画面呈现与流畅稳定帧率的二者兼得

更新时间:2019-04-12 12:12:59    来源:Unity中国    手机版

Adaptive Performance:高品质画面呈现与流畅稳定帧率的二者兼得

Unity中国 2019-04-12 12:12

本文将介绍Adaptive Performance自适应性能功能的详细信息,以及如何将其应用到项目中。

游戏性能与画面呈现的平衡

与PC或主机游戏不同,利用移动设备的完整性能要求对游戏有着精妙的平衡,这样才能使游戏既画面精美又运行流畅。

透支设备的性能会很快降低游戏性能,对硬件产生过大的负担,从而损害电池寿命并产生不稳定的性能。对于开发者而言,考虑到从低端到高端目标设备的庞大设备范围,这个问题会更加棘手。

目前有不同的方法可以解决该问题,其中二个主要方法是:

尝试让游戏在所有目标硬件都有最好的运行效果,这意味着要牺牲图形保真度和帧率。

尝试预测硬件行为,但准确测量硬件趋势的选择并不多,所以该方法很难实现。

Adaptive Performance

Adaptive Performance提供了一种更好的方法来管理游戏在设备上的实时热量和性能情况,使开发者能够主动的即时调整游戏性能和质量设置,利用好硬件性能,并避免过度使用设备性能。

Adaptive Performance可以获得更为可预测的帧率,减少热量积累,实现更长的运行时间和更加舒适的玩家体验,同时保持电池寿命。

对开发者而言,Adaptive Performance会对硬件进行全新的深度分析,使用新工具让游戏更加动态而灵活,在移动设备运行游戏时,给玩家提供最流畅和最优质的体验。

Adaptive Performance会给开发者提供操作系统的常用控制功能,例如:何时运行在高速时钟运转下,避免节流时要调整什么部分。

与三星合作改进Adaptive Performance

我们与全球最大的Android移动设备制造商三星进行合作,从而让Adaptive Performance解决方案走向成熟。

Adaptive Performance自适应性能功能基于三星的GameSDK构建,它会首先适用于Samsung Galaxy系列设备,例如:Samsung Galaxy S10和Galaxy Fold,未来该功能会支持更多Samsung Galaxy设备。

运行结果

下面的图表,我们在Unity GDC 2019 Keynote主题演讲上进行了展示,说明了当《Megacity》项目在全新Samsung Galaxy S10设备上运行时,Adaptive Performance有助于提供稳定的高帧率效果。

我们看见蓝线代表添加了Adaptive Performance后,与未添加功能的红线对比,《Megacity》演示项目运行在30 fps的状态下的时间更长,也更加稳定。

使用《Megacity》展示Adaptive Performance

《Megacity》项目是一个包含数百万个实体的未来主义风格交互式城市,它展示了Unity如何在当今移动硬件上运行极为复杂的项目。

《Megacity》展示Unity面向数据技术栈DOTS的最新功能,包括:实体组件系统ECS,Native Collections本地工具组件,C# Job System和Burst编译器。

《Megacity》项目是展示Adaptive Performance的正确选择,它为我们提供了灵活而动态地适应游戏,主动地利用好硬件性能。Adaptive Performance在开发时考虑到了可扩展性,适用于构建《Megacity》基础的DOTS功能。

《Megacity》项目的移动版本有450万个网格渲染器,20万个建筑部分,10万个音频源,以及超过600万个实体,它是展示Adaptive Performance自适应性能功能理想的选择。

对《Megacity》的处理方式

通过Unity资源包管理器安装Adaptive Performance后,在向设备构建时,Unity会自动添加Samsung GameSDK子系统到项目中。

在运行时期间,Unity会在支持设备上创建并启动Adaptive Performance Manager管理器,该功能会提供移动设备热量状态的反馈。

开发者可以在运行时期间从Adaptive Performance Manager订阅事件或查询信息,从而实时对不同情况做出反应,否则,它只会在Console控制台报告状态。

例如:开发者可以使用我们提供的API,创建在设备上对热量趋势和事件做出反应的应用程序,这可确保较长时间的稳定帧率,同时在节流开始前避免发生热量节流。

在《Megacity》的Adaptive Performance示例实现中,我们使用了以下方法进行优化帧率:

从较低CPU和GPU级别开始,逐渐提高它们的级别,从而消除瓶颈情况,这样可以保持较低的电量消耗。

如果发现设备即将发生节流情况,我们可以调整质量设置以减少热量负载,并且决定降低LOD层级。

一旦即将发生节流时,我们也会减少目标帧率。

当达到目标帧率且温度正在下降时,我们会提高LOD层级,提高目标帧率,再次减少CPU和GPU级别。

这些功能可以让你的游戏在一段时间内实现更流畅的性能。通过密切关注设备的热量趋势,开发者可以动态的调整性能设置,避免节流情况。

了解如何实现这种效果,请下载《Megacity》移动示例项目:

Adaptive Performance Manager

该资源包的核心是Unity在启动时创建的Adaptive Performance Manager管理器,它允许开发者轻松访问和订阅热量和性能事件。

下面的示例代码展示了如何在MonoBehaviour的Start函数使用IAdaptivePerformance接口来访问Adaptive Performance Manager管理器。

private IAdaptivePerformance ap = null;

void Start()

{

ap = Holder.instance;

}

热量事件

当移动设备的热量状态发生变化,Unity就会发送热量事件,重要的状态有:即将发生节流的时候和节流情况已经发生的时候。

在下面的示例代码中,我们会订阅ThermalEvents,以减少或提高lodBias,这有助于减少GPU负载。

using UnityEngine;

using UnityEngine.Mobile.AdaptivePerformance;

public class AdaptiveLOD : MonoBehaviour

{

private IAdaptivePerformance ap = null;

void Start() {

if (Holder.instance == null)

return;

ap = Holder.instance;

if (!ap.active)

return;

QualitySettings.lodBias = 1;

ap.ThermalEvent += OnThermalEvent;

}

void OnThermalEvent(object obj, ThermalEventArgs ev) {

switch (ev.warningLevel) {

case PerformanceWarningLevel.NoWarning:

QualitySettings.lodBias = 1;

break;

case PerformanceWarningLevel.ThrottlingImminent:

QualitySettings.lodBias = 0.75f;

break;

case PerformanceWarningLevel.Throttling:

QualitySettings.lodBias = 0.5f;

break;

}

}

}

如果我们减少lodBias到数值1以下,它会在很多情况下产生视觉影响,发生LOD对象突然改变的情况,但如果对游戏体验没有要求的话,这是减少图形负载的简单方法。

如果想做出更细致的决策来调整游戏图形和行为的处理方法,瓶颈事件会非常实用。

CPU和GPU性能级别

移动设备的CPU和GPU占了功耗的很大一部分,特别是在运行游戏时。

CPU内核和GPU运行在最大时钟速度时的效率较低,运行在高时钟速度下容易使移动设备温度过高,此时操作系统会限制CPU和GPU的频率来降低设备温度。

我们可以使用以下属性,通过限制最大允许时钟速度避免发生这种情况:

IAdaptivePerformance.cpuLevel

IAdaptivePerformance.gpuLevel

应用程序可以基于对当前性能要求的信息来配置这二个属性,并且基于实际情况决定应该提高还是降低级别。

应用程序是否在之前帧达到目标帧率?

应用程序是位于游戏内场景还是菜单位置?

接下来是否有性能消耗较大的场景?

即将发生的事件是否利用大量CPU或GPU性能?

是否展示不需要高CPU或GPU级别的广告?

public void EnterMenu(){

if (!ap.active)

return;

// 在菜单设置低CPU和GPU级别

ap.cpuLevel = 0;

ap.gpuLevel = 0;

// 设置低目标FPS

Application.targetFrameRate = 15;

}

public void ExitMenu(){

// 在回到游戏时,设置较高CPU和GPU级别

ap.cpuLevel = ap.maxCpuPerformanceLevel;

ap.gpuLevel = ap.maxGpuPerformanceLevel;

}

性能瓶颈的警告系统

在Adaptive Performance Manager管理器中,我们可以订阅接收性能瓶颈事件,了解游戏是CPU绑定,GPU绑定还是“帧率绑定”。

帧率绑定意味着游戏受到了Application.targetFrameRate的限制,这种情况下应用程序应该考虑降低性能要求。

GPU Framtime Driver帧率控制工具会运行在后台,管理瓶颈决策,开发者可以通过Adaptive Performance Manager管理器查询信息,它会监视上一帧GPU使用的硬件时间。

目前,CPU时间通过累计Unity内部子系统所用时间来计算。根据游戏和实际情况,开发者可以让工具根据热量状态变化,在游戏处于CPU绑定时或GPU绑定时使用不同的应对方法。

void OnBottleneckChange(object obj, PerformanceBottleneckChangeEventArgs ev) {

switch (ev.bottleneck) {

case PerformanceBottleneck.TargetFrameRate:

if (ap.cpuLevel > 0) {

ap.cpuLevel--;

}

if (ap.gpuLevel > 0) {

ap.gpuLevel--;

}

break;

case PerformanceBottleneck.GPU:

if (ap.gpuLevel

ap.gpuLevel++;

}

break;

case PerformanceBottleneck.CPU:

if (ap.cpuLevel

ap.cpuLevel++;

}

break;

}

}

对游戏进行优化的方法很多,上述示例和《Megacity》项目的示例只提供了一些优化的建议,游戏的优化归根结底取决于最适合特定游戏的方法。

Adaptive Performance更多信息,请访问帮助文档:

https://docs.unity3d.com/Packages/com.unity.mobile.adaptiveperformance@latest

未来发展

现在仅仅只是开始,我们会继续开发Adaptive Performance自适应性能功能,添加更多功能并支持更多设备。

当前资源包提供一个底层API,而我们已经在开发基于组件的高层次API,它兼容DOTS,能够在Unity项目轻松适应性能。

Adaptive Performance预览版已通过Unity资源包管理器面向Unity 2019.1 Beta发布,了解相关最新信息,以及其他开发者的使用方法,请访问Unity官方论坛:

https://forum.unity.com/threads/adaptive-performance-package.652306/


文章转载自网络,作者观点不代表本网站立场,如需处理请联系客服

Unity中国其它文章

Unity实时光线追踪功能演示项目创作过程

Unity实时光线追踪功能演示项目创作过程

Unity实时光线追踪功能演示项目创作过程 Unity中国 2019-04-15 12:12 ...

2019-04-15 12:12:17
使用Sinespace创作和发布多人游戏

使用Sinespace创作和发布多人游戏

使用Sinespace创作和发布多人游戏 Unity中国 2019-04-13 15:05 ...

2019-04-13 15:05:41
Adaptive Performance:高品质画面呈现与流畅稳定帧率的二者兼得

Adaptive Performance:高品质画面呈现与流畅稳定帧率的二者兼得

Adaptive Performance:高品质画面呈现与流畅稳定帧率的二者兼得 Unity中国 2019-04-12 12:12 ...

2019-04-12 12:12:59
影视动画与游戏开发中的角色设计探讨

影视动画与游戏开发中的角色设计探讨

影视动画与游戏开发中的角色设计探讨 Unity中国 2019-04-06 13:10 ...

2019-04-06 13:10:15
使用Shader Graph制作飘动的巨龙

使用Shader Graph制作飘动的巨龙

使用Shader Graph制作飘动的巨龙 Unity中国 2019-04-05 17:20 ...

2019-04-05 17:20:42
Planet:使用Unity构建《David Bowie is》AR应用

Planet:使用Unity构建《David Bowie is》AR应用

Planet:使用Unity构建《David Bowie is》AR应用 Unity中国 2019-04-04 12:12 ...

2019-04-04 12:12:17
支持皮克斯USD格式:USD Unity SDK预览版现已推出

支持皮克斯USD格式:USD Unity SDK预览版现已推出

支持皮克斯USD格式:USD Unity SDK预览版现已推出 Unity中国 2019-04-02 12:12 ...

2019-04-02 12:12:31
使用摄影制图法旋转平面创建资源

使用摄影制图法旋转平面创建资源

使用摄影制图法旋转平面创建资源 Unity中国 2019-04-01 12:12 ...

2019-04-01 12:12:30
使用摄像机和着色器让AI从视觉检测玩家

使用摄像机和着色器让AI从视觉检测玩家

使用摄像机和着色器让AI从视觉检测玩家 Unity中国 2019-03-30 13:35 ...

2019-03-30 13:35:15
UIWidgets-使用Unity开发跨平台应用

UIWidgets-使用Unity开发跨平台应用

UIWidgets-使用Unity开发跨平台应用 Unity中国 2019-03-27 12:12 ...

2019-03-27 12:12:16
Unity中国
Unity中国

最新文章

推荐作者

换一批