开发学院

您的位置:首页>技术文章>正文

技术文章

大幅提升FPS!Unreal Engine 5 最佳 2D 设置

开发学院2025-04-05 08:59:16
Unreal Engine 的默认设置是针对高清 3D 游戏设计的。如果我们用 UE 制作 2D 游戏,有一些设置我们必须更改,以防止出现视觉伪影并提升游戏性能。通过应用这些设置,我的项目性能从 160 FPS 提升到了 380 FPS。

概述

  Unreal Engine 的默认设置是针对高清 3D 游戏设计的。如果我们用 UE 制作 2D 游戏,有一些设置我们必须更改,以防止出现视觉伪影并提升游戏性能。通过应用这些设置,我的项目性能从 160 FPS 提升到了 380 FPS。

  注意:本文档专门针对纯2D 游戏的,并不完全适用于HD2D游戏(将2D 角色精灵与 3D 背景相结合的2D/3D混合游戏)。其中一些设置可能也适用于HD2D游戏,但有些则不适用。 

项目设置

  以下所有设置都可以通过打开项目设置并搜索它们来轻松找到。

默认逐虚幻像素单位(Pixel Per Unit)

  对于导入尺寸过小的2D精灵(16/32px),可以设置为4-5倍大小,默认是1,设置为0.2或0.25即可。

自动曝光(Auto Exposure)

  禁用自动曝光,将自动曝光设置为手动并将自动曝光偏置(Auto Exposure Bias)设置为 0.0

  这些设置将防止自动曝光或眼睛适应功能被触发。

运动模糊(Motion Blur)

  关闭运动模糊。

  对于 2D 精灵,运动模糊是由艺术家绘制到动画中的,而不是由引擎添加的,因为这会让画面看起来模糊且不美观。

抗锯齿(Anti Aliasing)

  抗锯齿是一种可以平滑锯齿线的技术,不同类型的抗锯齿各有优缺点。

  对于纯 2D 游戏,我们希望将其设置为无(NONE),因为这可能会让像素看起来很奇怪。

  对于 2D/3D 混合游戏,我们希望在背景上使用抗锯齿,但由于无法分层处理,我们可以尝试使用 FXAA,这通常不会对像素艺术造成问题。

动态全局光照方法(Dynamic Global Illumination Method)

  将动态全局光照方法设置为无(None)。

  默认情况下,此设置为 Lumen,它仅适用于次世代设备,并且非常耗费资源。仅关闭这一项就可以在低端设备上带来 80% 的性能提升。

反射方法(Reflection Method)

将反射方法设置为无(None)。

  此设置默认使用 Lumen,非常耗费资源。在 2D 游戏中我们不需要反射功能,这有助于提升性能。

阴影贴图方法(Shadow Map Method)

  将阴影贴图方法设置为阴影贴图(Shadow Maps)。

  由于 2D 游戏不使用阴影,切换到这种资源占用较少的方法可以提升性能。

环境光遮蔽(Ambient Occlusion)

  关闭环境光遮蔽和环境光遮蔽静态分数(Ambient Occlusion Static Fraction)。

  这与阴影相关,而我们在 2D 游戏中不需要阴影。

前向渲染(Forward Shading)

  这将把项目从延迟渲染切换到前向渲染。对于制作 VR 或 2D 游戏,这通常更高效,在我的原型中,我在笔记本上看到了 7% 的 FPS 提升,在 Steam Deck 上则提升了 33%。

  更新此设置将提示您重启项目并重新编译着色器,这将花费几分钟时间。

后处理设置

  为了将后处理设置应用于您的游戏,您需要在每个阶段创建一个后处理体积(Post Process Volume)。

  默认情况下,后处理体积仅会影响位于盒子内的摄像机。为了将效果应用于整个阶段,我们需要选择后处理体积并进入右侧的详细信息面板。

  在这里,我们可以搜索 unbound 并激活 无限范围(Unbound)。

  从现在开始,我们在这里更改的所有设置都将影响整个阶段的摄像机。

  如果您创建了另一个关卡,您需要复制并粘贴这个后处理体积并将其放置在其中。

曝光补偿(Exposure Compensation)

  将曝光补偿设置为 0.0

  这将防止眼睛适应问题以及精灵显得过亮。

EV100

  将 MinEV100 和 MaxEV100 均设置为 0.0

  这与自动曝光和眼睛适应相关。

暗角强度(Vignette Intensity)

  将暗角强度设置为 0.0

  这将消除屏幕边缘的渐变变暗效果,这种效果在 2D 游戏中并不适用。

扩展色域(Expand Gamut)

  将扩展色域设置为 0.0

  此设置与色彩相关,可确保我们不歪曲原始精灵的颜色。

色调曲线量(Tone Curve Amount)

  将色调曲线量设置为 0.0

  这也与色彩相关,可以确保精灵在一定程度上保留其原始颜色,但不会完全完美。

  要实现完全完美,您需要使用 C++ 方法强制使用无光照视图模式。

仅限 C++ 的方法

  强制视图模式为无光照(Forcing View mode to unlit)

  有人提到无光照模式仅用于调试,不建议以这种方式使用。

  然而,在 PC 和 Steam Deck 上测试时,这确实带来了显著的性能提升,并且是保留原始精灵颜色的最简单方法。

  根据https://x.com/LifeArtStudios/status/1864297114961863039的描述,这在他针对 Android 构建时并没有奏效,因此请谨慎使用并自行进行测试。


使用 C++ 时,我们可以强制打包构建显示无光照视图模式。

  这可以确保我们获得与绘制时完全相同的颜色,而色调映射器、光照以及其他一切都会被忽略。

  这也带来了又一次的性能提升,在我的案例中,这让我在 Steam Deck 上的 FPS 从 420 提升到了 470。

  我们的一位 Discord 成员 KulaGGin 推荐了这种方法,因此非常感谢他!

  如果您在 Discord 上,可以在这里查看他的完整消息:   https://discord.com/channels/918791952751792129/1300445208885854249/1300445261168115723

  总之,您需要创建一个 C++ 蓝图函数库,并向其中添加一个函数。

    UFUNCTION(BlueprintCallable)
    static void SetViewMode(EViewModeIndex ViewMode);

  需要将类名更改为与您的函数库名称匹配!

void UMyBlueprintFunctionLibrary::SetViewMode(EViewModeIndex ViewMode) {
    ApplyViewMode(ViewMode, false, GEngine->GameViewport->EngineShowFlags);
    GEngine->GameViewport->ViewModeIndex = ViewMode;
}

  然后您需要在游戏开始时调用这个函数。创建一个父游戏模式,在 beginPlay 时调用它,然后根据需要创建子游戏模式,这可能是最好的方法。

  确保将视图模式设置为无光照(Unlit)。

  这种方法的唯一问题是,您需要设置 C++,而并非每个人都能做到。虽然可以通过蓝图强制无光照,但在打包项目中这种方法是不起作用的。

纹理设置(Texture Settings)

  通用设置

  最简单的方法是右键单击纹理,选择 Sprite Actions,然后点击 Apply Paper 2D Texture Settings。

  这将更新以下设置:

  Mip Gen Settings: No Mip Maps

  Texture Group: 2D Pixels (Unfiltered)

  Compression Settings: UserInterface2D (RGBA)

  Filter: Default (from Texture Group)

  这些设置通常适用,适用于大多数用例。如果您使用的是非像素艺术精灵,您可能需要将 Filter 设置为双线性(Bilinear)或三线性(Trilinear)过滤。


Bug:游戏构建中的模糊像素艺术

  当在 Unreal Engine 编辑器中运行游戏时,将 Default (from Texture Group) 设置为默认值是没问题的,并且可以让您的精灵看起来清晰。

  然而,在构建游戏时,此设置会有一定概率发生问题,使精灵重新变得模糊。解决方法是将过滤器从 Default (from Texture Group) 设置为 Nearest。

  逐个对每个纹理进行此操作会很耗时,并且很容易遗漏一些。

  最佳工作流程是在包含精灵表和瓦片图的文件夹中筛选纹理。

  然后您可以选择并右键点击它们,进入 Asset Actions,选择 Edit Selection in Property Matrix。

  确保左侧选中了所有资产,然后将 Filter 设置为 Nearest。