UDN
Search public documentation:
VFXOptimizationResultsCH
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
日本語訳
한국어
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 主页 > 粒子 & 效果 > 粒子系统 > 虚幻引擎 3 中的 VFX 优化 > VFX 优化:获取结果
UE3 主页 > FX 美术 > 虚幻引擎 3 中的 VFX 优化 > VFX 优化:获取结果
UE3 主页 > FX 美术 > 虚幻引擎 3 中的 VFX 优化 > VFX 优化:获取结果
VFX 优化:获取结果
Cascade 中的核心系统 - GPU/游戏线程/渲染线程
- 在游戏线程 (gamethread) 上计算粒子仿真时间(更新)
- 在渲染线程上计算粒子数据最终结果(打包几何体,描画函数调用)
- 在 GPU 上计算粒子可视程度(着色器复杂度,过渡描画)
过渡描画 - GPU
过度描画 = Pixel shader cost(像素着色器消耗) = 图层的数量 * 受图层影响的平均像素数量 * 图层的平均指令数从本质上讲,在您向平面实例的表面添加材质时,这个材质在指令数量上有一定消耗,虚幻引擎 3 会将它显示在内容浏览器和材质编辑器中。对于半透明物体,这个指令消耗会随着半透明物体堆栈上升而增加,最后造成过度描画。不透明物体图层越多,消耗越高。您可以轻松地在着色器复杂度模式中看到这个消耗。亮红色 = 300 条指令,粉色 = 600 条指令,而白色 = 900 条指令。在 PC 上按下 F5 查看着色器复杂度。 着色器复杂度会输出系统将要消耗的近似值,但是它还取决于场景,因为半透明物体要相对也有消耗的透明物体进行计算。 检查您的效果使用情况,这一点也很关键。可能在任何给定情境中调用的效果(武器撞击)通常需要比您可以自定义构建的效果更亮,这样才能与特定情境相符,因为它将会在消耗不断变动的情境中进行描画。 可以使过渡描画影响处于控制范围内需要采取的一些步骤:
- 降低发射率
- 减少材质指令数量
- 减少粒子范围(填充屏幕面积较小)
- 为近处/远处粒子发射创建 LOD,降低不同视线距离的消耗
- 检查并排放置互相堆叠在一起的发射器(静态放置的效果)
LODs - 关卡细节 - GPU/游戏线程
LOD 距离检查时间
该功能会指定游戏检查玩家与放置在场景中的发射器之间的距离的频率,以此确定要使用哪一个 LOD。在将 LOD Method 设置为自动化后 LOD Distance Check Time(LOD 距离检查时间)开始工作。 自动化实质上会在您进行游戏的时候让游戏确定 LOD。如果您增加了 LOD Distance Check Time,那么检查之间的时间量将会增加。LOD DistanceCheckTime 以秒为单位进行计算,所以在设置它的时候要考虑您的玩家的最大运动速度。如果您将 LOD Distance Check Time 的值设置为 0.00,那么会在每一帧对距离进行检查,这样做等同于降低性能。LOD 方法 - 游戏线程
正确设置 LOD 方法对于性能和视觉效果来说至关重要。 自动化 - 游戏将会根据效果中定义的距离参数设置 LOD,使用 LOD Distance Check Time 设置。通常用于可以循环但没有被游戏代码调用的环境效果。 直接设置 - 在生成效果时确定 LOD(通常通过游戏代码)并且保留在定义的 LOD。通常在诸如爆炸或撞击这样的爆炸效果中使用。 激活自动化 - 在生成效果时根据 LOD 中定义的距离参数定义 LOD。通常在要求 LOD 生成后就永远不发生变换的 kismet 等工具调用的爆炸效果上使用。固定 vs. 非固定的边界 - 游戏线程
边界是引擎确定效果的可视性的方法之一。这些看不见的坐标会告知引擎效果是否在视线范围内。如果您的边界的某个角可见,那么引擎将会计算所有必要的效果分量。 边界性能消耗比较大,每一帧都需要进行检查和更新,因此将边界设置为固定的,然后确定边界需要多大。在某些情况下,如果您需要看到爆炸飞出的每一块碎片,那么您可能希望您的边界相对大一点。如果您使消耗变低,那么将边界收紧到核心分量可能会提高性能,但是在边界超出视线范围的时候效果会突然消失。 对于固定 vs. 非固定边界要记住的一些注意事项。 火箭轨迹快速移动效果(例如,火箭轨迹,追踪器或任何附加到射弹上的东西等等)不应该设置固定边界,或者将固定边界设置得很大,这样发射器将无法飞出边界外面。 在设置边界的时候需要注意在您的系统中定义的本地 vs. 世界空间坐标。如果将发射器旋转到您的边界朝向相反的方向,那么效果的元素可以飞出您的边界,同时会发生元素突然弹出视图的现象。描画函数调用 - 渲染线程
- 粒子系统 A 的组成: 1 个发射器生成 12 个平面实例,使用带有 1 个通路的材质,整个系统消耗 1 个描画函数。
- 粒子系统 B 的组成: 1 个发射器生成 12 个平面实例,使用带有 2 个通路的材质,整个系统消耗 2 个描画函数。
- 粒子系统 C 的组成: 1 个发射器生成 12 个网格物体,使用带有 2 个通路的材质,整个系统消耗 24 个描画函数。(2 个通路每个调用 * 12 个网格物体,因为每个网格物体是一个单独的描画函数调用,所以最后 = 24 个描画函数)
- 粒子系统 D 的组成: 1 个发射器生成 6 个网格物体,使用带有 2 个通路的材质,与此同时 1 个发射器使用 1 个通路生成 10 个平面实例,所以整个系统消耗 13 个描画函数。(2 个通路每个调用 * 6 个网格物体,因为每个网格物体是一个单独的描画函数调用,最后 = 12 个描画函数,1 个通路 * 10 个平面实例 = 1 个描画函数调用)
半透明材质 = 1 个通路基数
- 变形 +2 个通路
- bUseLitTranslucencyDepthPass +1 个通路
- bUseLitTranslucencyPostRenderDepthPass +1 个通路
- bUsedWithFogVolumes +2 个通路
DumpParticleFrameRenderingStats
命令查看特定场景的描画函数调用。这个命令会输出详细列出了描画函数调用消耗的电子表格。
描画函数调用造成的影响将会按比例增加被渲染的视图数量。这意味着在分屏中效果将会加强。请参阅VFX 优化: 分屏页面了解更多有关优化分屏后的效果的详细信息。
重要的是在构建您的效果以及优化效果的时候记住对应的消耗。如果由于描画函数调用使得您的渲染线程消耗较高,而环境消耗在预算范围内,那么这里时可以开始看的地方。
网格物体发射 - 游戏线程/渲染线程
碰撞 - 游戏线程
- MaxCollisions: 尽量使这个值小一些
- Collision Completion Option(碰撞完成选项): 将它设置为 HaltCollisions/Freeze 可以在到达 MaxCollision 后停止对场景进行碰撞检查。
- Damping Factor(衰减因数)可以确定物体在碰撞后的弹跳量,值越低可能会更快地停下来(降低 Max Collision 值)。
基于每个单位生成粒子 - GPU/游戏线程
- 尽量使 Unit Scalar(单位标量)的值高一些,然后在它与发射率之间平衡,这样可以得到您需要的填充率,不会使效果过重
- 如果您知道自己使用 Spawn Per Unit 将会具有较高的发射率,那么尝试使用指令数较少的材质
- 调整 Max Frame Distance(最大帧距离)限制可以发射的粒子数量。如果该发射器超出这个 Max Frame Distance(最大帧距离),那么 Spawn Per Unit 将会停止发射,直到它返回这个距离范围以内。这样可以阻止发射器将大量平面实例转存到场景中。
内存消耗
- 将系统中的模块数量减少到只包含指定操作所必需的模块
- 对于虚幻效果,减少 Loop Time(循环时间)/Duration(持续时间)(为每个虚幻分配更少的粒子)
- 减少生命周期(总体上说就是粒子更少)
- 尽量共享更多的模块
更新时间 - 游戏线程
非定向光照消耗 - 游戏线程
- 将效果的唯一颜色变体存储在内存时的性能消耗
- 在运行时加载唯一颜色变体的性能消耗
- 在 Cascade 中创建每个颜色变体的性能消耗
- 照亮效果使环境与游戏线程上的 Non Directional Lighting(非定向光照)匹配的性能消耗