【VR项目开发系列】使用UE4开发VR项目之性能优化流程
下面给大家分享的是使用UE4开发VR项目中的性能优化流程,如果对UE4开发VR项目中性能优化出现的问题和使用技巧不是很了解的开发者可以看一看。
·创建测试环境
·运行单独的游戏
·使用暂停的画面
·确保帧数不封顶
| 修改分辨率(命令行) |
| 垂直同步关闭(控制台) |
| 更新屏幕百分比(控制台) |
如果多数时间均为 90 fps,而进行修改后帧数大跌,则很可能是遇到了上文所述的合成器“垂直同步”问题。问题解决后,帧数则会大大改善。
找到瓶颈的方法
Stat Unit
·StatUnit 用来判断帧时间瓶颈出现的地方
StatSlow
·查找性能波动问题。
例:Stat Slow 0.01 10 (渲染在过去的10秒内所有运行时间超过10毫秒的循环统计数据)
Viemode
着色器复杂度
红色 | 性能消耗高 |
绿色 | 性能消耗低 |
半透明 | 增加性能消耗 |
光照复杂度
黑色 | 没有收到动态光源影响 |
从绿色到红色 | 受动态光源影响逐渐增加 |
关闭stuff查看效率
r.SetRes | 调整渲染分辨率 |
r.MaxQualityMode | 设置最高质量 |
r.MipMapLODBias | Mipmap Bias |
r.MobileContentScaleFactor | 调整画面缩放比 |
r.ScreenPercentage | 用于减小内部实际渲染分辨率,画面会在重新放大 |
r.ShadowQuality | 移动端Stationaary灯光动态阴影质量 |
r.Shadow.MaxResolution | 移动端Movable灯光动态阴影质量 |
调整show flag 查看效率
ShowFlags. | 开关屏幕反射 |
ShowFlags. AmbientOcclusion | 开关AO |
ShowFlags. AntiAliasing | 开关AA |
ShowFlags. Bloom | 开关bloom |
ShowFlags. DeferredLighting | 开关延迟灯光 |
ShowFlags. | 开关灯光类型 |
ShowFlags. DynamicShadows | 开关动态阴影 |
ShowFlags. | 开关GI |
ShowFlags. | 开关后期 |
ShowFlags. ScreenSpaceReflections | 开关环境反射 |
ShowFlags. Refraction | 开关折射 |
ShowFlags. Decals | 开关贴画 |
ShowFlags. Translucency | 开关半透明 |
ShowFlags. Tessellation | 开关曲面细分 |
ProfileGPU
·ProfileGPU(Ctrl+Shift+,)
ProfileCPU
·使用Profiler将数据捕获到磁盘上进行分析
stat game
stat scenerendering
·显示DrawCall数量 (计算公式:Mesh数量 * Mesh ID * 投影灯光数量)
Profiler
STATStartFile,STAT StopFile
把统计数据捕获到磁盘上(推荐)
StatStartFile(-StartStatsFile) | 开始捕获数据到磁盘中(程序启动开始捕捉) |
StatStopFile | 停止记录和完成统计数据文件 |
StatMemory
·提供关卡中内存使用情况
可能存在的GPU瓶颈
·分辨率
·HMD SP
·投影贴图
·同屏Actor物体数量
·同屏三角面
·顶点数
·灯光数量
·阴影设置
·LOD层级(需要时关闭)
·Shadow 灯光屏幕面积
·三角面密度 如:三角面占屏幕面积小于2*2像素
·顶点处理 点太多
·顶点动画Shader过于复杂
·Tessellation 过于复杂
·有太多套UV
·查看静态模型统计,判断模型顶点和面数差大小
·模型顶点没有合并
·延迟灯光
·使用光照函数 IES 接受投影 区域光
·材质复杂度
·GPU粒子
·反射SSR
·后期AO
可能存在的CPU瓶颈
·DrawCall数量会影响Custom Depth自定义深度
·每个Actor上的Feature 太多
·AI复杂度
·BP复杂度
·屏幕反射追踪
·物理
·内存分配
·动态光源的半径、衰减、 Cone大小角度
·HUD会占用很多性能
· 检查被投影Mesh面数,被投影面数越多,开销越贵,
并且会被灯光数量,投影物体数量放大。
可能存在的内存占用瓶颈
通过限制贴图数量、尺寸、提高模型、材质、贴图的复用率、控制物件、特效数量、及UI相关资源数量,可以达到控制内存的目的。
可能存在的后期瓶颈
·Scene ColorFringe;
·AmbientCubemap,
·Image BasedLens Flares;
·LPV Off;
·Grain Intensity,
·DOF Off,
·Ssr Off,
·Or Roughness0.01;
·MotionBlur Off
VR.INI 设置(DefaultEngine.INI)
r.VolumeMultiplier=1.0 | 体积乘数 |
r.screenpercentage=130 | 屏幕比例设置 |
r.SeparateTranslucency=0 | 修复半透明情况下景深的问题 |
r.HZBOcclusion=0 | HZB环境光遮蔽 |
r.FinishCurrentFrame=1 | 完成当前帧 |
r.MotionBlurQuality=0 | 运动模糊质量 |
r.PostProcessAAQuality=3 | 后期特效质量 |
r.BloomQuality=1 | 光溢出质量 |
r.EyeAdaptationQuality=0 | 模拟眼睛自适应光效质量 |
r.AmbientOcclusionLevels=0 | 环境遮蔽质量级别 |
r.SSR.Quality=1 | 屏幕空间反射质量 |
r.DepthOfFieldQuality=0 | 景深质量 |
r.SceneColorFormat=2 | 能够选用不同的 SceneColor 格式 |
r.SSSSS=0 |
|
r.TranslucencyVolumeBlur=0 | 半透明体积模糊 |
r.TranslucencyLightingVolumeDim=4 | 半透明灯光体积范围 |
r.MaxAnisotropy=8 |
|
r.LensFlareQuality=0 | 镜头光晕质量 |
r.SceneColorFringeQuality=0 | 场景颜色边缘质量(紫边效果) |
r.FastBlurThreshold=0 | 模糊阀值 |
showflag.decals=0 | 贴花选项开关 |
r.SSR.MaxRoughness=0.1 | 屏幕空间反射粗糙度最大值 |
r.rhicmdbypass=0 |
|
r.TiledReflectionEnvironmentMinimumCount=10 | 反射环境最小值 |
sg.EffectsQuality=2 | 特效质量 |
sg.PostProcessQuality=0 | 发布质量 |
Reference
https://docs.unrealengine.com/
Mullin--ぼくりん