当前位置: 首页 > news >正文

unity android 帧数,Unity技术分享(90)|Dalvik Heap内存过高|版本帧率|MeshRenderer

原标题:Unity技术分享(90)|Dalvik Heap内存过高|版本帧率|MeshRenderer

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

UWA QQ群:465082844UWA 问答社区:answer.uwa4d.com

内存

Q1:我们发现刚进入游戏,Dalvik Heap的内存很高,导致PSS比较高,切到后台,再切回游戏,Dalvik Heap内存减少非常多。然后我尝试使用网上说的Android调用GC的方式,System.GC,结合runFinalization。调用Runtime.getRuntime().gc(),都无法有效减少,不知道这块是否有办法有效调用一次?

我们查到原因了,是因为我们在Android层写了一个splash,但这个splash是png的,分辨率是1920x1080,我们之前是int splash_bg = getResources().getIdentifier(bgName, “drawable”, getPackageName());m_BgView.setBackgroundResource(splash_bg);

这张图片在HideSplash会被处于游离状态,要等Java的GC调用后,才会回收,但实际图片按道理内存也不该涨100MB左右,我们用测试工程只有Splash和SplashVideo,发现内存并不会增长那么多,代码一模一样。后面只能解释,可能JVM后某种内存分配算法造成的,当本来比较低的情况,分配会比较少,当到达一定数量级,再分配,就会分配更大一块内存(对Android底层机制不熟)

后面我们改为先从getResources里获得BITMAP,然后给ImageView,再HideSplash时候,调用Bitmap的手动释放方法。

该问题来自UWA问答社区,感谢题主在解决后将其方法分享公开

制作

Q2:我有一个MeshRenderer,它拥有两个材质,现在我想给其设置一个不同的MaterialPropertyBlocks,但据我所知,目前还没有能实现这样的办法,因为当我从Renderer中得到MaterialPropertyBlock后,我是不能指定它还能应用于某个材质了是吧?不知道大家有没有好的解决方法呢?

是的,MaterialPropertyBlocks是以MeshRenderer为单位的,而不是以Material为单位的。只能建议题主对Mesh进行拆分,确保每个Renderer上只挂一个Material。

该问题来自UWA问答社区

性能

最近项目从Unity 4 升级到Unity 5或Unity 2017时,在中低端Android机上,帧率降了10多帧,用Adreno Profiler上查了是GPU Bound。

我们游戏对帧率要求比较高, 游戏的时候必须满帧运行, 所以这个问题很明显。经过折腾,最后查出来是Unity 5 之后, 默认开启了Blit, 分辨率越高,GPU压力越大。 尤其在中低端机上,我用的是Adreno 405测试的, Unity 4能满帧, 但Unity 5或者Unity 2017最高才45左右, 简直不能忍。幸运的是,Unity 2017.2,官方终于开放了设置能禁止Blit. 但是Unity 5就没这个运气了, 根据官方的消息,他们暂时还没有计划把这个引入Unity 5.6,具体帖子可见:https://forum.unity.com/threads/big-performance-issue-with-unity5-on-android.338847

在发现和解决问题的过程中,钱康来同学提供了不少帮助,在此感谢!开这个问题也是让大家知道下,免得像我当初摸石头过河,花太多时间折腾。

该问题来自UWA问答社区,感谢题主的无私分享,建议使用Unity 2017 或者Unity 5 版本的开发者密切注意!

内存

Q3:这个[Triggers RebuildInternalState]是隐藏物体就一定会触发的吗?我看Profiler里最后一列都有提示Warning,感觉挺重要的一个错误。这个要怎么去避免呢,是否会导致Animator.Initialize耗时又变得很明显(在之前有做过缓存的情况下)

24d9d6de43dd1eacf3f19f97a2ba8ed8.png

这个是含有Animation组件的GameObject被Deactive时的引擎Warning,在很多情况下确实会造成较高的CPU耗时。对此,建议题主尝试在GameObject不再需要使用时,直接将其移出屏幕外,并将其挂载的Component进行Disable,而非将其GameObject进行Deactive,这样可以RebuildInternalState的发生。

该问题来自UWA问答社区

Unreal 4 渲染

Q4:你好 我看了UWA关于Unreal全局光照的那篇文章,有几点疑问想问下:1、Unity的Lightmap烘焙时,为什么不能从Normal map获取Normal信息呢?我看Unreal的Lightmass也是烘焙出两张图,一张方向一张颜色。它的颜色可以受NormalMap的影响吗?2、Unreal的一个场景多张Lightmap,例如白天到晚上,渐变是怎么融合的呢?

1、Lightmap中的Directional信息是指烘焙光照的方向信息。在Lightmap中一张是记录光照的Intensity,一张是记录Direcitonal,这个Directional是用来参与Shading中方向相关计算的,例如:高光计算、与normal计算等。如果是纯Dffuse材质也不用Normalmap,这个Directional信息可以去掉,减少存储和计算量。通常在材质中看到的Normalmap指的是Mesh的Normal与Lightmap中记录的Directional并不是同一个值。

2、Unreal中的Precomputed Lighting Scenarios是保存了多套Lightmap以及光照设置,只能做到配合光照进行Lightmap切换,融合现在貌似还做不到。

Q5:烘焙的时候光照的Intensity考虑Normal就类似beast那样,Lightmass烘焙的时候可以提供Normalmap吗?

我是这样理解的:Unity烘焙的时候用了辐射度,也就是先把模型分成块,然后计算快与块之间的反射,不会使用Normalmap。Normalmap提供的是细节的信息,全局光照中间接光的计算结果相对比较低频,比较平滑,加入高频的信息不一定会有好的效果。Unreal 4的lightmass可以有一个选项设置Static类型的光源在烘焙的时候使用normal map,其设在project settings->engine rendering->lighting中。

该问题来自UWA问答社区

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站(answer.uwa4d.com)上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com官方技术博客:blog.uwa4d.com官方问答社区:answer.uwa4d.com官方技术QQ群:465082844(仅限技术交流)返回搜狐,查看更多

责任编辑:

相关文章:

  • signature=fc7ecc5076a2f28da44d79a455e941f3,ECC Signature Generation Device for RFID Tags
  • android 6.0 数据库权限,简单实现安卓系统6.0的权限问题
  • html什么代码确定x坐标,显示X和Y坐标?
  • 网页设计简历中个人作品html,网页设计师简历自我评价填写样本
  • less在html页面中应用,Less 在浏览器中使用
  • Html网页warning,HtmlUnit中屏蔽warnings
  • html乱码框框,zabbix的web界面中文显示方框出现乱码的解决方法
  • html网页文字代码,网页HTML代码:滚动文字的制作
  • win7计算机上缺少网络协议,win7系统安装ipx协议提示找不到相应的模块的解决方法...
  • html显示十进制字符,非法HTML字符:十进制141
  • 计算机网络社团章程,社团日常规章制度
  • 陕西师范大学计算机组成原理试题及答案,陕西师范大学 计算机组成原理(A)07级...
  • 计算机病毒范畴有,计算机病毒是否属于生物的范畴?
  • 计算机培训服务合同,2020年最新版计算机培训合同(合同范本).pdf-汇文网
  • 青岛科技大学计算机专硕复试科目,谈一下青岛科技大学出版专硕考研参考书目有哪些...
  • [Vue CLI 3] 配置解析之 css.extract
  • 《剑指offer》分解让复杂问题更简单
  • 【刷算法】求1+2+3+...+n
  • 2017前端实习生面试总结
  • Apache Spark Streaming 使用实例
  • CSS中外联样式表代表的含义
  • eclipse(luna)创建web工程
  • export和import的用法总结
  • Java 网络编程(2):UDP 的使用
  • java8-模拟hadoop
  • JavaScript实现分页效果
  • js作用域和this的理解
  • leetcode386. Lexicographical Numbers
  • mysql常用命令汇总
  • React系列之 Redux 架构模式
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 百度小程序遇到的问题
  • 分类模型——Logistics Regression
  • 警报:线上事故之CountDownLatch的威力
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 算法-图和图算法
  • 携程小程序初体验
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​如何在iOS手机上查看应用日志
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #include
  • (6)设计一个TimeMap
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)认识微服务
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .NET 4.0中的泛型协变和反变
  • .Net 6.0 处理跨域的方式
  • .net开发引用程序集提示没有强名称的解决办法