首页 > 其他分享 >Unity性能优化-降低功耗,发热量,耗电量之OnDemandRendering篇

Unity性能优化-降低功耗,发热量,耗电量之OnDemandRendering篇

时间:2024-10-31 15:21:59浏览次数:1  
标签:OnDemandRendering 渲染 Unity 测试 手机 using 耗电量 降低功耗

公司游戏项目,手机运行严重发烫,耗电量飞快。在暂时无法做其他美术性和技术性优化的情况下,我写了这个公司内部文档,并做了个实验,今天干脆公布出来,希望对大家有用。

 

--官方文档:

Unity - Scripting API: OnDemandRendering

--Youtube讲解:

https://www.youtube.com/watch?v=RYgWn6jbteY

youtube上的极端实验结果:

 

 

好,现在我们来做一下实验,看把渲染帧率从60,动态降低到12左右,手机耗电量会降低多少,温度是否能降低。

第一次测试:
我们把如下代码挂到场景中任意一个游戏体,设置渲染帧率60的情况下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;


public class Change_Frame : MonoBehaviour
{

// 目标帧率
public int FrameRate = 60;


// Start is called before the first frame update
void Start()
{
//QualitySettings.vSyncCount = 0;
Application.targetFrameRate = FrameRate;
// 降低帧率
// If there isn't any input then we can go back to 12 FPS (every 5 frames).
// OnDemandRendering.renderFrameInterval = 5;
}

// Update is called once per frame
void Update()
{

}
}
开始测试,手机电量为78%,测试开始时间,8:27,如下:

 

结束测试,手机电量为72%,测试结束时间,8:42,如下:

 

第一次测试结论:

测试时长:15分钟,耗电量6%,手机明显发热,略烫手,肯定是40度以上。

第二次测试:
我们把代码改一下,其实就是取消OnDemandRendering.renderFrameInterval = 5; 的注释,把渲染帧率设置为12:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;


public class Change_Frame : MonoBehaviour
{

// 目标帧率
public int FrameRate = 60;


// Start is called before the first frame update
void Start()
{
//QualitySettings.vSyncCount = 0;
Application.targetFrameRate = FrameRate;
// 降低帧率
// If there isn't any input then we can go back to 12 FPS (every 5 frames).
OnDemandRendering.renderFrameInterval = 5;
}

// Update is called once per frame
void Update()
{

}
}
开始测试,手机电量为71%,测试开始时间,9:00,如下:

 

结束测试,手机电量为72%,测试结束时间,8:42,如下:

 

第二次测试结论:

测试时长:15分钟,耗电量3%,手机不怎么发热,感觉在室温左右,总之肯定低于36度。

 

结论:
使用OnDemandRendering可以动态调整渲染帧率。 渲染帧率的下降,无疑会对耗电量、功耗、发热量产生积极影响。

多说一句,其实Adaptive Performance方案,我个人理解,也是通过:感知硬件状况,比如温度、功耗等等,然后通过调节渲染帧率、调节LOD水平,去达到一个动态的功能和功耗的平衡。就是三星那个项目,有着非常可观的性能和较低的功耗。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/chenggong2dm/article/details/125106939

标签:OnDemandRendering,渲染,Unity,测试,手机,using,耗电量,降低功耗
From: https://www.cnblogs.com/gangtie/p/18517902

相关文章

  • Unity控制物体透明度的改变
    目录标题效果图代码调用注意事项效果图代码注意:在控制全部的模型进行透视时,已经隐藏的子物体仍然要处理。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingDG.Tweening;publicclassFadeModel{privateGameObj......
  • 【Unity】UGUI模拟NGUI的UISprite-->LImage
    UGUI本没有像NGUI方便使用图集的组件,之前也写过继承Image,加入SpriteAtlas作图集,切换图片显示的组件,现在弄一个3.0版本的这个组件的诞生源于上一篇:【Unity】Addressables下的图集(SpriteAtlas)内存优化==========================================================================......
  • Unity项目Native Crash问题修复原理
    背景相信大家公司有crash的收集途径的工具,肯定会看到大量的一种错误类型SIGSEVG(SEGV_MAPERR),这个crash其实并不属于恶性crash,对游戏体验不会造成严重的影响;另外,这个crash也只会在某些特定机型和系统上才会出现,非所有设备都会出现,其它细节也暂不明确,所以我们大部分情况是不......
  • Unity的SkinnedMeshRenderer性能优化
    Unity支持两种主要的Skinning技术在Unity中,Skinning主要指的是角色的蒙皮过程,这是3D动画中的一个关键步骤,用于将3D模型的网格(皮肤)附着到骨骼上,使得模型可以根据骨骼的动作进行逼真的变形。Unity支持两种主要的Skinning技术:CPUSkinning和GPUSkinning。1.CPUSkinning......
  • 【Unity】Addressables下的图集(SpriteAtlas)内存优化
    前言:资源管理系统:AddressablesUI:模拟NGUI图集Sprite,在UGUI下继承Image增加UIImage组件,实现将SpriteAtlas组件拖拽到属性面板上,切换选择里面的小图问题:在检查项目内存占用过高问题时,发现直接拖拽上去的资源不受Addressables系统的自动引用管理,导致部分资源虽然没有引用,但是未被释放......
  • CommunityToolkit.Mvvm中的Ioc
    什么是Ioc在软件工程中,控制反转(IoC)是一种设计原则,其中计算机程序的自定义编写部分从外部源(例如框架)接收控制流。术语“反转”是历史性的:与过程式编程相比,具有这种设计的软件架构“反转”了控制。在过程式编程中,程序的自定义代码调用可重用库来处理通用任务,但在控制反转的情况下,是......
  • 【Unity休闲风格UI资源】GUI - Casual Fantasy
    GUI-CasualFantasy是Unity的一款用户界面(GUI)插件,专为休闲幻想类游戏设计,提供了一套完整的UI资源和工具。该插件能帮助开发者快速搭建符合幻想风格的用户界面,适合各种类型的游戏,特别是带有轻松、卡通风格的RPG、冒险、策略等游戏项目。以下是它的主要功能和特点:1......
  • Unity 调用外部exe
    usingSystem;usingSystem.Diagnostics;usingSystem.IO;usingUnityEngine;publicclassRunExe:MonoBehaviour{publicstaticvoidStartExe(stringfilePath){//构建exe文件的完整路径stringexePath=Path.Combine(filePath);//......
  • Unity 三级目录
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.UI;publicclassMenuManage:MonoBehaviour{//StartiscalledbeforethefirstframeupdatepublicTransformmenus;privateTransformslice1;......
  • Unity 滑动条 SlideView
    usingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;publicclassSlideView:MonoBehaviour{publicSliderslide;publicScrollbarsb;//UsethisforinitializationvoidStart(){if(transform.name=="Sc......