如何在虚幻引擎中优化环境
本期内容:
如何在虚幻引擎中优化环境,今天我们主要讨论是关于延迟渲染管线,三角形开销和着色器
性能优化贯穿项目整个过程的东西,尽早设置性能指标经常检查添加内容对性能影响
有专门的部门每天检测性能,我们的QA部门每天都在地图上他们要逐个设置摄像机,每次都使用完全相同的摄像机相同的变换相同的硬件,它们需要两到三秒的平均帧时间。然后将其添加到报告中可能有20个摄像机,因为关卡很大我记得有一个洞穴,最长的运行时间是6毫秒9毫秒。我们的目标是每秒60帧即16.66毫秒一切都很顺利
然后有一天它突然上升到25毫秒左右,因为我知道前一天它的运行时间是9毫秒。我知道是某个摄像机导致的问题,我找到我构建的那个摄像机对它运行图片捕捉运用GPU分析工具,然后进入绘制调用弄清楚发生了什么结果发现Xbox One上有一个2080 x 2080的失真纹理。它是一个非常大的纹理上面有一个非常重的着色器,它是全屏的影响了屏幕上的每个像素,因为每天在检测每个摄像机的性能。所以我们知道出了什么问题我们可以立即做出响应
这就引出了另一个问题你设置项目的方式有所不同我们用的是第一人称摄像机摄像机在视平线正下方的位置我们不会在高空中俯瞰远处所有的树木
确定性能指标时务必保持一致
重要命令:stat FPS
我们看一下关于stat FPS 有两个数字每秒帧数和毫秒数
你知道需要几千个三角形来代表你的整个环境 因为你要在照明或后期处理上花费很多时间这由你来决定,所以我们将专注于环境并展示环境资产这意味着 我们的三角形数会非常非常多也许我们可以在其他不影响性能的地方弥补这一点

减少三角形数量与贴图的大小,对于性能的另一个方面:后期处理,后处理材质进行优化,并保存为一条指令。我不必运行屏幕上的每一个像素,但如果我拥有独一无二的资产就像这块石头我不会专注于尽可能地优化它
*阴影深度基本就是渲染所有的动态阴影我们有很多动态阴影,我经常看到这样的问题,阴影在一段距离后消失或者离摄像机很近的阴影非常模糊。我该怎么办?
这些都属于层级阴影贴图的范畴,这些基本上是从我们的角度从摄像机向前的角度渲染不同的阴影贴图,它们可能是1024 2048之类的数字。然后层叠到一定的距离系统可以将第一个层级分解为X个单位,这些等于动态阴影距离
*定向光源:我知道它会投射阴影因为阳光在那里它应该投射阴影
有几个地方需要注意:动态阴影距离是30000个单位,这意味着动态阴影一直延伸到距我们30000个单位距摄像机真的很远(查看下我们场景物体距离摄像机距离)重点是我们要在不牺牲视觉质量的情况下提高性能,因为我知道不会真的看到那么远的动态阴影,我们调小动态阴影的距离调整15000
根据我的经验层级的数量比层级的大小或距离对性能的影响更大
Num dynamic shadow Cascades:3就是每一帧做三次阴影开销会很大,但我使用高分辨率阴影一次开销会很小
阴影延申到15000距离这时候就要用到距离场阴影,请记住当你为网格体生成距离场时这是一个项目设置所有静态网格体都必须这样,这里会有额外的内存负荷

还有一种情况就是级联阴影,如果有一个柱子这个柱子离我们有十万个单位远则会选择级联阴影设置在这里

距离场阴影对我们的性能影响不大

接下来draw和三角形还有着色器

draw call:可将绘制调用视为拥有相同材质的相同几何体,之所以说几何体是因为顶点颜色是几何体的一部分,这意味着如果有两块石头它们是相同的静态网格体资产。但对它们应用了不同的顶点着色,那么它们就是不同的绘制调用,所有这些都在同一个静态网格体Actor中,我们还添加了动态网格体实例化它非常非常有用
stat RHI 调用draw call查看
我们看看如果执行r.meshdrawcomman
完整版感兴趣同学移步公众号:Game艺视界 重复内容不在排版了