UE3 渲染线程的分析及优化

1649 篇文章 11 订阅
1623 篇文章 22 订阅


概述

两个主要的渲染线程性能消耗是决定可见性和提交函数调用给GPU。这两个性能消耗都是由可见 部分/元素 的数量决定的,既由可见网格物体的数量和每个网格物体具有的部分的数量来决定的。

对于渲染线程的性能消耗来说,需要记住的很重要的一点是在分割屏幕中它的性能消耗是翻倍的。当分析渲染线程时要常看一下它在分割屏幕中的性能。

渲染线程分析

当游戏渲染线程所用时间较长,并且您想查出是什么导致它运行如此慢时。一般这可能是因为一个设置了错误标志的单独的对象引起的(比如,在整个关卡中投射一个巨大的动态阴影的对象。)。

当实际地进行分析时,以下的信息可能是有用的:

  • Trace Render将进行单个帧的跟踪(如果您可以到达性能特别差的区域,那么这很合适)。
  • 样本分析: 当您的性能是一般的平稳的没有真正的峰值时,这种方法是很好的。

STAT SCENERENDERING

STAT SCENERENDERING命令可以显示一般的统计数据。这对于在渲染过程中查找性能较慢的一般区域是很好的入手点。

stat_initviews.jpg

STAT INITVIEWS

STAT INITVIEWS命令显示关于可见性剔除所花费的时间长度及其有效性的信息。可见部分的数量对于渲染线程性能消耗来说是最重要的统计数据,它们主要有 stat scenerendering 下的 可见静态网格物体元素 构成,但是也包括 可见的动态图元 。

stat_scenerendering.jpg

STAT SCENEUPDATE

STAT SCENEUPDATE命令显示关于更新世界的信息,包括添加、更新及删除光源和添加、删除场景中的图元所花费的时间。

stat_sceneupdate.jpg

采样流程

  1. 运行 Stat unit 命令。 
    • 显示渲染线程花费了50毫秒的时间。
  2. 然后运行 stat scenerendering 
    • 显示RenderViewFamily中占用了25毫秒的时间。
    • 剩下的25毫秒的时间被渲染器命令所占用的。
  3. 最后,运行 stat sceneupdate 
    • 我们看到AddLight RT占用了25毫秒。
    • 我们发现每帧中AddLight RT被调用了10次。
  4. 然后,我们需要设置断点来查找是谁正在调用AddLight 。并查看添加一个特殊光源或多个光源的速度为什么这么慢。通常,这是因为正在被添加的特殊光源所做的处理比实际需要的处理多的原因。(比如 附加/重新附加 光源)。

渲染线程优化

设计人员和美工人员可以使用几个相关的优化技术来辅助提高RenderThread(渲染线程)的性能。在优化RenderThread性能时,最小化静态网格物体、骨架网格物体、SpeedTrees、地形等的数量是非常重要的。最小化每个网格物体的元素数量也非常重要。这通常意味着限制在网格物体上使用的特定材质的数量。

关卡布局

当考虑到渲染线程时,关卡布局的最大影响因素是可见性及它如何影响可见元素的数量。任何时候,设计时充分利用了可见性遮挡的关卡将可以更好地限制可见性元素的数量。对于单玩家游戏性来说,在地图中实现曲折的流程路径将会使得虚幻引擎3中的可见性遮挡功能发挥到极限。

请参照可见性提出获得虚幻引擎3中可用的剔除方法的更多信息。

内容构成

除了关卡布局外,所使用的网格物体的构成方式也是很重要的。在这个时候就需要做一些折中处理,其中一个极端是您可以使用能毁掉渲染线程的很多小的可以重复使用的网格物体,另一个极端是您可以使用尽可能少的不能重复使用的大网格物体。 为了知道在什么地方达到平衡,您可以查看发行的GOW/UT3/GOW2关卡看看它们的原理。 但是最好的验证方法是真正地设置代表您正在制作的东西的测试关卡,然后在目标平台上进行分析。

如果没有仔细地控制部分的数量,您会发现在景色中的较大区域上可能有很大的问题。 战争机器2中的SP_Assault是一个高效的景色地图的很好例子,很多树木都融合到了一个单独的网格物体中(正如您在选中部分所看到),这保持部分的数量尽可能地小。 这个技术仅当玩家永远不到达景色中的远处部分时有效。 如果玩家到达远处,那么将需要使用一个比较激进的LOD系统。

gow2_vista.jpg

降低保真性

对于分割屏幕来说,因为您要获得两个不同的进入世界的视角,所以渲染线程要把很多东西渲染两次。通常,在单玩家游戏中,游戏都会以可能的最大速度运行,所以当您使它的工作量变为原来的两倍时必然会要付出一定代价。此时查找对游戏造成负面影响区域来降低它们的保真度才是关键。

由于通常是GamePlay(游戏性)代码负责 产生对象/创建特效,所以在很多情况下我们将不得不书写一些特殊的代码。对于引擎中的某些系统来说,有一些可以设置的选项,但对于大部分选项来说,它们所作的便是辨别区域并关闭它们/降低它们的数量。

可以降低其保真度的关键区域有:

  • Decals (贴花): 降低同时存在的decals的最大数量。
  • 对象存活时间: 降低特效类型的对象的生命周期。
  • 降低可以附加到SkeletalMehes(骨架网格物体)上的Decals的数量。
  • 对于AI角色来说,请不要让它们做很多可视化的事情(比如,您正在玩Horde, 没有必要让每一个子弹撞击都产生飞溅的decal 或特效。)

分隔屏幕细节模式

作为最后的努力优化过程,使用细节模式功能选择不会在分割屏幕上描画的网格物体是有用的。 对于战争机器2,我们队所有的多玩家地图进行了挑刺这样的处理,并仅把课件网格物体标记为高细节模式。

detailmode_high.png

一旦完成了高细节模式渲染后,分隔屏幕的细节模式设置为:

[SystemSettingsSplitScreen2]
DetailMode=1

这个设置意味着在分割屏幕中将不会描画这些网格物体或说意味着这些网格物体在分割屏幕中没有渲染方面的性能消耗。

概述

两个主要的渲染线程性能消耗是决定可见性和提交函数调用给GPU。这两个性能消耗都是由可见 部分/元素 的数量决定的,既由可见网格物体的数量和每个网格物体具有的部分的数量来决定的。

对于渲染线程的性能消耗来说,需要记住的很重要的一点是在分割屏幕中它的性能消耗是翻倍的。当分析渲染线程时要常看一下它在分割屏幕中的性能。

渲染线程分析

当游戏渲染线程所用时间较长,并且您想查出是什么导致它运行如此慢时。一般这可能是因为一个设置了错误标志的单独的对象引起的(比如,在整个关卡中投射一个巨大的动态阴影的对象。)。

当实际地进行分析时,以下的信息可能是有用的:

  • Trace Render将进行单个帧的跟踪(如果您可以到达性能特别差的区域,那么这很合适)。
  • 样本分析: 当您的性能是一般的平稳的没有真正的峰值时,这种方法是很好的。

STAT SCENERENDERING

STAT SCENERENDERING命令可以显示一般的统计数据。这对于在渲染过程中查找性能较慢的一般区域是很好的入手点。

stat_initviews.jpg

STAT INITVIEWS

STAT INITVIEWS命令显示关于可见性剔除所花费的时间长度及其有效性的信息。可见部分的数量对于渲染线程性能消耗来说是最重要的统计数据,它们主要有 stat scenerendering 下的 可见静态网格物体元素 构成,但是也包括 可见的动态图元 。

stat_scenerendering.jpg

STAT SCENEUPDATE

STAT SCENEUPDATE命令显示关于更新世界的信息,包括添加、更新及删除光源和添加、删除场景中的图元所花费的时间。

stat_sceneupdate.jpg

采样流程

  1. 运行 Stat unit 命令。 
    • 显示渲染线程花费了50毫秒的时间。
  2. 然后运行 stat scenerendering 
    • 显示RenderViewFamily中占用了25毫秒的时间。
    • 剩下的25毫秒的时间被渲染器命令所占用的。
  3. 最后,运行 stat sceneupdate 
    • 我们看到AddLight RT占用了25毫秒。
    • 我们发现每帧中AddLight RT被调用了10次。
  4. 然后,我们需要设置断点来查找是谁正在调用AddLight 。并查看添加一个特殊光源或多个光源的速度为什么这么慢。通常,这是因为正在被添加的特殊光源所做的处理比实际需要的处理多的原因。(比如 附加/重新附加 光源)。

渲染线程优化

设计人员和美工人员可以使用几个相关的优化技术来辅助提高RenderThread(渲染线程)的性能。在优化RenderThread性能时,最小化静态网格物体、骨架网格物体、SpeedTrees、地形等的数量是非常重要的。最小化每个网格物体的元素数量也非常重要。这通常意味着限制在网格物体上使用的特定材质的数量。

关卡布局

当考虑到渲染线程时,关卡布局的最大影响因素是可见性及它如何影响可见元素的数量。任何时候,设计时充分利用了可见性遮挡的关卡将可以更好地限制可见性元素的数量。对于单玩家游戏性来说,在地图中实现曲折的流程路径将会使得虚幻引擎3中的可见性遮挡功能发挥到极限。

请参照可见性提出获得虚幻引擎3中可用的剔除方法的更多信息。

内容构成

除了关卡布局外,所使用的网格物体的构成方式也是很重要的。在这个时候就需要做一些折中处理,其中一个极端是您可以使用能毁掉渲染线程的很多小的可以重复使用的网格物体,另一个极端是您可以使用尽可能少的不能重复使用的大网格物体。 为了知道在什么地方达到平衡,您可以查看发行的GOW/UT3/GOW2关卡看看它们的原理。 但是最好的验证方法是真正地设置代表您正在制作的东西的测试关卡,然后在目标平台上进行分析。

如果没有仔细地控制部分的数量,您会发现在景色中的较大区域上可能有很大的问题。 战争机器2中的SP_Assault是一个高效的景色地图的很好例子,很多树木都融合到了一个单独的网格物体中(正如您在选中部分所看到),这保持部分的数量尽可能地小。 这个技术仅当玩家永远不到达景色中的远处部分时有效。 如果玩家到达远处,那么将需要使用一个比较激进的LOD系统。

gow2_vista.jpg

降低保真性

对于分割屏幕来说,因为您要获得两个不同的进入世界的视角,所以渲染线程要把很多东西渲染两次。通常,在单玩家游戏中,游戏都会以可能的最大速度运行,所以当您使它的工作量变为原来的两倍时必然会要付出一定代价。此时查找对游戏造成负面影响区域来降低它们的保真度才是关键。

由于通常是GamePlay(游戏性)代码负责 产生对象/创建特效,所以在很多情况下我们将不得不书写一些特殊的代码。对于引擎中的某些系统来说,有一些可以设置的选项,但对于大部分选项来说,它们所作的便是辨别区域并关闭它们/降低它们的数量。

可以降低其保真度的关键区域有:

  • Decals (贴花): 降低同时存在的decals的最大数量。
  • 对象存活时间: 降低特效类型的对象的生命周期。
  • 降低可以附加到SkeletalMehes(骨架网格物体)上的Decals的数量。
  • 对于AI角色来说,请不要让它们做很多可视化的事情(比如,您正在玩Horde, 没有必要让每一个子弹撞击都产生飞溅的decal 或特效。)

分隔屏幕细节模式

作为最后的努力优化过程,使用细节模式功能选择不会在分割屏幕上描画的网格物体是有用的。 对于战争机器2,我们队所有的多玩家地图进行了挑刺这样的处理,并仅把课件网格物体标记为高细节模式。

detailmode_high.png

一旦完成了高细节模式渲染后,分隔屏幕的细节模式设置为:

[SystemSettingsSplitScreen2]
DetailMode=1

这个设置意味着在分割屏幕中将不会描画这些网格物体或说意味着这些网格物体在分割屏幕中没有渲染方面的性能消耗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值