原作者:Mullin-ぼくリん
《使用UE4开发VR项目-性能优化》系列文章将分成三篇分别介绍使用UE4开发VR项目的一些工具使用和VR优化思路。目的是总结UE4开发VR项目中常用的一些调试工具和使用方法。本文是第一部分,主要介绍UE4中常用的分析和优化工具。
VR项目初始化设置请参考我的另一篇文章《基于UE4的VR项目基础环境配置和MotionController控制配置》来进行配置。http://gad.qq.com/article/detail/7167914
GPU分析工具可以快速确定VR项目中的多通道GPU性能消耗,更可精确到绘制调用。
适用于PC平台GPU相关数据
控制台命令: ProfileGPU
快捷键: Ctrl+Shift+,
Profile 分析工具用来分析
STATStartFile
STATStopFile
生成的Profile数据。
1、完整数据图表
2、过滤预设窗口
3、数据图表
4、事件图表
**双击即可追踪STATS**
· 着色器复杂度
着色器复杂度视图模式基于每个像素着色的像素着色器指令来描绘场景。
红色:意味着性能消耗非常高
绿色:意味着性能消耗最低
半透明:意味着增加性能消耗
光照复杂度视图模式基于动态光源的数量来对场景进行着色。
黑色:意味着没有收到动态光源影响。
不同颜色:从绿到红,表示受到动态光源的影响逐步增加。
最终目标是使得整个关卡显示为黑色(虽然很难实现)。
STAT UNIT 这是性能分析的第一步。
显示 帧/线程/GPU事件(STAT UNIT)
STAT UNIT 用来判断帧时间瓶颈出现的地方。
帧时间、
游戏线程事件、
渲染线程(描画)时间
GPU时间
使用 STAT FPS 命令来在屏幕上显示帧频率和帧时间
STAT SLOW 用来找到性能波动问题
它可以通过报告运行一帧中特定时间段(默认10毫秒)来逐步定位帧停顿的位置。
运行速度较慢的数据将会在HUD上显示一段时间,从而判断性能波动。
参数以秒为单位(所以10ms也就是0.01秒)
参数可设置持续的时间,默认值是 10秒。
例:STAT SLOW 0.01 10
这将会渲染在过去的10秒内所有运行时间超过10毫秒的循环统计数据。
把统计数据捕获到磁盘上(推荐):
控制台:STATStartFile 开始捕获数据到磁盘中
控制台:STATStopFile 停止记录和完成统计数据文件
参数:-StartStatsFile 在应用程序启动时立即捕获统计数据
调整渲染分辨率
最高质量
Mipmap Bias
画面缩放比
用于减小内部实际渲染分辨率,画面会在重新放大
移动端Stationaary灯光动态阴影质量,调整其值查看帧速变化,以判断瓶颈
移动端Movable灯光动态阴影质量,调整其值查看帧速变化,以判断瓶颈
STAT LEVELS 命令查看内存中加载的关卡数。
红色:关卡已加载并且可见
橘黄色:正在使关卡可见的过程中
黄色:关卡已加载但不可见
蓝色:关卡没有被加载,但是处在内存中,当发生垃圾回收时,它将会被清除。
绿色:关卡没有被加载
紫色 :正在预加载关卡。
黄色的关卡是不需要进行加载及推迟加载的最好备选项
如果一个大的动态载入的关卡,尽量把它进行分隔或者进行优化。
STAT MEMORY 提供关卡中内存使用情况
Audio Memory(音频内存)
NovodexAllocation(Novodex内存分配) 动画
Vertex Lighting(顶点光照)
StaticMeshVertex/Index(静态网格物体顶点/索引)
SkeletalMeshVertex/Index(骨架网格物体顶点/索引)
DecalVertex/Index(Decal 顶点/索引)
VertexShader(顶点着色器)
PixelShader(像素着色器)
Texture Pool Size(贴图池大小)
FaceF
Show Flag 可以用来对渲染特性进行开关。
Show showflagname 可以开关某个具体的特性。
有些渲染特性即便是在不渲染的时候,也仍然会消耗性能。
比如 show particles
能隐藏粒子,但计算模拟时间仍然会运行以便于之后重新打开时功能正确。
x.freezeparticlesimulation 则能够彻底禁止模拟更新的计算
how tessellation 会禁用三角形放大,但依然会使用 tessellation shader。
分析起点应该从下面两点着手
show StaticMeshes
show tessellation
常用的Show Flag 如下:
ScreenSpaceReflections
切换屏幕空间的反射效果,可能会非常影响性能,对那些达到一定粗造度的像素有效
AmbientOcclusion
屏幕空间环境遮罩
AntiAliasing
切换各种抗锯齿(TemporalAA 和 FXAA,FXAA更快,但效果较差)
Bloom
影响那些受到 lensflares 和 bloom 功能的画面。
DeferredLighting
切换所有延迟光照通道。
DirectionalLightsPointLightsSpotLights
切换不同的光照类型(检查光照类型影响性能时有用)
DynamicShadows
切换所有的动态阴影(阴影贴图的渲染,以及阴影的过滤和投影)
GlobalIllumination
切换预烘培和动态间接光照(LPV)
LightFunctions
切换光照函数渲染
PostProcessing
切换所有后处理效果
ReflectionEnvironment
切换环境反射效果
Refraction
切换折射效果
Rendering
切换整体渲染
Decals
切换贴花渲染
LandscapeBrushes StaticMeshesSkeletalMeshes Landscape
轮询切换几种不同的几何体的渲染
Translucency
切换透明度渲染
Tessellation
切换曲面细分(仍将运行曲面细分 shader,但生成更多三角面)
IndirectLightingCache
切换是否动态物体或者静态物体具有使用间接光照 Cache 时无效的光照贴图。
Bounds
显示编辑器中当前选中物体的边界框。
VisualizeSSR
屏幕空间反射像素显示为亮橙色是计算较慢的区域
命令行:
r.SSR.MaxRoughness 0.9= 最佳质量(左)
r.SSR.MaxRoughness 0.1= 运行较快(右)
Unlit(上)
show VisualizeSSR(下)
用一段时间来获取状态数据并生成图表(比如用游戏内的过场,或者设置一段摄像机路径作为测试案例)。用Excel打开结果文件.csv
[ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats
合并多个Actor以及它们的材质和贴图,可以减少材质数量和材质复杂程度。
遮挡较多的地方可以大幅度提高渲染效率
根据尺寸裁剪模型
对不同设备设置不同的渲染参数以节省性能
设置显示细节模式和配置
LOD模型不同细节,根据距离参数优化渲染效率
自动合并静态模型材质减少DrawCall,可以大幅度提高渲染效率
最终的指令数量和采样数量会影响性能,尽量优化其数值
CSM 阴影不会出现调制阴影中的双重阴影,在为多个物体投射阴影时此方法速度较快。
CSM使用了额外的纹理采样器,可通过项目设置将其禁用:
Rendering -> Mobile-> Combined Static and CSM Shadowing,
即可将采样器空出供材质使用。
接收组合阴影的组件需要勾选
Receive CombinedStatic
CSM Shadows fromStationary Lights 标记。
实例化立体渲染,可以减轻 UE4 中的 VR 性能影响。
双眼画面同时渲染运算,能大量降低 CPU 的开销,并改进 GPU 的利用率。
编辑 -> 项目设置 -> Rendering -> VR ->Instanced Stereo
VR项目中常用的工具基本就这么多,接下来将会介绍VR项目性能优化的一些思路和流程。
转载文章地址:http://gad.qq.com/article/detail/7170307