Choose your operating system:
Windows
macOS
Linux
在为移动平台进行开发的过程中,当针对特定设备时您应该牢记一些事项,或者根据您想要发布标题的设备列表, 应该牢记一些通用的良好做法。这包括使用特定照明层进行开发以最大限度地利用设备上的性能, 以及特定照明层可能最适合您的目标受众的原因。您还会找到一些建议来记住您所从事的任何 会使用移动平台进行开发的项目。
性能层
虚幻引擎4(UE4)支持移动设备上的各种照明功能。使用这些功能会降低性能,并且可能导致您的游戏在较慢的移动设备上表现不佳。虽然 可以混合和匹配UE4的大多数移动照明功能,但是将这些功能划分为以下几层是很有用的。在构建移动游戏时,您应该基于游戏所需要的 图像质量以及您需要支持的设备类型来决定使用哪些功能。查看iOS开发和Android 开发下的兼容性页面, 以了解更多关于在Epic测试过的设备以及我们认为最适合该设备的层。
LDR(低动态范围)
低动态范围(Low Dynamic Range) (LDR)模式是UE4中支持的最低性能层,推荐用于不需要照明或后期处理功能的游戏。
要使用此模式,您必须在
优点 |
缺点 |
建议 |
---|---|---|
|
|
|
基本照明
在这一层,您将利用静态照明和完全粗糙的材质创建包含有趣照明的场景,同时将性能最大化,以覆盖更广泛的移动设备。
要使用此模式,您必须在
优点 |
缺点 |
建议 |
---|---|---|
|
|
|
全HDR(高动态范围)照明
在这一层中,您可以利用UE4中适合移动的大多数HDR照明功能,以及一些后期处理(Post Processing)功能。使用这些功能需要相当大的性能, 以换取高质量的照明功能。
要使用此模式,您必须在
优点 |
建议 |
---|---|
|
|
包含来自太阳的逐像素照明的全HDR照明
在这一层中,您可以利用UE4中适合移动的所有HDR照明功能。这一层与全HDR照明相同,具有相同的优点 和建议,不同的是在此处您可以在场景中添加一个定向光源,定向光源会自动使用逐像素光源从而提高质量。
要使用此模式,您必须在
优点 |
建议 |
---|---|
|
|
着色器复杂性视图模式
移动预览器中的着色器复杂性视图模式, 用于了解您所针对的特定设备的材质成本是多少。屏幕上显示的颜色会告诉您这种材质对于您的目标设备有多贵;绿色表示性能好, 鲜红色表示非常贵,白色或粉色表示材质非常贵。
要使用它,在主视口中单击 视图模式(View Modes) 列表,选择 优化视图模式(Optimization Viewmodes),选择 着色器复杂性(Shader Complexity),或者使用键盘快捷键 Alt + 8。
单击显示全图。
下面是一些来自移动太阳神庙(Mobile Sun Temple)的例子,当您使用着色器复杂性查看时,这些例子可以让您对材质成本有一个概念:
|
|
|
---|---|---|
支柱材质在这里相当昂贵,半透明的体积片 极为 昂贵。在这个场景中,我要求去掉半透明片,因为它们太贵了。 |
这里的柱子是相当昂贵的,因为它们使用所有五个纹理查找并且做相当多的分层。否则,这对于30fps来说已经足够有效了。 |
这里,树导致像素 极其 昂贵。如果玩家能够近距离接触或用这种材质覆盖屏幕,成本将是巨大的。 |
移动内容缩放系数
在这个文件中,您可以通过输入以下命令,后跟以下iOS和Android部分中的一个值,以指定特定设备的项目分辨率将发生什么情况:
r.MobileContentScaleFactor
在下图中,您可以看到在配置文件中设置移动内容缩放系数的示例:
单击显示全图。
这个特定配置文件来自Tappy Chicken项目,它显示了在各种移动设备上游玩Tappy Chicken时会对分辨率产生什么影响。该文件的顶部部分 处理iOS设备的分辨率缩放,底部部分处理Android设备的分辨率缩放。注意每个 r.MobileContentScaleFactor 后面有一个数字。该数字 用于命令之后,以确定项目的分辨率应该放大还是缩小。
iOS的移动内容缩放系数
对于iOS设备,输入以下数字将产生以下结果:
iOS的缩放系数与Apple的缩放系数系统直接相关,除0.0外的任何缩放系数的实际分辨率都将被校正,以匹配屏幕的纵横比并限制到 设备的本机分辨率。
值 |
结果 |
---|---|
0.0 |
这将使用设备的本机分辨率。 |
1.0 |
视网膜设备上的是非视网膜分辨率。 |
2.0 |
iPhone 5S、iPad Air等的全本机分辨率。 |
3.0 |
iPhone 6+的全本机分辨率。 |
Android的移送内容缩放系数
对于Android设备,输入以下数字将产生以下结果:
请注意,如果输入的值不是0.0,则将根据设备的方向使用该值作为标准1280x720或720x1280分辨率的缩放系数。
值 |
结果 |
---|---|
0.0 |
这将使用设备的本机分辨率。 |
1.0 |
这将尝试给您一个横向1280 x 720和纵向720 x 1280的分辨率。 |
2.0 |
这将尝试给您一个横向2560 x 1440和纵向1440 x 2560的分辨率。 |
移动材质质量设置
当为一个将在低端和高端移动设备上运行的UE4项目构建内容时,您经常会遇到这样的问题:某个功能或您的作品只在一组设备上工作, 而无法在另一组设备上工作。虽然有很多方法可以解决这类问题,但其中许多方法都是时间和资源密集型的,有时容易出错。要解决这些类型的问题 UE4拥有 材质质量水平(Material Quality Level) 系统。该系统使您能够构建一个单一材质,然后可以在广泛的设备上使用, 使您能够完全控制哪些设备使用哪些功能。
在下面的部分中,我们将介绍这些系统以及如何在您自己的UE4项目中使用它们:
预览材质质量水平
您可以在编辑器中查看不同的材质质量水平(Material Quality Level)设置,方法是打开 主工具栏(Main Toolbar),然后 选择 设置(Settings) > 材质质量水平(Material Quality Level), 选择要预览的水平。
单击显示全图。
下面的图片显示了当材质质量水平(Material Quality Level)设置为低(Low)、中(Medium)、高(High)时材质的外观。
设置材质质量水平
要为您的设备设置材质质量水平(Material Quality Level),您可以采用以下方法:
从控制台
按 `(反引号)键并输入 r.MaterialQualityLevel,后跟以下值,以调出控制台:
材质质量水平编号 |
设置 |
---|---|
0 |
低 |
1 |
高 |
2 |
中 |
请注意,1代表高,2代表中,这是正确的,不是打印错误。
从设备配置文件
通过使用配置(.ini)文件,您可以在编辑器中使用以下方法为计划目标设备设置材质质量:
从主工具栏(Main Toolbar)转到 Windows > 开发人员工具(Developer Tool),然后单击 设备配置文件(Device Profiles)。
单击显示全图。
在设备配置文件中找到 Android_Low 配置文件,单击第一个 扳手 图标打开配置文件选项。
在 渲染(Rendering) 选项下的 控制台变量(Console Variables) 部分中,单击 加号 图标,在弹出的输入窗口中输入 R.MaterialQualityLevel,然后按回车(Enter)键将该命令添加到列表中。
单击显示全图。
添加新条目后,将默认值从 1 更改为 0,以便在低端Android设备上查看此项目时使用尽可能快的材质(Material)设置。
单击显示全图。
预览不同质量关卡
通过调整 预览渲染关卡,您可以使用虚幻引擎4编辑器查看项目在不同硬件上运行时的外观。您可以通过切换到 主工具栏(Main Toolbar),然后选择 设置(Settings) > 预览渲染关卡(Preview Rendering Level),并选择您想要使用的预览关卡来进行调整。
单击显示全图。
材质质量水平开关
质量开关(Quality Switch) 材质表达式允许您在单个材质中定义不同的复杂性水平。例如,如果您有一个要在高端而非低端移动设备上运行的复杂数学运算, 或者大量的纹理读取作业。您可以使用此节点指定要在低端移动设备上显示的简化版本,这些设备没有能力显示高端图形。
要在材质中使用质量开关,首先需要将 质量开关材质表达式(Quality Switch Material Expression) 节点添加到材质图表中,然后将其输出插入到主材质(Main Material)节点上的任何输入 中。在下图中,设置M_Brick_Clay_Old材质(可以在初学者内容包中找到),这样在切换质量水平时,材质的复杂性就会降低。
单击显示全图。
移动材质选项
如果您打开任何 材质(Material) 并单击主材质(Main Material)节点,然后查看 移动(Mobile) 部分下的细节(Details)面板,您将发现以下两个属性:
属性 |
设置 |
---|---|
完全粗糙(Fully Rough) |
强制一个材质完全粗糙,节省大量的指令和单个纹理采样器。 |
使用光照图方向性(Use Lightmap Directionality) |
使用光照图方向性和每像素法线。如果禁用,光照图看起来更平坦,而使用起来更便宜。 |
单击显示全图。
可以启用这两个属性,以通过完全消除这些功能的渲染路径,在功能不太强大的移动设备上查看时帮助降低该材质的渲染成本。 然而,这是一个全有或全无的选项,因为您要么在所有设备上为该材质启用这些选项,要么全部禁用。
移动材质渲染覆盖
通过调整位于 项目设置(Project Settings)>平台(Platforms) 下的不同目标设备的材质质量(Material Quality)设置,您可以覆盖平台将使用的可用渲染选项。
Android:
Open GLES 3.1
Vulkan
iOS:
Metal
您可以通过调整列出的 质量选项(Quality Options) 来覆盖平台将使用的可用渲染选项。为了使用覆盖,您必须首先单击 启用质量覆盖(Enable Quality Overrides) 选项, 然后为给定的质量水平选择要覆盖的选项。
一旦您想要的所有选项都被选中,按 更新预览着色器(Update Preview Shaders) 按钮来重新编译所有的材质以使用指定的选项。
移动渲染选项
在 渲染(Rendering) 部分下的 项目设置(Project's Settings) 菜单中,您会发现许多属性, 用于控制如何在您的移动项目中处理照明和优化。在下面的部分中,我们将了解这些设置以及它们对项目的影响。
访问您的项目设置
要访问项目设置,首先需要转到 主工具栏(Main Toolbar),然后选择 编辑(Edit)>项目设置(Project Settings)。
打开项目设置(Project Settings)菜单后,找到 引擎(Engine) 部分,然后单击 渲染(Rendering) 类别。使用以下部分调整下面的设置:
移动(Mobile)
照明(Lighting)
移动着色器置换(Mobile Shader Permutation)
单击显示全图。
移动渲染选项
在 移动(Mobile) 类别下,您可以设置直接影响您的移动项目的照明和外观的属性。请阅读下面的文章,为您自己的项目探索这些设置。
属性名称 |
说明 |
---|---|
移动HDR(Mobile HDR) |
如果为真(true),移动在全HDR中渲染。如果游戏在慢速设备上不需要照明功能以获得更好的性能,则禁用此设置。 |
在移动着色器中禁用顶点雾化(Disable Vertex Fogging in mobile shaders) |
如果为真(true),顶点雾化将从所有移动着色器中忽略。如果您的游戏不使用雾化,你应该选择这个设置来增加着色效果。 |
要渲染的CSM级联的最大数量(Maximum number of CSM cascades to render) |
使用移动渲染器时用于渲染动态定向光源阴影的级联的最大数量。 |
移动MSAA(Mobile MSAA) |
这是移动设备上使用的多样本抗锯齿(MSAA)设置。如果MSAA不可用,将使用当前默认的AA方法。 |
移动着色器减少设置
在 照明(Lighting) 和 移动着色器置换减少(Mobile Shader Permutation Reduction) 部分下,您会发现有很多不同的选项可以被启用或禁用来影响为材质生成的着色器, 这反过来会减少应用程序的大小,节省内存并加快加载速度。
属性名称 |
说明 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
照明(Lighting) |
项目设置(Project Settings)中 照明(Lighting) 部分下列出的选项应该根据移动性能进行调整。
|
||||||||||
移动着色器置换减少(Mobile Shader Permutation Reduction) |
在 移动着色器置换减少(Mobile Shader Permutation Reduction) 下找到的列示选项应该根据移动性能进行调整。
|
更改这些设置中的任何一个都需要重新启动编辑器才能生效。
如果您禁用了照明设置需要的某个着色器置换,您的照明或阴影将不会正确渲染,并且屏幕上将显示消息, 表明该设置需要重新启用,使其正常工作。
其他建议
以下建议将帮助您在移动平台上设置内容以获得最佳性能。排列顺序为从影响最大到影响最小。
在设备上运行之前,请确保已经构建了照明。
大多数后期处理功能在移动平台上是禁用的,因为它们太昂贵了,比如晕映或屏幕空间反射。一些GPU密集型功能,如泛光(Bloom)和景深(Depth of Field),在默认情况下是启用的,这样PC和移动设备看起来是一样的,但在某些设备上,许多功能的默认设置可能需要耗费60毫秒甚至更长时间。控制台命令 showflag.PostProcessing 0 可以用来关闭这些功能,从而大致了解它们的成本。
确保使用预计算可视性(Precomputed Visibility)并正确设置它。为此,将 预计算可视性体积(Precomputed Visibility Volumes) 放置在玩家可以行走或跳跃的区域周围,然后构建照明。您需要确保将它们放置在构建照明和运行游戏时使用的固定关卡中,因此不要自己构建子关卡。通过在设备上或关卡预览器中输入控制台命令 Stat Initviews,并确保 静态遮挡的原语(Statically Occluded Primitives) 大于0,可以验证预计算可视性(Precomputed Visibility)是否正常工作。使用控制台命令 r.ShowPrecomputedVisibilityCells 1 在编辑器中可视化单元格。
尽量少用遮罩和透明材质。只在覆盖屏幕一小部分的地方使用它们。iOS设备在对不透明表面进行遮光处理方面是非常理想的,因为它们只对每个像素进行一次遮光处理,但是对于遮罩和半透明,每一层都必须进行遮光处理。通过过度绘制,帧的总GPU时间可以增加一倍或更多。使用 着色器复杂性(Shader Complexity) 视图模式来调查任何热点。
对于任何单个视图,整个场景的绘制调用应该为<=700。遮挡程度较差的地区,比如俯瞰大片地形,将是最大的挑战。这可以在设备上的 Stat OpenGLRHI 或PC上的预览器中的 Stat D3D11RHI 中看到。
对于任何视图,整个场景的三角形计数应为<=500k。这已经被确定为在iPad4和iPad Air上都可达到30fps的最大多边形计数。这可以在设备上的 Stat OpenGLRHI 或PC上的预览器中的 Stat D3D11RHI 中看到。
材质应该使用尽可能少的纹理查找和指令。您有五个纹理采样器可用,但使用所有这些采样器相当于使用相当昂贵的材质。现在,使用PC指令计数来优化, 使用预览器着色器复杂性来可视化总成本。
仅在材质中使用独立纹理获取。这意味着像素着色器中的UV(基本颜色(BaseColor)、粗糙度(Roughness)等)不能以任何方式操纵,比如缩放。使用 自定义UV(CustomizedUV) 功能在顶点着色器中进行缩放。一些特殊的功能,比如环境映射,需要在UV上进行数学运算,这对于特殊情况来说是可行的。
建议使用正方形纹理,因为它们浪费的内存更少。始终对其使用二维的幂(256x256、512x512、1024x1024)。在预览器中使用控制台命令 列出纹理(ListTextures) 查看所有纹理内存的去向。