UDN
Search public documentation:

PerfDebug_DynamicLightEnvironmentsCH
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主页 > 技术&编程 主页 > 性能和内存 >性能调试:动态光照环境

性能调试:动态光照环境

点击这里返回到性能调试页面。

动态光照环境

问题:

动态光照环境更新的性能消耗显示为非常昂贵。

解决方案:

默认情况下所有的 InterpActors (也就是 Movers)和 KActors 都有动态光照环境。当一个动态关照环境更新时,它将会对光源进行线性检测,这样会增加许多CPU消耗。然而,您可以通过进行各种各样的设置来降低动态物体的光照消耗。

这里是一些光照环境设置,按照从最昂贵到最便宜的(在游戏线程上)顺序,也介绍了何时使用相应的设置:

1) bEnabled=True, bDynamic=True (默认)

这些设置仅在需要的时候使用,它们将会基于 InvisibleUpdateTimeMinTimeBetweenFullUpdates 进行更新。 同一时刻不应该有多余50个这样的项处于活动状态。 当它们可见、靠近玩家或者当它们移动时需要进行额外的可见性检测。

2) bEnabled=True, bDynamic=False, bForceNonCompositeDynamicLights=True

这些设置应该是非常廉价的,环境在第一次更新时进行更新,以后再也不会更新。 bForceNonCompositeDynamicLights 可以允许动态光源影响它们,这将没有任何严重的游戏线程性能消耗。 可以有成百个这样的设置,它们唯一的消耗(在第一次更新后)是到动态光源的线性检测(并且仅当拥有者可见时)。 这些要比使用预计算阴影的光照看上去要好的多,因为它们可以旋转并且光照仍然可以保持正确。 它们通常用于破碎网格物体、GDO以及其他东西。 如果您发现这些产生了很多新能消耗,那么可以在代码侧进行一些优化。

3) bEnabled=False , bUsePrecomputedShadows=True (在图元组件上)。 同时,您必须把它从动态光照通道中取出,并把它放到静态光照通道中。

这些将会进行光照贴图,渲染的性能消耗很低,它们应该没有游戏线程的消耗(除了调用了 UDynamicLightEnvironmentComponent::Tick 函数)。 当移动它们时,它们的效果将会错误。

这是个控制台命令,可以用于查看有多少光照环境处于活动状态。在控制台上输入 SHOWLIGHTENVS ,您将会获得在那帧中更新的光照环境的所有列表。输入应该是这样的:

Log: LE:SP_MyMap_01_S.TheWorld:PersistentLevel.InterpActor_12.DynamicLightEnvironmentComponent_231 1
Log: LE:SP_MyMap_01_S.TheWorld:PersistentLevel.InterpActor_55.DynamicLightEnvironmentComponent_232 0
Log: LE:SP_MyMap_01_S.TheWorld:PersistentLevel.InterpActor_14.DynamicLightEnvironmentComponent_432 1 ...

在每行末尾的‘1’意味着 bDynamic 设置为 TRUE 。这可以用于引导关卡设计人员来修改它们的地图以便降低更新消耗。

反馈

您有关于引擎中性能和内存方面的问题或意见吗? 将您的问题发送到 right here(这里)!

点击这里返回到性能调试页面。