UE4 渲染优化

 

《使用UE4开发VR项目-性能优化》系列文章将分成三篇分别介绍使用UE4开发VR项目的一些工具使用和VR优化思路。目的是总结UE4开发VR项目中常用的一些调试工具和使用方法。本文是第一部分,主要介绍UE4中常用的分析和优化工具。 

VR项目初始化设置请参考我的另一篇文章《基于UE4的VR项目基础环境配置和MotionController控制配置》来进行配置。http://gad.qq.com/article/detail/7167914


· 调试分析工具


· GPUProfiling(GPU性能分析)

  GPU分析工具可以快速确定VR项目中的多通道GPU性能消耗,更可精确到绘制调用。

  适用于PC平台GPU相关数据

  控制台命令: ProfileGPU

  快捷键: Ctrl+Shift+,


 


· Profile 分析工具

  Profile 分析工具用来分析

STATStartFile

STATStopFile

  生成的Profile数据。

 


1、完整数据图表

2、过滤预设窗口

3、数据图表

4、事件图表

  **双击即可追踪STATS**

 

· 视图模式

· 着色器复杂度

  着色器复杂度视图模式基于每个像素着色的像素着色器指令来描绘场景。

  红色:意味着性能消耗非常高

  绿色:意味着性能消耗最低

  半透明:意味着增加性能消耗



· 光照复杂度

  光照复杂度视图模式基于动态光源的数量来对场景进行着色。

  黑色:意味着没有收到动态光源影响。

  不同颜色:从绿到红,表示受到动态光源的影响逐步增加。

  最终目标是使得整个关卡显示为黑色(虽然很难实现)。



· 光照贴图密度



· 统计工具



· 调试分析命令

· STATUNIT

  STAT UNIT 这是性能分析的第一步。

  显示 帧/线程/GPU事件(STAT UNIT)

  STAT UNIT 用来判断帧时间瓶颈出现的地方。

  帧时间、

  游戏线程事件、

  渲染线程(描画)时间

  GPU时间

  使用 STAT FPS 命令来在屏幕上显示帧频率和帧时间 



· STATSLOW

  STAT SLOW 用来找到性能波动问题

  它可以通过报告运行一帧中特定时间段(默认10毫秒)来逐步定位帧停顿的位置。

  运行速度较慢的数据将会在HUD上显示一段时间,从而判断性能波动。

  参数以秒为单位(所以10ms也就是0.01秒)

  参数可设置持续的时间,默认值是 10秒。

  例:STAT SLOW 0.01 10

  这将会渲染在过去的10秒内所有运行时间超过10毫秒的循环统计数据。



· STATStartFile,STAT StopFile

  把统计数据捕获到磁盘上(推荐):

  控制台:STATStartFile 开始捕获数据到磁盘中

  控制台:STATStopFile  停止记录和完成统计数据文件

  参数:-StartStatsFile 在应用程序启动时立即捕获统计数据



· r.SetRes

  调整渲染分辨率

· r.MaxQualityMode

  最高质量 

· r.MipMapLODBias

  Mipmap Bias

· r.MobileContentScaleFactor

  画面缩放比

· r.ScreenPercentage

  用于减小内部实际渲染分辨率,画面会在重新放大

· r.ShadowQuality

  移动端Stationaary灯光动态阴影质量,调整其值查看帧速变化,以判断瓶颈

· r.Shadow.MaxResolution

  移动端Movable灯光动态阴影质量,调整其值查看帧速变化,以判断瓶颈 

· statSceneRendering


· statGame



· statDumpFrame -ms=0.1

· statSceneupdate

· STATLEVELS

  STAT LEVELS 命令查看内存中加载的关卡数。

  红色:关卡已加载并且可见

  橘黄色:正在使关卡可见的过程中

  黄色:关卡已加载但不可见

  蓝色:关卡没有被加载,但是处在内存中,当发生垃圾回收时,它将会被清除。

  绿色:关卡没有被加载

  紫色 :正在预加载关卡。

  黄色的关卡是不需要进行加载及推迟加载的最好备选项

  如果一个大的动态载入的关卡,尽量把它进行分隔或者进行优化。



· STATMEMORY

  STAT MEMORY  提供关卡中内存使用情况

  Audio Memory(音频内存)

  NovodexAllocation(Novodex内存分配) 动画

  Vertex Lighting(顶点光照)

  StaticMeshVertex/Index(静态网格物体顶点/索引)

  SkeletalMeshVertex/Index(骨架网格物体顶点/索引)

  DecalVertex/Index(Decal 顶点/索引)

  VertexShader(顶点着色器)

  PixelShader(像素着色器)

  Texture Pool Size(贴图池大小)

  FaceF

· ShowFlags

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(下)

 


· StartFPSChart,StopFPSChart

  用一段时间来获取状态数据并生成图表(比如用游戏内的过场,或者设置一段摄像机路径作为测试案例)。用Excel打开结果文件.csv

  [ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats


· 和优化相关的工具

· MergeActors(融合Actor)

  合并多个Actor以及它们的材质和贴图,可以减少材质数量和材质复杂程度。


· PrecomputedVisibilityVolume(预遮挡计算)

  遮挡较多的地方可以大幅度提高渲染效率


· CullDistanceVolume(裁剪体积)

  根据尺寸裁剪模型


· DeviceProfile(设备概述文件)

对不同设备设置不同的渲染参数以节省性能



· RenderingDetail Mode(渲染细节模式)

设置显示细节模式和配置



· ParticleEmitor 设置


 

· ModelLOD 设置

  LOD模型不同细节,根据距离参数优化渲染效率

· HLOD

  自动合并静态模型材质减少DrawCall,可以大幅度提高渲染效率

· Material指令及Sampling监控

  最终的指令数量和采样数量会影响性能,尽量优化其数值



· CSM联级动态阴影

  CSM 阴影不会出现调制阴影中的双重阴影,在为多个物体投射阴影时此方法速度较快。

  CSM使用了额外的纹理采样器,可通过项目设置将其禁用:

  Rendering -> Mobile-> Combined Static and CSM Shadowing,

  即可将采样器空出供材质使用。

  接收组合阴影的组件需要勾选

  Receive CombinedStatic

  CSM Shadows fromStationary Lights 标记。

 

 

· VR 实例化立体渲染

  实例化立体渲染,可以减轻 UE4 中的 VR 性能影响。

  双眼画面同时渲染运算,能大量降低 CPU 的开销,并改进 GPU 的利用率。

  编辑 -> 项目设置 -> Rendering -> VR ->Instanced Stereo

 


VR项目中常用的工具基本就这么多,接下来将会介绍VR项目性能优化的一些思路和流程。

展开阅读全文

没有更多推荐了,返回首页