Unity性能优化分析思路
1)Unity性能优化分析思路
2)Unity2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常
3)FBX默认会冗余lit.mat、lit.shader如何解决
4)部分手机(小米12)运行时不时闪退问题
这是第294篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
Unity
Q:Unity有多少优化点?比如合批:静态合批、SRP合批、GPU实例化、UGUI Reruild、光照烘焙、反射探针、光照探针、Shader.Parse、Shader.CreateGPUProgram、场景加载优化和GC优化,还有哪些优化点?
A1:大方向上可以从CPU、内存、GPU这三个方向切入。
细分一下可以从CPU、内存、渲染、资源优化、耗电优化、网络优化、卡顿优化、优化工具的选择掌握这几个点入手。
一、CPU优化
- 缓存计算结果
- 预处理
- 限帧法
- 主次法
- 多线程
- 引擎模块(动画、物理、粒子、导航)
- 逻辑优化
二、内存优化
- 缓存法
- 内存池
- 资源管理器
- 控制GC
- 逻辑优化
- Shader变体数量优化
三、渲染优化
- SetPassCall渲染状态切换频次控制
- DrawCall数量控制
- 带宽负载
- 显存占用
- GPU计算量
四、卡顿优化
- 降帧法
- 摊帧法
- 限制数量法
- 逻辑优化
- IO优化
- 使用进度条
五、资源优化
- 纹理优化
- UI优化
- 字体优化
- 模型优化
- 场景优化
- 粒子优化
- 材质优化
- 指定标准美术规范
- Shader变体数量优化
六、耗电优化
上面说到的优化点,或多或少都会影响到手机的耗电,也是优化耗电的措施,除此之外还有:
- 动态调整限帧
- 动态调整画质
七、网络优化
- 减少无用字段
- 降低字段精度
- 避免重复发送
- 网络异步化
- 压缩无效字节
- 压缩协议包
以上说的这些要点,大部分摘抄归纳自《移动游戏性能优化通用技法》。强烈建议多花些时间认真阅读一下这篇文章,然后以这篇文章作为指南,再去仔细研究里面提到的优化细节该如何展开。
感谢马三小伙儿@UWA问答社区提供了回答
A2:优化点肯定是无穷无尽的,这里搬运UWA的客户端性能优化思路,针对常见的引擎模块的相关问题都做了分析,讲的是比较全比较透的,常见的优化难题都罗列了。
《Unity性能优化 — 物理模块》
《Unity性能优化 — 动画模块》
《Unity性能优化系列 — 资源内存泄漏》
《Unity性能优化系列—Lua代码优化》
《粒子系统优化——如何优化你的技能特效》
《Unity性能优化系列—加载与资源管理》
《Unity性能优化系列—渲染模块》
《Unity性能优化 — UI模块》
《支持资源加载分析、场景分割》
《UWA报告使用小技巧,你get了吗?》
《UWA本地资源检测更新,助你严守项目性能的每个角落!》
感谢芭妮妮@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案
ParticleSystem
Q:Unity 2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常。
在2019及其之前的版本没有这个问题。升级到2020后出现。
子节点的旋转会改变对应的缩放轴,如果x轴旋转了-90度,那么根节点缩放y轴就等于缩放了z轴。
具体见下图:
A:已找到对应官方答复:
《particle-system-behavior-changes-when-it-is-rotated-or-scaled-in-negative-axis》2018.3b版本后不建议对Billboard节点使用旋转和非统一缩放。
感谢jiacat@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案
Material
Q:打AssetBundle包发现会包含lit.mat、lit.shader,原因是FBX默认自带的,有尝试下面方法:
1. 代码设置 renderer.sharedMaterials = new Material[] ,但是下次再打开Unity或Reimport,又变回lit。
2. 监听文件变化,发现是FBX的同上操作,但是这个在打AssetBundle包时又报一些莫名其妙的错误。
请问大家都是怎么处理的?
A1:两种方式解决这个问题:
- 一种是美术在出资源时直接不导出材质资源。
- 一种是自己在Unity导入资源进程里写个批处理,在导出时默认去除掉这材质球。
不管用哪种,都需要导入后,自己在资源上做好策略管理,手动的整理好材质与Shader的目录,跟打包的策略对应。这样可以更好地做好项目规范,还能为后期资源冗余的问题做优化。前期能做好这个规范,后期关于资源冗余的问题也不会太头疼。
感谢廖武兴@UWA问答社区提供了回答
A2:在2020.3.17里面有效,不论是ReImport FBX还是重启Unity,都是有用的:
public class ProcessMaterialImport : AssetPostprocessor {void OnPostprocessModel(GameObject model){var renderers = model.GetComponentsInChildren<Renderer>();if (renderers == null){return;}foreach (var renderer in renderers){if (renderer == null){continue;}renderer.sharedMaterials = new Material[0];}ModelImporter importer = (ModelImporter)base.assetImporter;if (importer != null){if (importer.materialImportMode != ModelImporterMaterialImportMode.None){importer.materialImportMode = ModelImporterMaterialImportMode.None;importer.SaveAndReimport();}}} }
材质球会变成下面这样:
感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案
Memory
Q:目前只出现在小米12手机,Android系统 12,小米系统13.0.16.0。运行后10-20分钟左右就时不时闪退。
Unity版本 2019.4.3f1 L2cpp
E/Unity: Using memoryadresses from more than 16GB of memory
(Filename: /Users/builduser/buildslave/unity/build/Runtime/Allocator/UnityDefaultAllocator.cpp Line: 120)
bool UnityDefaultAllocator::AllocationPage<(RequestType)0>(void const*) const+268) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
UnityDefaultAllocator::RegisterAllocation(void const*)+148) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
UnityDefaultAllocator::Allocate(unsigned long, int)+64) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
MemoryManager::Allocate(unsigned long, unsigned long, MemLabelId const&, AllocateOptions, char const*, int)+308) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
QueueAllocator::QueueAllocator(unsigned int, MemLabelId)+60) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncRead(AtomicNode*)+280) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncCommand(AtomicNode*)+48) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncCommandsInternal()+56) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncCommands()+56) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::AsyncResourceUpload(GfxDevice&, int, AsyncUploadManagerSettings const&)+416) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::RunCommand(ThreadedStreamBuffer&)+26744) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::RunExt(ThreadedStreamBuffer&)+44) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::Run()+136) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::RunGfxDeviceWorker(void*)+4) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
Thread::RunThreadWrapper(void*)+512) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
A1:Unity发行日志说2019.4.15修复了这个问题,我们升级完之后基本不闪退,但是在vivo的安卓12手机上还是有问题,然后又升级到2019.4.34,目前没看到闪退。
感谢大秋衣@UWA问答社区提供了回答
A2:可参考:
Unity Issue Tracker - [Android][IL2CPP] App crashes during launch with "Using memoryadresses from more than 16GB of memory" messages on Android 11
感谢Arboo@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)
Unity性能优化分析思路相关推荐
- Unity性能优化 – 脚本篇
最近开始进行Unity性能优化的工作,主要分为三类:CPU.GPU和内存.由于我们游戏的核心战斗是计算密集型,所以主要是受限于CPU.CPU的优化又分为渲染和脚本,本文将着重于脚本优化. 一般来说,优 ...
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
http://www.cnblogs.com/alan777/p/6135703.html Unity性能优化(2)-官方教程Diagnosing performance problems using ...
- 【Unity性能优化】静态资源优化——Audio优化
文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...
- Unity性能优化 :合批篇
前言 本系列为一些性能优化的小知识,是日常游戏开发中与性能表现的一些点,本篇为该系列文章的第二篇,前篇链接: 第一篇: Unity性能优化:资源篇 在早期Unity中,对于合批的处理手段主要是下面三种 ...
- Unity 性能优化:资源篇
Unity性能优化 大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分: 资源 渲染 程序 项目配置 而在这个部分中,资源的性能优化属于最基础.最有效的优化手段,也是游戏开发者日常 ...
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...
- Unity - 性能优化 - 包体,内存 - 偏静态资源的优化
文章目录 静态资源优化 - AssetPostprocessor Texture 压缩 Model 网格.动画 压缩 音频压缩 纹理的优化经验 尺寸 通道 发布出来的包资源再次分析 如何工具快速定位静 ...
- Unity性能优化全攻略
#Unity性能优化全攻略 总结自Siki的性能优化. ##优化相关前提 ###Unity游戏安装包大/运行卡的原因 Mono虚拟机 解决这个问题 ###DrawCall https://zhuanl ...
- Unity性能优化大合集,All In One !(更新至8.18)
引擎把握篇 性能卡顿.内存泄露.资源冗余...这些开发中遇到的疑难杂症大部分都能在这里找到解决方法.这些经验总结无不通过大量的项目深度优化和周而反复的测试验证.如果你想避开一些不必要的坑,请务必啃下这 ...
最新文章
- Python-编码之大彻大悟
- asyncio.Protocol socket 断线重连
- PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。
- 形态数轴的非递进现象
- python的可变参数 *args 和关键字参数**kw
- 过滤html标签的代码
- 高精度计算PI值 C语言 思路,高精度计算pi
- 解决pytorch softmax警告UserWarning: Implicit ....Change the call to include dim=X as an argument.
- (2)FPGA面试技能提升篇(Perl脚本)
- python主进程退出时子进程也退出_主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程(三)...
- python常用包有哪些品牌_python 常用包总结
- 用C读取INI配置文件 (可在linux平台上用)
- 2021年互联网公司春招有何新变化?大厂要求是这样!
- 博文视点大讲堂第29期——2天玩转单反相机
- 眼图测试(硬件测试、信号完整性测试)
- youtube下载视屏和字幕办法
- 计算机无法关闭开机密码,电脑开机密码怎么取消
- web 原型设计工具_适用于Web设计人员的13+种原型设计工具
- 计算机应用系特色活动,职教桥:用匠心打造计算机应用专业特色课程体系
- 程序员如何写好自己的简历,一位 5 年中大厂老哥跟你聊聊