Unity 性能分析
学习unity性能分析
在路上看风景
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
3.8 总结
【代码】3.8 总结。原创 2026-03-03 14:44:29 · 120 阅读 · 0 评论 -
4.4 GPU的显存带宽
GPU想象成工厂的"加工车间", 显存是车间旁边的"原材料仓库", GPU内存带宽就是连接车间和仓库的唯一送货通道, 通道宽度是固定的, 一次能送的货就这么多;如果要送的货太多或者送货方式太笨, 通道就会堵车, 哪怕车间(GPU)有空, 也因为没原料干不了活, 游戏就会卡顿、掉帧优化目标: "要么少送货, 要么让送货更高效, 别浪费通道空间"原创 2026-02-12 15:12:14 · 220 阅读 · 0 评论 -
4.7 GPU的并行和调度
GPU出厂自带几千/上万的硬件并行度(天生能同时让这么多核心干活), 但这些核心只会干简单重复的计算活;GPU的调度器就是一个"智能安排员", 它会把大量的重复计算任务, 比如渲染屏幕上的几百万个像素, 分配给这些核心组成的线程组,一旦某个"线程组要等数据, 挂起这个组, 换另一个就绪组上来""GPU调度的最小单位是线程组(Warp/Wavefront)"原创 2026-02-10 17:50:08 · 214 阅读 · 0 评论 -
4.6 显存和缓存
1).显存a.显存是gpu外部的专用大容量存储, 主要用于存放顶点, 纹理, 渲染目标(RT), 阴影贴图后处理缓冲b.特点- 容量大, 以GB为单位, 带宽高, 但是延迟大- GPU工作时几乎会不停地从显存中读写内容2).缓存a.缓存是GPU内部的小容量高速存储, 主要用于存放从显存取出的热点数据, 方便我们重复使用b.所谓热点数据一般在CPU和GPU的优化领域中指的是在短时间内被高频访问的数据, 因为它被用的多, 所以放在更快的存储空间中(比如寄存器、缓存)能极大的提升性能。原创 2026-02-08 17:44:32 · 405 阅读 · 0 评论 -
4.5 顶点和片元
1) . 顶点表示模型的几何数据 , 是组成三角形网格的点;一个 3D 模型实际上就是由很多三角形拼接而成的 , 而三角形的角就是顶点a . 作用是网格的框架点 , 决定了模型的形状b . 着色器的顶点着色器对顶点进行处理和计算 , 将模型的空间的顶点转换到裁剪空间 , 屏幕空间2).片元表示光栅化阶段产生的, 候选的像素点;当三角形被投影到屏幕后, 会覆盖一片像素区域, 每个像素位置对应一个片元, GPU会为它准备一份数据(位置, UV, 颜色等)a.作用。原创 2026-02-07 17:23:31 · 213 阅读 · 0 评论 -
4.3 修改渲染分辨率
【代码】4.3 修改渲染分辨率。原创 2026-02-05 13:11:02 · 189 阅读 · 0 评论 -
4.2 OverDraw
1).OverDraw定义OverDraw表示GPU在同一帧内, 对屏幕上的同一个像素位置, 绘制了超过1次可以用画画做比喻: 你在一张纸上画一幅画, 正常情况是一个位置只涂一次颜料(1次绘制, 无OverDraw)如果先涂红色、再在红色上面涂蓝色, 最后再涂黄色(同一个位置涂3次), 那这个位置的OverDraw次数就是3次关键前提:a.不透明物体默认不会产生OverDraw, GPU有深度测试/深度剔除机制, 先画的不透明物体会占据像素的深度信息, 后画的不透。原创 2026-02-04 15:59:01 · 359 阅读 · 0 评论 -
4.1 填充率
填充率(Fill Rate)表示"GPU在单位时间内能处理(写入)的像素数量", 一般用像素/秒(Pixels per Second, GPixel/s =十亿像素/秒, MPixel/s = 百万像素每秒)来衡量假设RTX4090 GPU的理论填充率为450 Gpixel/s = 4500 亿像素/s, 一个60FPS的游戏, 每帧该GPU理论上能处理4500亿/60=75亿像素, 即每帧可以处理75亿个片元。原创 2026-01-28 17:54:33 · 97 阅读 · 0 评论 -
3.7 SRP Batcher
【代码】3.7 SRP Batcher。原创 2026-01-20 11:30:57 · 184 阅读 · 0 评论 -
3.6 GPU Instancing
GPU Instancing就是GPU实例化 , 它是一种减少Draw Call提高渲染效率的技术 , 主要用来批量绘制大量相同的网格(Mesh) 对象GPU Instancing的主要原理: 开启后, Unity会将一份网格和材质上传到GPU并且还会传递一批实例数据(包含每个物体的模型空间的坐标, 旋转, 缩放矩阵等), GPU收到数据后, 根据对象的实例化ID找到对应的参数, 动态计算世界坐标, 让GPU在一次DrawCall中绘制出许多相同的对象GPU Instancing完整执行流程。原创 2026-01-17 15:32:03 · 173 阅读 · 0 评论 -
3.5 静态批处理
a.静态批处理定义静态批处理(Static Batching)是Unity用来减少CPU Draw Call开销的一种批处理方式,它将多个静态对象(位置, 旋转,缩放都不会在运行中改变的物体)的网格数据合并成一个或少量的大网格, 从而一次性提交给GPU绘制;前提条件: 想要进行静态批处理的物体需要勾选Static中的Batching Staticb . 主要原来Unity加载场景时 , 将使用相同材质的静态物体的网格数据合并成更大的网格;在渲染时 , 这些静态物体就能通过一次DrawCall。原创 2026-01-14 13:44:00 · 63 阅读 · 0 评论 -
3.4 动态批处理
a.动态批处理定义动态批处理(Dynamic Batching)是一种由Unity自动完成的CPU端优化技术, 它会在运行时把"多个使用相同材质的动态物体"的网格数据合并到一次DrawCall中, 从而减少DrawCall的调用次数, 降低CPU提交渲染命令的开销b.动态批处理原理Unity在渲染时, 原本需要将每个物体的网格, 材质数据通过CPU发送给GPU, 即一次DrawCall;假设3个相同材质的3D对象(网格可不同, 材质需相同), 渲染他们需要3次DrawCall;原创 2026-01-13 15:57:29 · 90 阅读 · 0 评论 -
3.3 帧调试器
【代码】3.3 帧调试器。原创 2026-01-10 15:08:10 · 272 阅读 · 0 评论 -
3.2 常量缓冲区
【代码】3.2 常量缓冲区。原创 2026-01-07 15:50:29 · 130 阅读 · 0 评论 -
3.1 DrawCall
DrawCall表示 "CPU准备渲染指令, 让GPU进行渲染的过程"1).配置"渲染状态"(告诉GPU渲染规则)CPU会把当前渲染需要的"规则"整理成数据, 发给GPU的渲染管线:a.深度测试/模板测试规则b.混合模式c.裁剪模式这些都是小量的状态标识/数值(比如用1/0表示开启/关闭深度测试), 不是"拷贝数据", 而是"设置GPU的寄存器/状态位"2).绑定"GPU资源句柄"(告诉GPU用哪个显存资源)原创 2026-01-07 15:45:00 · 215 阅读 · 0 评论 -
2.9 预热Shader
【代码】2.9 预热Shader。原创 2025-12-25 10:58:05 · 294 阅读 · 0 评论 -
2.8 预渲染
在游戏运行前或加载时, 提前将需要渲染的资源(如模型、纹理、着色器等)上传到GPU, 从而避免在游戏运行时首次使用该资源时出现卡顿1).问题来源:a.当游戏运行时, 一个模型(包括网格、纹理、材质等)第一次被渲染时, CPU需要准备数据并上传到GPU;这个过程包括:- 将网格数据(顶点、索引等)上传到GPU的顶点缓冲区和索引缓冲区- 将纹理数据上传到GPU的纹理资源- 编译着色器(如果之前没有编译过)并创建GPU上的着色器资源- 设置常量缓冲区等。原创 2025-12-25 10:46:39 · 255 阅读 · 0 评论 -
2.7 资源加载优化
【代码】2.7 资源加载优化。原创 2025-12-24 13:01:35 · 243 阅读 · 0 评论 -
2.6 禁用未使用的脚本和对象
【代码】2.6 禁用未使用的脚本和对象。原创 2025-12-24 11:08:16 · 123 阅读 · 0 评论 -
2.5 GameObject优化和容器选择
【代码】2.5 GameObject优化和容器选择。原创 2025-12-24 11:00:23 · 218 阅读 · 0 评论 -
2.4 本机到托管的桥接
1).本机到托管的桥接简介本机到托管的桥接表示"unity引擎底层代码(通常是c/c++)与托管代码(c#)之间的交互机制"a.本地代码(Native Code)- 主要是用c++编写的- 包括unity引擎的核心部分: 渲染引擎, 物理引擎, 音频系统等- 直接编译成机器码, 运行效率高- 与操作系统和硬件直接交互b.托管代码(Managed Code)- 主要是开发者编写的c#脚本- Unity IL2CPP模式下的C# 运行在 .net虚拟机(mono或il2cpp)原创 2025-12-23 13:10:57 · 303 阅读 · 0 评论 -
2.3 代码优化技巧
【代码】2.3 代码优化技巧。原创 2025-12-22 10:42:41 · 151 阅读 · 0 评论 -
2.2 频繁内存分配和垃圾回收对于CPU性能的影响
【代码】2.2 频繁内存分配和垃圾回收对于CPU性能的影响。原创 2025-12-19 17:33:35 · 270 阅读 · 0 评论 -
2.1 CPU脚本性能优化简介
【代码】2.1 CPU脚本性能优化简介。原创 2025-12-19 13:49:30 · 340 阅读 · 0 评论 -
1.19 UGUI的准备数据流程
【代码】1.19 UGUI的准备数据流程。原创 2025-12-11 17:15:15 · 177 阅读 · 0 评论 -
1.14 Memory Profiler Package - All of Memory
【代码】1.14 Memory Profiler Package - All of Memory。原创 2025-12-08 11:02:42 · 257 阅读 · 0 评论 -
1.22 Profiler提供的API
【代码】1.21 Profiler提供的API。原创 2025-11-08 16:45:59 · 328 阅读 · 0 评论 -
1.20 File Access
File Access(文件访问)主要用于监控游戏运行过程中对文件系统的访问情况, 显示游戏在运行时读取或写入的行为;包含:a.读取资源(如texture, 音频, 文本)的行为b.写入日志、存档文件的行为c.加载Addressables或AssetBundles的行为d.使用File.ReadAllText、WWW、UnityWebRequest等API的行为e.与StreamingAssets、PersistentDataPath、Resources等目录交互的行为。原创 2025-11-07 17:50:46 · 327 阅读 · 0 评论 -
1.21 Asset Loading
AssetLoading资源加载模块用于统计游戏在运行时加载资源所消耗的时间和调用信息。原创 2025-11-06 17:39:03 · 190 阅读 · 0 评论 -
1.18 UI和UI Details
【代码】1.18 UI和UI Details。原创 2025-11-02 16:17:17 · 298 阅读 · 0 评论 -
1.17 Physic
【代码】1.17 Physic。原创 2025-10-23 17:37:00 · 278 阅读 · 0 评论 -
1.16 Video
a.Total Video Sources: 场景中视频源的总数b.Playing Video Sources: 场景中正在播放的视频源数量c.Pre-buffered frames: 预缓冲帧的总数, 帧数太少可能会导致播放卡顿d.Total Video Memory: 应用程序中的视频所用的系统内存量a.Total Video Sources: 场景中视频源的总数b.Playing Video Sources: 场景中正在播放的视频源数量。原创 2025-10-06 16:01:30 · 249 阅读 · 0 评论 -
1.15 Audio
Unity场景中处于播放状态的Audio Source组件的数量音频引擎(FMOD)"实际受理"并消耗CPU去处理的声音数量, 用于评估真实的CPU性能开销, 这是音频性能瓶颈的直接指标(如果游戏卡顿, 并发现Audio Voices数量持续很高, 比如超过30- 40, 则需要优化)音频在该帧中的CPU使用率, 一般小于10%属于健康, 大于20%则需排查音频引擎在该帧中使用的内存量, 持续增长或过大可能是资源未释放或内存音频太多。原创 2025-09-14 13:45:00 · 238 阅读 · 0 评论 -
1.13 Memory Profiler Package - Unity Objects(unity对象页签)
Unity Objects用于快速定位unity对象内存占用的类型和具体实例a . 查找内存占用最大的资源 , 判断这些资源是否可以压缩或延迟加载b . 查找重复加载的资源c . 查看运行时创建但是没有释放的资源d . 查看脚本对象释放滞留内存常见的一些问题:a.纹理贴图内存过高: 检查下是否重复加载, 未加载, 是否开启read/writeb.相同资源是否多次加载: Name相同, 但是InstanceID不同的对象c.动态资源未释放: 脚本中没有及时释放材质, 纹理等。原创 2025-09-13 21:09:06 · 359 阅读 · 0 评论 -
1.12 Memory Profiler Package - Summary
【代码】1.12 Memory Profiler Package - Summary。原创 2025-09-07 17:45:47 · 327 阅读 · 0 评论 -
1.11 初始Memory Profiler Package
1) . Memory Profiler Package(内存分析器包) 是unity提供给我们的一个关于内存分析的独立工具 , 它获取的是当前时刻 , 全局的内存情况 2) . Memory Profiler Package通过捕获不同时间点的内存快照进行对比 , 来定位内存泄露 , 资源未释放 , 异常增长等问题比如 : 我们进行某些操作时 , 前后各生成两次快照 , 分析内存问题a . 打开一个ui面板前后b . 运行 10 分钟前后c . 切成场景前后当我们。原创 2025-08-31 18:46:08 · 221 阅读 · 0 评论 -
1.10 Memory
1).Memory(内存)模块它是unity中监视内存使用情况的关键工具, 它能帮助我们识别哪些资源在占有大量内存,是否存在内存泄露或垃圾回收频繁等问题2).游戏中如果出现以下问题, 可以重点观察memorya.游戏卡顿, 掉帧- 表现: 游戏突然变慢, 不定期小卡顿, 操作延迟等- 可能原因: 内存不足导致系统频繁进行垃圾回收(GC), 降低游戏帧率b.闪退, 崩溃- 表现: 玩着突然黑屏突出, 特定场景(如加载大地图等)崩溃- 可能原因: 设备分配不出更多内存, 系统强制杀掉进程。原创 2025-08-30 19:09:20 · 375 阅读 · 0 评论 -
1.9 虚拟内存管理机制
【代码】1.10 虚拟内存管理机制。原创 2025-09-05 16:05:13 · 215 阅读 · 0 评论 -
1.8 物理内存和虚拟内存
【代码】1.8 物理内存和虚拟内存。原创 2025-09-05 13:53:35 · 344 阅读 · 0 评论 -
1.7 Rendering模块
1).Rendering(渲染)模块用于显示渲染一帧时的数据量(比如: 批次数, 顶点数等)2).在游戏中如果出现以下问题, 可以重点观察这里的内容a.DrawCall过高导致CPU性能问题(卡顿, 掉帧)b.中低端手机上发热严重, 掉电快c.开启大量实时光照, 粒子, 动态对象后出现掉帧d.画面复杂卡顿, 简单不卡顿。原创 2025-08-30 18:05:43 · 373 阅读 · 0 评论
分享