UDN
Search public documentation:

GPUProfilingHomeCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3主页 > 性能分析及优化 > GPU性能和分析

GPU性能和分析


概述


对于GPU分析来说,有很多复杂的特征。凭经验来说,GPU性能分析的最好方法就是不断试验。像素着色是GPU所执行的主要的耗时工作。另一个GPU消耗是 变换/植皮,它依赖于网格物体中顶点的数量。植皮顶点的性能消耗要比静态网格物体顶点大很多。

像素着色


Overdraw(过度描画)

对于GPU性能来说,透明材质可能是个巨大的问题,因为多个半透明材质会产生重叠或过度描画。一般,您应该总是限制任何半透明材质所占据的屏幕空间量,尤其是当多个半透明材质正在重叠时。

粒子系统在这方面会带来巨大的性能消耗。粒子所使用的材质通常是半透明的,并且任何系统上可以描画很多材质,所以有大量的过度描画的可能。以下列出了限制粒子过度描画的一些技巧:

  • 使用较少的复杂粒子 - 使粒子系统使用较少的复杂粒子而不是使用大量的简单粒子可以获得更好的性能。如果一个由大量粒子构成的特效可以通过在材质中创建特效然后把该材质应用到一个单独的例子上来实现,那么最好使用后者方法。
  • Limit Screenspace Coverage(限制屏幕空间覆盖) - 如果您可以限制任何粒子特效所占的屏幕空间量,那么就可以限制该特效的过度描画所带来的性能影响。
  • Limit Overlapping of Effects(限制特效的重叠) - 多个特效的重叠会扩大任何单独特效的过度描画所带来的性能消耗。如果可能,请检测判断什么时候需要在同一位置产生多个特效,然后使用一个单独的特效替换它。

不透明蒙板

蒙版材质可能是浪费GPU性能的源泉之一,因为无论几何体表面的每个像素是否可见都必须对其进行计算。要想最小化蒙版材质的性能消耗,可以进行几个优化处理。

  • Match Geometry to Visible Material Area(匹配几何体到可见材质区域) - 给网格物体添加额外的细节使它和应用到其上的材质的可见区域尽可能匹配比使用具有许多浪费性能的像素的简单几何体更加高效。
  • Remove Specular(删除高光) - 除非完全必要,否而蒙版材质应该删除任何高光组件,以便使得浪费的像素的计算尽可能的简单。
  • Use Non-Directional Lighting(使用非定向光照) - 使用非定向光照可以减少计算浪费像素的光照所需指令,从而获得更快的性能。

动态光照


静态光照和光照贴图是照亮表面的最高效的方法。限制关卡中动态光源所影响的表面的数量通常是个好主意。最终的目标是尽可能地保证关卡中的大部分区域不会受到动态光源的影响,尤其是玩家永远不会近距离查看的区域。这里光照复杂度视图模式是有用的,因为它根据影响表面的动态光源的数量显示世界。

动态对象的光照的性能消耗是非常大的。SkeletalMeshActors、KActors、InterpActors等可以构成世界的主要部分,如果不使用任何特殊技术来照亮这些对象,那么性能消耗是惨重的。DynamicLightEnvironments提供了一种照亮动态对象并限制所带来的GPU性能消耗的方法。这里不是把每个光源的光照在每个对象上描画一遍,而是把光照压缩到一个单独的光源中并仅应用一遍描画。当然,这样做也有一些缺点,因为光照和阴影不是100%的精确。我们推荐在任何时候都尽可能地使用DynamicLightEnvironments(动态光照环境);然而, 有些时候可能精确度或质量更加重要, 比如过场动画,这时可以作为例外处理。

动态阴影


性能问题的另一个潜在的源泉是动态阴影。快速衡量动态阴影是否具有性能影响的方法是通过使用 SHOW DYNAMICSHADOWS 命令来切换动态阴影的开关状态。最好给这个命令绑定一个按键,以便当按下按键时关闭动态阴影,释放按键时打开启用动态阴影。按键绑定可以通过在控制台中输入以下命令完成 - 比如: SETBIND F SHOW DYNAMICSHADOWS | ONRELEASE SHOW DYNAMICSHADOWS

对于在UnrealScript中创建的Actors,我们使用ShadowParenting。这意味着一个actor可以有很多附加物但是只能有投射一个动态阴影。当您有一个具有武器、头盔、背包和一些其它附加物的Pawn时,您想把所有这些”附加物“的阴影投射到父项pawn本身上。您可以通过以下操作完成: Attachment.SetShadowParent(Parent.Mesh)

动态阴影的性能限制

阴影缓冲的GPU性能消耗直接和阴影椎体的屏幕空间尺寸成比例关系。这意味着使用阴影缓冲的附近角色的性能消耗要比较远的角色高。这也意味着投射动态阴影缓冲的较大的对象要比较小的对象的性能消耗高。请参照 阴影缓冲过滤选项页面获得详细信息。

同时,请参照阴影参考指南页面和调制阴影页面获得关于阴影优化的更多信息。

视图模式


可以设置虚幻编辑器视口使用各种视图模式来渲染关卡,这些视图模式用于以有意义的方式显示场景的特定方面。

着色器复杂度

着色器复杂度视图模式基于对每个像素着色所需要的像素着色器指令的数量来描画场景。红色意味着性能消耗非常高,绿色意味着性能消耗最低。注意,半透明光束增加了它们后面的性能消耗较低的不透明材质的性能消耗。

shadercomplexity.jpg

关于该视图模式的完整介绍,请参照视图模式页面的着色器复杂度部分。

#光照复杂度

光照复杂度

光照复杂度视图模式基于影响表面的动态光源的数量来对场景进行着色。黑色意味着没有收到动态光源影响。各种不同颜色,从绿到红,表示受到动态光源的影响逐步增加。我们的最终目标是使得整个关卡都显示为黑色,尽管这显然是不可能实现的。

lightingcomplexity.jpg

关于该视图模式的完整介绍,请参照视图模式页面的 光照复杂度部分。

细节模式


有时候,您需要在多个平台上发行游戏,但是可能某些平台并不具有像其它平台那么强大的GPU处理能力。您不必通过消弱关卡的壮观程度来解决该问题,而可以通过DetailMode选择性地关闭您的地图上的细节来处理。这样便可以使得同一个地图在多个平台上进行使用。另外,您或许会有类似于分隔屏幕这样的真的可能会导致GPU崩溃的模式。对于分割屏幕来说,不渲染纯视觉细节是个很好的方式,并且该方式仍然能使非分割屏显示具有引人入胜的地图效果。

每个组件都有一个可以进行设置的DetailMode(细节模式)。设置某些事物为High Detail(高细节)模式将会使得该事物仅在允许High Detail时进行渲染:

detailmode_high.png