很多初学者做出来的场景,一运行就卡成PPT——帧率不到30,风扇狂转。
这不是UE5的问题,是不会优化的问题。
UE5的性能优化是一个系统工程,涉及美术资源、光照、特效、蓝图、C++代码等多个方面。这篇文章把常见的优化手段讲清楚。
性能分析工具:先知道”慢在哪里”
优化之前,先要找到性能瓶颈。UE5提供了很多性能分析命令和工具。
Stat命令:最常用的性能分析工具
在运行游戏时,按~键(或者Backtick键)打开控制台,输入:
stat Unit:显示帧时间(Frame Time)、游戏线程时间、渲染线程时间、GPU时间- 如果
Frame Time约等于Game Thread时间 → 瓶颈在游戏线程(蓝图逻辑太复杂、AI太多) - 如果
Frame Time约等于Draw时间 → 瓶颈在渲染线程(Draw Call太多、材质太复杂) - 如果
Frame Time约等于GPU时间 → 瓶颈在GPU(光照太复杂、后处理太重、分辨率太高)
- 如果
stat FPS:显示帧率stat DrawCalls:显示Draw Call数量(越少越好,一般PC上控制在2000以下)stat TriangleCount:显示屏幕上渲染的三角形数量stat LightCount:显示光源数量stat Memory:显示内存占用
Unreal Insights:更深入的性能分析工具
stat命令只能看到大概,如果要深入分析,用Unreal Insights。
开启方法:
- 在
Project Settings > Und Project > Performance里,勾选Enable Unreal Insights - 运行游戏时,UE会自动记录性能数据
- 用
Unreal Insights工具打开记录文件,可以看到每一帧里每个函数用了多少时间
优化手段一:减少Draw Call(渲染线程优化)
Draw Call是CPU告诉GPU”画这个物体”的次数。Draw Call越多,CPU开销越大。
用HISM(Hierarchical Instanced Static Mesh)
如果一个场景里有1000棵树,每棵树是一个单独的Actor,那就至少有1000个Draw Call。
用HISM,可以让这1000棵树合并成一个Draw Call(或者几个)。
使用方法:
- 在蓝图里,添加
Hierarchical Instanced Static Mesh Component - 设置
Static Mesh(要实例化的模型) - 用
Add Instance节点,在指定位置添加实例(代替手动摆放Actor)
用合并模型(Merge Actor)
如果几个静态模型总是一起出现(比如一张桌子+四把椅子),可以用Merge Actor工具把它们合并成一个模型。
使用方法:
- 在关卡里选中要合并的Actor
- 工具栏 →
Actor > Merge - 设置合并选项(是否合并材质、是否保留碰撞等)
- 点击
Merge,生成合并后的模型
注意: 合并后,这几个模型就变成一个Draw Call了,但每个模型还是独立的碰撞体(不会合并成一个大碰撞体,除非勾选Merge Collision)。
用World Composition / World Partition
对于大世界场景,不可能同时加载所有地形和模型。World Partition(UE5的新系统)会自动管理大世界的分块加载。
在World Settings里,勾选Enable World Partition,然后设置Grid Size(分块大小)。UE5会自动把世界分成网格,只加载摄像机附近的网格。
优化手段二:降低模型复杂度(GPU优化)
使用LOD(Level of Detail)
LOD是”细节层次“的意思。一个模型可以有多个LOD版本:
LOD0:最精细的版本(面数最高,近距离用)LOD1:稍微简化(中距离用)LOD2:更简化(远距离用)
UE5会自动根据模型离摄像机的距离,切换LOD。
创建LOD的方法:
- 在静态模型的编辑器里,找到
LOD Settings - 点击
Generate LODs,UE5会自动生成简化版本 - 也可以导入用3ds Max/Maya事先做好的LOD模型
Nanite:UE5的黑科技
Nanite是UE5的新技术,可以自动处理LOD——你导入一个超高精度的模型(几千万面),Nanite会自动在渲染时做简化,不需要手动做LOD。
开启Nanite:
- 在静态模型的编辑器里,找到
Nanite Settings - 勾选
Enable Nanite - 重新保存模型
注意: Nanite并不是万能的。对于透明材质、蒙皮模型(Skeletal Mesh)、UI,Nanite不支持或者效果不好。这些还是要做LOD。
优化手段三:优化光照(GPU优化)
控制动态光源数量
动态光源(Movable光源)每帧都要重新计算阴影,很费GPU。尽量用静态光源(Static)或者固定光源(Stationary)。
如果一定要用动态光源,控制数量:
- PC上,建议同时照射一个区域的动态光源不超过4-6个
- 移动端上,建议不超过2-3个
使用距离场阴影(Distance Field Shadow)
距离场阴影是预先计算好的阴影近似,性能比动态阴影好很多。
开启方法:
- 在
Project Settings > Rendering里,勾选Generate Mesh Distance Fields - 重启编辑器
- 在定向光的细节面板里,勾选
Cast Distance Field Shadow
合理设置Lumen质量
Lumen很费GPU。在Post Process Volume里,可以调整:
Lumen Scene Detail:场景细节(0.5-2.0之间,值越低性能越好)Lumen Scene Resolution:GI计算分辨率(值越低性能越好)Final Gather Quality:最终采样质量(值越低噪点越多,但性能越好)
对于移动端或者VR,建议把Lumen关掉,改用传统光照(烘焙光照贴图)。
优化手段四:优化材质(GPU优化)
减少贴图数量
一个材质里用到的贴图越多,Shader越复杂,GPU开销越大。
优化方法:
- 把多张灰度图(Roughness、Metallic、AO、Opacity Mask)打包到一张RGBA图的各个通道里
- 用
Texture Coordinate的Tiling参数来控制贴图平铺,而不是用更大的贴图 - 合理设置贴图的
Maximum Texture Size(比如远处的物体,用512×512的贴图就够了,不需要2K)
使用贴图压缩
UE5会自动压缩导入的贴图,但你需要选对压缩格式:
- 颜色贴图(BaseColor):用
BC7(DXT5的升级版,质量更好) - 法线贴图(Normal):用
BC5(只压缩XY通道,Z通道可以重新计算) - 粗糙度/金属度等单通道贴图:用
BC4(单通道压缩) - UI贴图:用
UserInterface2D(不做压缩,保持原质量)
优化手段五:优化蓝图(游戏线程优化)
不要用太多Event Tick
Event Tick每帧都会执行,如果用得太多,游戏线程会很卡。
优化方法:
- 对于不需要每帧检测的逻辑,用
Timer(定时器)来代替 - 比如检测玩家血量,可以每秒检测一次,而不是每帧检测
- 用
Set Timer by Function Name节点,设置检测间隔
减少蓝图节点数量
蓝图节点太多,也会慢。优化方法:
- 把常用的节点组合封装成
函数或者宏 - 对于性能关键的逻辑,考虑用C++重写
移动端优化:手游/VR的特殊考虑
移动端的GPU性能比PC弱很多,需要额外优化:
- 关掉Lumen:用传统光照(烘焙光照贴图)
- 关掉虚拟阴影贴图(VSM):用距离场阴影或者静态阴影
- 降低渲染分辨率:在
Project Settings > Settings > Mobile里,设置Mobile Content Scale Factor(比如0.8,渲染分辨率是屏幕分辨率的80%) - 减少后处理效果:移动端不支持太复杂的后处理(比如Motion Blur、Depth of Field要小心使用)
- 用Mobile渲染器:在
Project Settings > Rendering里,勾选Support Compute Skincache和Use Mobile HDR的对应选项(具体根据UE5版本略有不同)
招聘需求参考(Boss直聘,2026年6月)
看了30多个”UE5性能优化”相关职位:
- 熟练使用性能分析工具:stat命令、Unreal Insights
- 了解常见的优化手段:HISM、LOD、Nanite、Lumen优化、材质优化
- 有实际优化经验:能展示把一个卡顿的场景优化到60帧的过程
- 加分项:会用C++做性能优化(比如用多线程、用Job System)
相关课程: 火星人教育UE5性能优化培训课程,涵盖Stat命令、Draw Call优化、光照优化、材质优化、移动端优化。

评论(0)