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

--官方文档:

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

Unity性能优化-降低功耗,发热量,耗电量之OnDemandRendering篇的更多相关文章

  1. Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译

    本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  2. Unity性能优化(4)-官方教程Optimizing graphics rendering in Unity games翻译

    本文是Unity官方教程,性能优化系列的第四篇<Optimizing graphics rendering in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

  3. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译

    本文是Unity官方教程,性能优化系列的第二篇<Diagnosing performance problems using the Profiler window>的简单翻译. 相关文章: ...

  4. Unity 性能优化(力荐)

    开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...

  5. Unity性能优化(1)-官方教程The Profiler window翻译

    本文是Unity官方教程,性能优化系列的第一篇<The Profiler window>的简单翻译. 相关文章: Unity性能优化(1)-官方教程The Profiler window翻 ...

  6. Unity性能优化的N种武器

    贴图: l  控制贴图大小,尽量不要超过 1024 x1024: l  尽量使用2的n次幂大小的贴图,否则GfxDriver里会有2份贴图: l  尽量使用压缩格式减小贴图大小: l  若干种贴图合并 ...

  7. Unity性能优化专题---腾讯牛人分享经验

    这里从三个纬度来分享下内存的优化经验:代码层面.贴图层面.框架设计层面. 一.代码层面. 1.foreach. Mono下的foreach使用需谨慎.频繁调用容易触及堆上限,导致GC过早触发,出现卡顿 ...

  8. Unity性能优化-DrawCall

    1. DrawCall是啥?其实就是对底层图形程序(比如:OpenGL ES)接口的调用,以在屏幕上画出东西.所以,是谁去调用这些接口呢?CPU.比如有上千个物体,每一个的渲染都需要去调用一次底层接口 ...

  9. Unity性能优化——LOD技术

    LOD,中文名多层次细节,是游戏中最常用的技术,它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算.今天我们来实现使用它来做一个简单的优化例子. ...

  10. Unity性能优化之特效合并

    特效合并,意思是说将粒子所用的零碎图片,以shader为单位合并成一张图集,好处就是可以降低draw call.试想,合并前每个粒子使用一个material,而每一个material就要占用一个dra ...

随机推荐

  1. w3cschool-微信小程序开发文档-组件

    https://www.w3cschool.cn/weixinapp/sp6z1q8q.html 微信小程序视图容器 view view 视图容器. 属性 类型 默认值 必填 说明 最低版本 hove ...

  2. 【Netty】(3)—源码NioEventLoopGroup

    netty(3)-源码NioEventLoopGroup 一.概念 NioEventLoopGroup对象可以理解为一个线程池,内部维护了一组线程,每个线程负责处理多个Channel上的事件,而一个C ...

  3. manim边做边学--缩放变换

    使用 Manim 进行动画创作时,缩放变换是一项强大且实用的功能. 当我们处理复杂的科学模型可视化.数学原理演示时,缩放变换可以帮助我们在不改变元素位置关系的基础上,突出关键信息,引导观众聚焦于特定的 ...

  4. 【SQL跟踪工具】SQL Profiler 跟踪器使用

    阅读目录 什么是SQL Profiler 为什么要使用SQL Profiler 如何使用SQL Profiler 什么是SQL Profiler SQL Server Profiler 是一个功能丰富 ...

  5. 创建Linux iscsi target存储

    配置targetcli 创建存储对象 创建块存储对象            cd /backstores/block        \          create block1 dev=/dev/ ...

  6. Winform UI线程和处理线程交互(进度更新显示)

    在界面开发过程中,会遇到耗时较长的处理过程,一般会将耗时较长的处理放到单独的线程中.然后在界面显示处理进度信息. 实现改效果的两种方式记录: 1. 使用委托: //定义委托,在线程中使用 privat ...

  7. [BZOJ4605] 崂山白花蛇草水 题解

    突然想买一瓶,然后喝上几口.(不要命的想法) 动态全局 \(k\) 大想到权值线段树上二分. 由于要存储二维的点,所以得用到我们神通广大的 \(KDT\) 了. 那么想到权值线段树套 \(KDT\) ...

  8. 几乎全平台的C语言JSON解析工具cJSON[转载]

    最近在做一个外设管理平台,用PYTHON写了一个连接管理,兼容串口和套接字的连接,然后抽象为设备统一管理.使用套接字时JSON是一种很好的数据封装类型,假设我需要远程操控一个设备,发送一个JSON的数 ...

  9. Flink学习(二) 应用场景和架构模型

    实时计算最好的时代 在过去的十年里,面向数据时代的实时计算技术接踵而至.从我们最初认识的 Storm,再到 Spark 的异军突起,迅速占领了整个实时计算领域.直到 2019 年 1 月底,阿里巴巴内 ...

  10. 面试题32 - II. 从上到下打印二叉树 II

    地址:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/ <?php /** 面试题32 ...