UE4图形分析-必要的“stat”命令/像素-顶点-内存/GPU Visualizer 讲解/精确找到瓶颈...
教程优化Game艺视界原创 40728 0
实名

通过了实名认证的内容创造者

发布于 2022-3-20 15:25:04

您需要 登录 才可以下载或查看,没有账号?注册

x
笔记内容比较多,但还是放在一篇文章吧!方便今后查找观看,没时间看就先收藏,用到时再来看也来得及!争取一篇文章看懂如何优化我们游戏。那些内容影响我们性能!感谢分享、再看希望对大家有所帮助。
欢迎来到有关虚幻引擎4中图形分析的教程第 1 部分介绍了以专业的,可预测的方式,向您展示如何使用毫秒而不是 fps 进行测量。以及用于统计的基本控制台命令是什么在这里,您可以看到SceneRendering 统计信息,该统计信息可以计算您的动态灯光、半透明的成本和绘制调用的数量。我会讲所有基本的在虚幻的必要的“stat”命令

第 2 部分介绍了图形管道,那些像素、顶点和内存相关问题,以及如何找到它们我还将向你展示优化视图模式。我认为艺术家们不太了解的问题,但这是非常重要的在准备静态网格物体时。

第 3 部分将介绍分析您的场景,整个过程我将使用GPU Visualizer 工具并解释 Unreal 渲染管线包含的所有通道,使用此工具我们将能够找到阴影 灯光的成本最高或者我们场景中的后期处理成本究竟有多大

第 4 部分将解释外部分析我将使用英特尔的一个工具,它允许从游戏中捕获单个帧并对这个特定帧执行非常详细的分析。直到单个光源的成本即使它没有阴影和特定网格的重量,您可以在此处按名称查找或仅通过视觉查找我们将测试各种场景。通过这种方式,我们将能够 非常精确地找到瓶颈。

[micxp_wxonkey]wxv_2089045521423237121[/micxp_wxonkey]
【视频版:01-UE4 图形分析_ 简介】

在此视频中,我将向您展示各种衡量性能的方法以毫秒表示。然后再继续寻找瓶颈和其他优化问题。那么 - 为什么是毫秒?

c2acfe13538c552f33fcd8365b59dc7a.png

不要猜测—测量和比较!
FPS是最终结果
对于基准测试来说很好,但对于单个特性来说就没用了
在FPS中很难表达成本
某些特性的成本是稳定的(例如后处理)


0103933439b5b339a881051388237d14.png

让我们这样看:例如我们有一盏灯当我们把它放在场景中时我们的帧率会从 60 fps 下降到 50为例。一个非常沉重的阴影光。

因此,如果您假设这种特定灯的成本为“10 fps”那么再放置 5 个此类灯将使我们得到... 0 fps,不……不。它当然不会那样工作。


这是针对 30 fps 优化的场景如果我们想要每秒 30 帧,而我们每秒有 1000 毫秒,那么通过简单计算1000 除以我们想要的 fps, 即 30,我们可以看到它为我们留下了 33 毫秒来渲染一帧。
如果我们在 GPU 或 CPU 上进行计算时超过这个数字我们将无法达到 30 fps 的目标。
以同样的方式,1000 ms / 60 fps留给我们 16 ms 来渲染一帧。现在,为了达到 30 fps,我们有一个在 30 毫秒内渲染的场景。它有很多透明度很多重光

现在请看这张图。这是一个必须以 60 fps 渲染的场景。并且后期处理时间没有改变。我们在这里仍然有 3 毫秒的成本


即 90 fps,例如对于像 Oculus 或 Vive 这样的 VR 套件。因此,如您所见,即使后期处理的成本是静态的,但与其他事情相比,现在在为 VR 套件渲染时与其他事情相比,它要重要得多。所以我们必须完全禁用半透明,摆脱所有粒子和东西让我们有空间进行后期处理并保持中等数量的灯光使用毫秒而不是原始 fps
在游戏中 按 [~](波浪号)可以输入基本的控制台命令。例如:STAT FPS

但我们还不知道,成本是由 CPU 还是 GPU 造成的?如果 CPU 需要更多时间来完成一帧,GPU 将不得不等待 CPU。游戏代码,绘图代码和东西。

因此,通过使用 STAT UNIT 或 STAT UNITGRAPH,我们可以将这些信息分为 4 个特定部分。
“帧”与“FPS”相同。
“游戏”是 CPU 在游戏代码上的工作。
“绘制”是 CPU 为 GPU 准备数据的工作。
“GPU”是 在 GPU 上渲染一帧所花费的原始时间。

关闭平滑帧率,“平滑帧速率”试图避免帧速率峰值通过禁用它,我们最终可以得到更准确的测量结果。
还有一个名为 STAT SCENERENDERING的命令,它会向您显示绘制调用、整个场景中的三角形计数,场景中的动态灯光数量以及 - 非常有趣 - 场景中半透明的成本。
[micxp_wxonkey]wxv_2089046239202869248[/micxp_wxonkey]
【视频版:02-UE4 图形分析_ 测试性能】




在本视频中,我将解释现代 GPU 的一般图形以及您应该学习哪些知识才能找到场景中的瓶颈和可以优化的地方。
我们应该能够定义问题,我们的掉帧是否发生在某个区域?在某些特定的游戏场景中?
例如,一些桶爆炸或一些敌人进入该区域?或者也许在某个供应商的硬件上然后,当我们继续进行时,我们应该隔离我们正在测试的内容。为了进行有意义的测试,我们必须做出假设。所以这就是为什么了解 GPU 和 Unreal 本身的渲染管道非常重要的原因。

现在让我继续剖析框架。要显示一帧,CPU 和 GPU 上的计算都必须完成。
所以所有的游戏代码都必须被计算,所有的像素都必须被着色等等

最后是负责材质、 照明和后期处理的像素着色器。一个重要的事情,它可以真正影响你的帧率是绘制调用。
所以绘制调用是 CPU 发送来控制 GPU 的命令。例如“更改我的网格”或“更改我的材质”之类的命令因为如果您想用不同的材质、不同的着色器绘制一个三角形集,您必须首先从 CPU 发送一个命令然后通过驱动程序,然后才被翻译然后才提交给GPU。因此,拥有大量材料大量不同的、独立的对象,对 CPU 来说是一项艰巨的工作。

现在让我解释像素绑定的问题来源,因为像素很可能是您管道中最慢的部分,分辨率越大,我们需要着色的像素就越多!
那么如何检查我们是否是像素绑定的呢?在运行我们的游戏时, 我们可以按 [~] 并输入:r.ScreenPercentage (例如)25或 r.SetRes 480x270,然后,如果您的帧率提高了很多,那么这意味着您受像素限制。


着色像素的最大常见问题是半透明度。不透明非常便宜,因为只渲染最靠近相机的网格。而当你有一个半透明的物体时,你必须绘制所有的东西半透明的物体。

现在,一个意想不到的性能问题的来源,我认为在艺术家中不太为人所知。这就是小多边形浪费 GPU 时间的原因。


在这种情况下,“四边形”表示 4 个像素(2 x 2)的块。当涉及到像素着色时,GPU 上的大部分操作都是在完整的四边形或更大的瓦片上完成的,比如 8x8不是在单个单个像素上。GPU 更容易 ,有时甚至是必要的,在更大的图块上执行操作,然后才丢弃不必要的像素。所以丢弃的像素基本上都被浪费了。可以想象 ,三角形越小,或者三角形越细,问题就越大。

所以三角形计数本身实际上并不是很多时候的问题。与流行的观点完全相反三角形的数量本身并不重要,避免小而细长的三角形更为重要。使用细节级别来控制它。尽量保持多边形大,甚至在屏幕空间中。所以从你的相机,从你的游戏中观看,而不仅仅是在3D包中。
树叶中的空像素是额外的浪费因为你有半透明或一些透支。

那么回到三角形计数 :这真的不是问题吗?
大多数情况下不是,但请记住镶嵌(个人理解=细分)后它可能会爆炸,当您没有很好地控制镶嵌或分配太大的值时,您最终可能会出现大量四边形过度绘制。顶点的数量对阴影投射很重要。因为有一些网格需要复制一份网格来绘制阴影贴图。所以顶点越多 ,问题就越大。

现在,这是一件值得记住的好事情,但不要想太多知道这点很好你的 UV 上的硬边(或:“平滑组”)或分裂会增加实际的顶点数因为信息必须为单个顶点存储多次。但它只影响内存使用和磁盘空间。不是实际的渲染性能。

所以正如我之前所说, 动态阴影可能是一个顶点限制的麻烦来源。灯光的光线投射的网越重(个人理解:越重=照射范围越大)性能成本就越大。因此,为了避免这种情况最好尽可能禁用动态阴影。也许,对于您的许多灯光, 您不需要动态阴影,或者您可以将它们更改为静态。保持衰减半径尽可能小也是一个很好的做法。这不仅会限制阴影成本,还会限制在像素着色器中渲染光线的成本。

那么, 我们在处理内存时会遇到哪些问题呢?
第一件事是材质中过多的纹理样本会占用带宽,带宽就是数据量指可以在内存和执行计算的实际内核之间传输的数据量,所以压缩有很大帮助。GPU直接支持压缩因此除非您需要,否则不要在纹理中禁用它。所谓的“纹理 包装”也有帮助。它可以帮助您节省纹理采样器的数量并在内存方面进行优化。这意味着您可以将 3 个灰度纹理例如粗糙度、金属度和环境光遮挡打包到单个 RGB 纹理的特定通道中。所以每一个 只占用一个通道,然后你可以 像单个纹理一样存储它们。

GPU 尝试将纹理的最后访问区域保留在缓存中。因此,缓存是一种非常快的内存,非常靠近执行计算的实际内核。因此到DRAM存储器,它可以从附近的缓存中获取所需的数据,而不是一直到DRAM 内存。所以如果你想让 GPU使用非常小的缓存,非常小,保持UV连续。我知道一些聪明的着色器技巧可以,例如,跳过 UV 以获得 一些嘈杂的效果或类似的东西,但要谨慎使用它。记住这一点,因为这 不是 GPU 所期望的它可能会浪费缓存。默认情况下应该没问题

还有流缓存。它与 GPU 上的缓存无关。它是普通RAM中的缓存由Unreal维护。这就像可以一次加载的纹理存储。一个关卡中的纹理太多,记住光照贴图也是纹理,可以填满缓存。Unreal 将尝试加载尽可能低的分辨率,即所需的最低分辨率。例如,一些远处的物体不需要最大的分辨率来加载。但是在缓存已满后,即使在关闭的对象上也可能遇到相同的行为,因为它无法 加载更多纹理。

目前,Unreal 有 两种渲染光照的方式。一种称为“延迟渲染” ,它是默认方法。第二种称为 “前向渲染”。前向渲染 是一种较旧的技术,但最近进行了优化,
因此现在称为“前向+” [勘误:在 UE 中为“集群前向着色”]。这种前向渲染的新方法。
“延迟渲染” 意味着首先收集每个像素的所有数据,例如法线和法线贴图、粗糙度、基色,然后才在某种后期处理中使用这些数据渲染灯光。所以只有屏幕上的实际像素被点亮。它也适用于反射。但是有一个明显的限制如果我们只将最接近相机的像素绘制到最终缓冲区中,我们将无法渲染透明对象。所以这就是前向渲染开始的时候。在标准的默认设置中,你实际上让两个 引擎同时工作。您可以切换为仅使用前向渲染。因为它可以降低存储所有缓冲区和屏幕最终结果所需的内存成本。当你有 一个静态照明的场景时,它很有用。
如果您有很多光源则保留默认的延迟渲染会很酷。阴影无关紧要它只对直接照明很重要。

现在让我向您展示一些优化视图模式。检查一些性能问题的基本工具在我们进行实际剖析之前。

光复杂性向我们展示 了每个特定光的半径。我们可以看到它们重叠。

如果我复制光......你可以看到它们重叠的地方成本是如何增加 那是因为像素必须用两个源进行着色。有两个光源。
显然,更多的光线 重叠意味着更多的性能问题。

当涉及渲染像素的复杂性时,另一个有趣的模式是着色器复杂性。当涉及到半透明物体着色的成本不仅是最近的物体而且还有后面的所有物体所以这是着色成本的总和。从相机里的所有物体直到视线尽头,这就是为什么如果我们只有一些半透明的东西重叠还不错。但是当我们进一步将更多的平面混合在一起时,我们开始遇到问题。

现在,在“优化视图模式”中, 我们也有 Quad Overdraw。所以当我们有多个半透明的东西在彼此后面时,它会一直变成白色。

谈到内存,一个有趣的优化视图模式是 Lightmap Density。此模式显示将被计算和存储的光照贴图的实际像素的大小它将被计算和存储。所以地形的分辨率很低这没关系,因为整个地形都很大。请记住, 每个对象的光照贴图都是单独存储的。无论如何,同一网格的每个occurrence都会得到它唯一的光照贴图, 因为它存储了光照,对于场景中的所有位置都是不同的。所以如果你不小心,这真的会爆炸成巨大的数字。并且光照贴图不必太详细。大多数情况下,它们可能非常模糊。最好改变您的想法,以稍微照明或更平滑的阴影,然后例如增加 光照贴图密度。

检查 使用的纹理数量的另一种方法Statistics 统计
该窗口,您可以在其中看到所有纹理,根据使用的内存量对它们进行排序。例如,这个材质是 2k x 2k [2048 px],

可能它只被一些我不知道的小对象使用

所以我可以在这里检查。有一些小物体在以非常低的分辨率使用这种纹理。
如果我想抑制分辨率我可以单击纹理名称。它显示在内容浏览器中。双击并打开它然后在“压缩”选项卡中

如您所见,分辨率降低了而无需转到实际的纹理编辑器。您可以随时更改它。所以,感谢您观看有关 GPU 管道和优化视图模式的这一部分。

在第 3 部分中,我将向您 展示称为 GPU Visualizer 的工具。您可以通过按 Ctrl Shift (逗号)来运行它,您将能够逐次检查您的场景。
比如这里,光渲染的pass就是最大的开销。我们将在下一部分深入探讨这一点。
[micxp_wxonkey]wxv_2089050550142074880[/micxp_wxonkey]
【视频版:03-UE4 图形分析_管道和瓶颈】

第三部分什么是分析?
它测量完成每个功能或给定指令块所花费的时间。
例如:渲染所有半透明网格。通过放置所谓的“GPU 时间戳”,

为什么要分析?
分析允许您比较不同的解决方案。所以你想出了一些有趣的理论,例如阴影光是你场景中的问题。然后你想出一些测试来让自己检查你是否正确。然后分析是一个完美的工具。从内置 GPU Visualizer 工具中提取大量信息。

那么我们如何准备分析呢?
我建议在关卡中放置多个固定摄像机并检查典型的游戏场景。因此,将摄像机放置在玩家通常会进入的位置以及玩家将看到的内容。
除了放置相机演员之外,我还做什么您可以在此处输入:Perspective -> Camera Actor。应该有所有相机的列表。

固定摄像机窗口大小,因为这会影响摄像机场景性能所以为了防止这种情况,我按下播放按钮附近的箭头,

然后在“在新窗口中播放中,指定游戏运行的分辨率,关闭窗口要运行 GPU 可视化工具,

GPU Visualizer 是一个内置工具。它有非常精确的类别,
例如:BeginOcclusionTests、ShadowDepths、渲染速度。以及它最重要的局限性是它不会告诉您 特定网格或特定典型灯光的成本。
GPU Visualizer 所做的是在 GPU 上显示单个帧的细分
GPU Visualizer 仅在您从编辑器内部启动游戏时才会显示

[micxp_wxonkey]wxv_2089061805003210752[/micxp_wxonkey]
【视频版:04-UE4 图形分析_GPU可视化工具】

欢迎观看有关 GPU Visualizer 的视频的后半部分。所以让我们开始解释我们在渲染管道中所谓的“通过”
在渲染管道中。通过是一组绘制调用。绘图调用是来自 CPU 的命令, 用于控制 GPU。例如:“渲染网格”、 “更改材质”,然后“渲染不同的网格”。并非每个通道都需要完整着色器……您使用节点编辑的完整着色器。基本上,只有半透明和基础通道使用此信息,而许多其他通道, 如投射阴影,可以在不使用任何材料的情况下很好地进行,还有像后期处理这样的通道,在整个屏幕上工作 ,根本不接触几何体。


那么什么会影响通行证的成本呢?

建议看看它的输入和输出
发布过程:缓冲区渲染分辨率
环境闭塞:缓冲区渲染分辨率
基础通道:网格,着色器写入缓冲区三角形数

着色器的复杂性
通过了解环境光遮蔽的工作原理 - 它在 Unreal 中是如何完成的,你会知道几何在其成本方面没有任何作用。因为环境遮挡是使用分层 Z 缓冲区和 GBuffer(例如法线)的后期处理操作。而基础通道,例如负责从着色器读取信息、纹理并将其写入 GBuffer,显然取决于网格和着色器的复杂性。但它也会写入缓冲区。因此,屏幕分辨率越高,渲染基础通道所需的时间就越长。

让我从照明通行证(通道?)开始!
因为它们可能是你场景中最重要的部分, 除非你对几何图形很着迷,或者你有其他一些优化 问题,比如粒子。
神秘的 LightCompositionTasks_PreLighting。
它负责延迟贴花 ,我在这里不使用它,但也用于环境遮挡。知道这很有趣,因为您可能认为环境光遮挡是后期处理操作。是的,它是-但它不在此处的后处理类别中。相反,您可以在 LightCompositionTasks 中找到它。通道的名称还有一些附加信息,例如:这里是渲染的全分辨率环境光遮挡,还有半分辨率,这基本上是出于性能原因,通常如何进行环境光遮挡。此过程的成本主要受渲染分辨率的影响。(光照图大小)

所以渲染分辨率是影响成本的最大因素。
您还可以控制环境遮挡半径和淡出距离。
在“高级”中,我还可以设置“淡出距离”。随着淡出距离的减少,它开始只影响最近的平面。这也有利于 LightCompositionTasks 的性能。


因此,通行证也与贴花有关。我们在这里谈论的不是 DBuffer 贴花 ,而是标准的贴花,贴花的数量越多,计算它所需的时间就越长。

照明后的构图
现在在 Unreal 4.16 中,此过程仅负责次表面散射
在 STAT GPU 中,它被称为 CompositionPostLighting。这是针对虚幻中可用的较新类型 的次表面散射,因此不是基本的, 而是称为次表面轮廓的一种。为了降低此特定通道的成本,您基本上必须限制使用次表面散射的对象数量及其屏幕空间大小。无论你在哪里,都可以使用 假的或禁用它尤其是在细节层次上。

计算光网格
它所做的是检查在当前视图中渲染是否需要灯光。 阅读集群前向着色需要它。Unreal 中存在两种渲染光照的方法它们同时工作,延迟光照在默认设置中处理不透明的网格 和蒙版网格而前向用于点亮半透明 如粒子或玻璃或 类似的东西  所以这个pass确保只考虑相关的灯光来照亮[一个物体]。只是为了节省计算时间。它的成本受您在场景中放置的灯光数量的影响。可移动灯。因此,如果这对您来说是一个问题,那么只需减少动态灯光、可移动灯光的数量,将它们转换为静态或摆脱它们。

现在,有这个巨大的光照通道,它进一步分为NonShadowedLights所以灯覆盖的屏幕面积越大,成本就越大。
静态光在这里不算数,因为它们只是烘焙的光照贴图它们不再被视为“灯它们只是一个烘焙信息。但是可移动的灯可以,而且你拥有的越多,成本就越大。但请记住无阴影且半径小的点光源和聚光灯,它们的渲染成本实际上非常低。这就是延迟渲染的目的。
所以你可以看到, 当半径很小时成本不会很大

我还想快速向您展示另一个技巧,您默认启用此选项即“使用逆平方衰减”。虽然这看起来很不错并且可能是物理上的,但您必须使用巨大的强度和相当大的半径才能到达您需要的区域。您可以禁用此倒平方衰减并指定您自己的衰减指数。
所以非阴影灯的成本主要受渲染分辨率的影响。可移动和固定灯的数量也很重要。灯光的半径很重要。

现在,阴影光更加复杂。那是因为他们也有非阴影灯光的这一部分,实际上到达场景的部分,首先他们必须计算阴影。为了计算阴影,他们必须从他们的角度渲染几何图形并将它们保存为阴影贴图。所以阴影贴图是一种纹理它们越复杂,它们的三角形越多 ,渲染它们的阴影的成本就越大。所以同样的事情在非阴影灯光中很重要,即游戏的渲染分辨率、减小阴影光的半径尤为重要。

此外,无论您在哪里,只要禁用投射动态阴影即可。
所以对于阴影灯,只检查灯本身还要检查它们可以影响的对象。


过滤半透明体积
我将从 UE 文档中的引用开始。“点亮的半透明通过一系列围绕视锥体定向的级联体积纹理获得大部分照明。

阴影深度
用于计算阴影的通道之一另一个是 ShadowProjection。
所以ShadowDepths 是为阴影投射灯生成深度贴图。是类似于从特定光线的角度来看场景深度的纹理。想象一下,光是一台相机,你从这个光中计算出每个像素的深度。此信息稍后用于确定场景的特定部分是在此灯光的阴影中还是可以点亮。
成本,主要受阴影投射灯的数量和范围的影响。同样重要的是可移动阴影投射对象的数量和三角形数因此,根据组合,您可以拥有静态网格物体和静态灯光 那么成本为零,因为它们不是作为灯光计算的它们是烘焙的。
但是,例如,您也可以拥有静止或可移动的灯光以及静止和可移动的对象,这两种组合 都会导致在特定光的范围内产生这些物体的阴影。
您还可以通过更改阴影质量来影响它。
例如从 0(无阴影)到 4(全质量)的值。因此,渲染和存储它们以及读取它们的成本也增加了。

阴影投影
阴影投影是阴影的最终渲染。因此,它获取深度图并将其渲染回场景中。

让我们继续几何、HZB 和 Base Pass!
按时间顺序,渲染一帧从预通过开始。当然,除非你完全禁用了预通。

什么是HZB通行证
它通常需要大量的帧成本?嗯,基本上不用担心这个成本。
HZB 是分层 Z 缓冲区。这是渲染到缓冲区中的场景深度所以是全屏纹理。它的布局是以这样一种方式制作的它可以非常有效地用于遮挡剔除。Unreal 中使用的基本遮挡剔除是基于这个 Hierarchical Z Buffer 的。它也被屏幕空间光线追踪使用,所以屏幕空间反射和 AO 使用的技术。
HZB 的成本严格取决于渲染分辨率。其他一些因素很重要,但完全没有游戏的纯渲染分辨率那么重要。

现在,基本通行证。
基本通行证是最重要的通行证之一。这是因为它使用您在材质编辑器中制作的着色器进行所有计算并输出结果值,例如粗糙度、最终金属、最终法线、SSS 轮廓、镜面反射,并将并将它们保存到所谓的 GBuffer 中。
---GBuffer:指Geometry Buffer,亦即“几何缓冲”。区别于普通的仅将颜色渲染到纹理中,G-Buffer指包含颜色、法线、世界空间坐标的缓冲区,亦即指包含颜色、法线、世界空间坐标的纹理。
由于G-Buffer需要的向量长度超出通常纹理能包含的向量的长度,通常在游戏开发中,使用多渲染目标技术来生成G-Buffer,即在一次绘制中将颜色、法线、世界空间坐标分别渲染到三张浮点纹理中。---
所以 GBuffers 是全屏纹理它们存储所有这些信息以备后用,例如通过延迟渲染。基本上由所有后续组成。当您使用延迟渲染时,您需要依靠 GBuffer 来提供此特定像素的法线、深度和粗糙度。所以它有相当多的工作。

这意味着它运行着色器的基于节点的部分,以及其他东西它的成本取决于分辨率、对象数量(因为它会影响绘制调用的数量)。
在场景中使用不同的材料或者他们的实例。另外:着色器的复杂性,所以你的着色器中有多少节点,有多重,贴花的数量可能会令人惊讶如果你不考虑它。然后你会被场景中使用的贴花数量击中。以及我们网格的三角形数。但这并不是基本通行证要做的全部。它做得更多。例如:它从光照贴图、间接光照缓存中读取静态光照,并将它们保存到 GBuffer 中,与漫反射(基色)混合。所以看带宽,看你对内存的负担。因为光照贴图也是纹理!你可能不会考虑它们。你可能认为纹理的分辨率没问题,然后你有很多对象,有很重(大分辨率)的光照贴图突然间,你可能会遇到 一些内存问题。

它还应用 DBuffer 贴花。所以它收集周围的 DBuffer 贴花并将它们投影到对象上。然后它应用雾。并计算最终速度。所以它读取RenderVeloities 传递给出的信息并 计算最后一个。

所以,我提到了这个带宽问题和内存问题(详见视频)。
您可以按 [~] 并输入:rhi回车

我还听说过关于 更改“r.ScreenColorFormat”的建议,这是存储 GBuffer 的图像格式。如果您使用前向渲染


半透明

半透明是一大类它结合了着色器和半透明材料照明的总成本。在 'stat GPU' 中,它幸运地分为 “Translucency”和“TranslucentLighting”。
它的成本受渲染分辨率的影响,但我们在这里处理半透明,因此也受半透明多边形的总面积及其过度绘制的影响。所以一个多边形在另一个后面,另一个也是半透明的,所以它们的成本总和。有一种模式可以让您检查多边形的过度绘制。如果您在材质中启用了“Surface ForwardShading”类型的照明则灯的数量也会影响此过程。

粒子模拟和注入
GPU上的粒子模拟是这里计算的成本。因此,只有当您在粒子发射器中启用“GPU Sprites”时它才会影响此特定通道。成本受粒子数量的影响如果您启用了“碰撞”模块,或者您没有。因为与 GPU 精灵的碰撞是用屏幕空间数据如 Z 深度等计算的。因此,显然 ,必须碰撞的粒子数量越大,此特定通道的成本就越大。请记住,您可以使用粒子细节级别 (LOD)来管理生成的粒子数量。



后期处理
此传递负责屏幕空间中发生的许多事情。比如:抗锯齿,因为除非你在做 VR,否则你将依赖 Temporal 或 FX AntiAliasing。Temporal 是默认设置更好看但更重。景深在这里完成,镜头光晕,光晕,自动曝光,这是眼睛适应和色调映射,以及颜色分级,负责颜色的最终外观,对比度等。因此,成本最明显地受游戏渲染分辨率的影响。
此外,后期处理功能的数量和质量也很重要,因为你可以同时启用所有这些东西:镜头光晕、景深等等,但每个都有自己的成本,而且在景深和镜头光晕的情况下,它可能会非常大。您还可以从 FXAA 更改抗锯齿,以获得更低的质量但更好的性能。
所谓的“可混合”的复杂性数量很重要。“Blendables”是后期处理着色器只是您可以用来控制图像最终外观的材料。

反射环境
它读取反射捕获并将其混合到全屏反射缓冲区中。因此,在您的场景中,您可能有各种所谓的反射捕捉actor,例如框反射捕捉或球体反射捕捉。但重要的是要知道它们有它们的半径。这个半径对计算反射通道的成本有很大影响通过计算反映。

并且您可以看到这个特定的,捕获球体如何影响最终的反射缓冲区时会使用该缓冲区。您可能有重叠的反射,但我建议使用 1 个大的,仅在需要时放置小反射。
它们重叠的越少,半径越小越好。游戏的最终渲染分辨率在 这里也很重要。


渲染速度
它获取每个移动顶点的速度并将其保存到运动模糊速度缓冲区中。可以看到存在运动模糊。并且 RenderVeloities 通道是专门为这种运动模糊效果 [和时间 AA] 制作的。
据我所知,你不能禁用它。它受移动物体的数量和这些物体的三角形数的影响。


屏幕空间反射
这是对前反射通道的补充。它用于动态反射实时动态反射。它们是在后期处理中完成的,使用屏幕空间光线追踪技术它们的成本受游戏渲染分辨率和质量设置的影响。我们不仅有 'r.SSR.Quality',范围从 0 到 4,而且我们还可以指定发生这些反射的最大粗糙度,因为它们的成本随着粗糙度的增加而增加。他们必须覆盖更广的角度。尖锐的反射更容易计算。因此,您可以指定例如超过 0.3 的粗糙度它们就不会被使用。有一个默认的回退, 捕获的反射。就是这样!

它被称为“UE4 控制台变量和命令”。该网站允许您 浏览和查找每个控制台命令是可用虚幻和开发游戏版本中可用的每个控制台命令。

这个“可扩展性参考”向我们展示了改变特定功能质量的各种方法,例如阴影投射或我在这里经常使用的功能 - 分辨率比例

是Adrian Courrèges 撰写的一篇令人惊叹的深入文章名为“DOOM (2016) Graphics Study”。这是一篇关于 现代游戏总体渲染的精彩文章。
[micxp_wxonkey]wxv_2089064535344119808[/micxp_wxonkey]
【视频版:05-UE4 图形分析_所有类型指南渲染通道】


在本系列中,我解释了各种衡量性能的方法。从非常基本的,比如控制台命令:~stat unitgraph。然后在第 2 部分中,我解释了什么是 GPU 上的管道以及如何调整您的内容以最大限度地提高潜在性能。现在,在第 3.1 部分中,我展示了一个名为 GPU Visualizer 的工具。

它向我们展示了将场景,分解为特定渲染通道的情况。例如:PrePass、Base Pass、Lighting 的pass。在我强烈推荐的第 3.2 部分中,我几乎解释了这些通行证中的每一个。这个工具是先进的,非常好,但它并没有向我们展示一切。特别是,例如,当您展开 Base Pass 时,您只能看到动态网格和静态网格的类别。在照明方面也是如此。这个工具非常好,但它有它的局限性。这就是为什么在这部分 - 第 4 部分中,我将向您展示一个外部分析器。

英特尔制作的单独应用程序。在这里您不仅可以看到特定的通行证以及他们花费了多少时间,
在这里您可以看到基本通行证、半透明等。
但基本上顶部图形上的块越大渲染这组特定的绘制调用所需的时间就越长。所以这个工具让我们可以非常详细地了解。我们框架中发生的事情。甚至成本也以微秒而不是毫秒为单位显示。所以这里的 1000 意味着 1 毫秒。

工具地址:software.intel.com/en-us/gpa
使用此工具分析前要打包我们的场景,转到文件打包项目


关闭UE打开我们打包好的,那里有我的 .exe 文件(带有 Unreal Engine 的图标)。
打开我们图形监控后在任务栏右下角,找到图标我们右键点击分析应用程序
Analyze application...

弹出对话框,选择我们打包好的程序。然后点击运行

运行后现在,Ctrl + F1  再次按下它会向我们显示一些工具提示
我按 Ctrl+Shift+C捕获帧

打开我们帧分析器
有绘制调用#0、这里有前 184 个绘制调用、它们的总数为 292 个。
右上角我们可以设置每个轴含义,这是英特尔的教程,它被称为“虚幻引擎 4 优化教程”。
[micxp_wxonkey]wxv_2089087795964248066[/micxp_wxonkey]
【视频版:06-UE4 图形分析_英特尔帧分析器】






还有一个开源调试器 RenderDoc,它更像是一个调试器,而不是分析器。但仍然是一个非常相似的工具。如果您想查看通行证的持续时间,可以在此处找到。
https://renderdoc.org/



$6XT$]Q8}KA0JGSI}]L1{9R.png

评分

参与人数 4元素币 +53 活跃度 +16 贡献值 +1 展开 理由
元素界王神... + 18 + 5 + 1 感谢
wstracy + 9 + 3 【点赞】这很有大网气质!
Ap1600 + 7 + 3 【点赞】这很有大网气质!
lanch + 19 + 5 【点赞】这很有大网气质!

查看全部评分

本帖被以下画板推荐:

微信公众号:Game艺视界
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表