虚幻引擎性能分析与优化
2025年4月4日 2025年4月23日
性能分析
-
看帧率
如果120帧每秒,我们称作为满帧,那么绘制一帧约8.3ms。1stat fps
或者
-
看一帧各线程耗时
每一帧的耗时,取决于以下三者中开销最大的线程线程 说明 Game 游戏逻辑 Draw 渲染所需信息,由CPU传送给GPU;梳理要绘制的信息,剔除屏幕外的部分 GPU 绘制耗时 Game和Draw在CPU运行,GPU线程在GPU。如果Game和Draw开销过大,GPU等待CPU,会发生卡帧;
如果GPU开销过大,无法即时接收Game和Draw的数据,并渲染画面,那么也会卡帧。
与每帧耗时最接近的,就是绘制时耗时较大的。
有时也会出现两个线程耗时都与每帧耗时接近,这时有可能是其中一个导致另一个耗时较长,需具体分析哪个是源头。
1stat unit
其中Prims是面数。摄像机朝天和看向其他地方的面数是不一样的。绿色就是ok的,红色不ok。
Game Thread
瓶颈常见于Tick和开销较大的逻辑实现。
如果Niagara使用CPU,也是一个消耗点。
查看tick耗时
1stat game
查看开启tick的Actor log
1dumpticks
可以使用Unreal Frontend Profiler和Unreal Insights进行分析
Draw Thread
-
剔除
Visibility Culling
剔除耗时
1stat initviews
-
Draw Call次数
GPU Thread
- 顶点处理
- 着色
可以使用RenderDoc进行分析
RenderDoc
安装
-
安装软件
RenderDoc -
RenderDoc插件默认已安装
-
设置
需在项目设置插件栏设置RenderDoc安装目录;勾选Auto attach on startup
使用
点击视口按钮或者 Alt-F12
来获取一帧中GPU开销信息
Ctrl-Shift-,
调出GPU Visualizer(若没有弹出,聚焦到保存那一栏之后再按键)
光照烘培
- 设置光照质量
- 构建灯光
构建场景中的静态光照 Static Lighting
:
通过预计算(Lightmass)生成光照贴图(Lightmap),适用于固定光源(如场景中的灯、窗户透光)。
优点:性能开销低,适合静态场景。
缺点:无法实时更新,物体移动时光照不变。
与物体的可移动性(Static/Stationary/Movable)有关。
可移动性 | |
---|---|
Static | 阴影不会改变 |
Stationary | 可以改变阴影 |
Movable | 光源可移动 |
会生成BuildData。
查看未构建灯光物体
运行时查看需烘培灯光Actor
1DumpUnbuiltLightInteractions
Lumen
实时全局光照
半透材质优化
半透材质因为叠加会导致较大开销
-
半透材质
-
优化点
-
Shading Model为Default Lit无用,可以改为Unlit
-
不勾选Cast Ray Traced Shadows(开启开销很大)
-
视情况,可以将Blend Mode改为
Additive
-
考虑需要
Two Sided
勾选
-
Niagara粒子优化
由CPU改为GPU
抗锯齿
Anti-Aliasing
默认 Temporal Super-Resolution
TSR
, 对GPU有要求
改为MSAA,并设置采样频率(越小帧率提高越多)
时间超分辨率
Temporal Super Resolution
TSR
用于提升渲染效率并改善画质。
简单来说,它利用前一帧的信息来生成分辨率更高的图像,从而在不显著增加性能开销的情况下,提供更清晰的画面。
TSR不仅提升分辨率,还具备抗锯齿功能。它通过分析多帧图像,智能地平滑边缘、减少锯齿,同时保持细节。
相比传统抗锯齿技术,TSR在提升画质的同时,性能开销更小。它通过复用前一帧数据,减少了实时渲染的负担。
多重采样抗锯齿
Multisample Anti-Aliasing
参考资料
RenderDoc
虚幻5渲染编程(Tips)[RenderDoc not working in UnrealEngine5.2Preview]