Unity3D 优化深入浅出 1-基础篇(公众号笔记)

ABSTRACT

2017-12 公众号笔记,Unity 优化系列开篇。建立移动平台统一内存架构(CPU/GPU 共享物理内存)的底层认知,提出 CPU、总线带宽、GPU、内存四大瓶颈方向,并解释 drawcall、fragment、batching、内存分配四个关键概念,为后续 CPU/GPU/内存分篇铺垫。

核心要点

  • 移动平台(Android/iOS)是统一内存架构,CPU 与 GPU 共享同一物理内存;「内存」与「显存」只是物理内存映射到不同设备的叫法。
  • OpenGL ES 规范下 CPU 与 GPU 之间的 vertex、texture buffer 需要拷贝传输,考验总线带宽;Vulkan 与 iOS Metal 允许共享内存,是更新的方向。
  • 优化四大瓶颈方向:CPU、总线带宽、GPU、内存,定位瓶颈是优化的第一步。
  • drawcall:CPU 对底层图形接口(如 OpenGL ES)的一次调用,曾是衡量优化的核心指标。
  • fragment:渲染管线中「潜在的像素」——顶点处理、光栅化后由片元着色器计算颜色,经深度/透明测试后输出到帧缓冲,未必最终显示。
  • batching(合批):把多次 drawcall 合并为一次;但合并后三角形数过多同样掉帧,且存在大量无法合批的情况,需具体分析。
  • 内存分配需考虑 Mono 托管环境、自带 dll 等额外开销。
  • 实用技巧:脚本右键 Find References In Scene 查找场景引用;Android 可降低分辨率(1080→720)提升帧率,切后台回前台需重设分辨率,紧接打开 NGUI 界面可能闪烁。
  • 编辑器实用技巧:mcs.rspFind References In Scene 等冷门入口值得记录。

关键实体与概念

Unity、drawcall、fragment(片元)、batching(合批)、统一内存架构、OpenGL ES、Vulkan、Metal、Mono、总线带宽、Screen.SetResolution

关联概念

来源回溯

  • 原始文件:raw/ip/wechat_articles/Unity3D优化深入浅出1-基础篇.md(2017-12-11)

时效性评估

  • 仍有效:统一内存架构、drawcall/fragment/batching 等渲染基础概念属于图形学底层原理,至今适用;四大瓶颈分层思路仍是性能分析的通用框架。
  • 已过时:文中以 Unity 5 时代(2017)为背景,Stats 面板已移除 drawcall 指标一说对应旧版本;现代 Unity 应使用 Profiler、Frame Debugger 定位瓶颈。OpenGL ES 已逐步被 Vulkan/Metal 取代,新项目的图形 API 选择面已不同。降分辨率技巧在 URP/HDRP 时代可用 Screen.SetResolution 结合 Dynamic Resolution 更优雅地实现。