
您将从此页面获得: 为在Unity中工作的移动游戏开发者优化艺术素材的技巧。这是关于 优化移动游戏艺术的两篇文章 的第一篇。
您可以在 这本全面的电子书 和这个关于 移动应用程序的3D艺术优化的Unity Learn课程.

在移动平台上,多边形和顶点的计算成本都很高。将多边形放置在真正有助于应用程序视觉质量的区域,以免浪费处理预算。
由于大多数移动设备的屏幕尺寸较小,以及您应用程序中3D对象的位置,3D对象上的许多小三角形细节可能不可见。这意味着您应该关注大型形状和有助于物体轮廓的部分,而不是可能不可见的小细节。使用纹理和法线贴图来获得细节。

当物体远离时,细节层次 (LOD) 可以调整或切换它们以使用更简单的网格和更简单的材质和着色器,从而优化 GPU 性能。
更多 LOD 准备技巧
何时不使用 LOD
在每种情况下,LOD 并不适用。例如,避免在相机视图和物体都是静态的应用中使用它,或者物体已经使用低多边形计数的情况下。LOD 带来了内存开销和更大的文件大小,因为网格数据必须被保存以便实时使用。

您可以将多个网格合并为一个,以减少渲染所需的绘制调用数量。要应用此技术,请在层级中创建一个空的 GameObject,并使其成为您想要合并的网格的父级,然后将实现 Mesh.CombineMeshes() 方法的脚本附加到父级 GameObject 上。
使用遮挡剔除
隐藏在其他物体后面的物体仍然可能被渲染并消耗资源。使用遮挡剔除来丢弃它们。
虽然在相机视野外的视锥剔除是自动的,但遮挡剔除是一个预烘焙的过程。只需将您的物体标记为静态遮挡物或静态被遮挡物,然后通过窗口 > 渲染 > 遮挡剔除对话框进行烘焙。虽然并非每个场景都需要,但在许多情况下,剔除可以提高性能。查看使用遮挡剔除教程以获取更多信息。

导入模型时,请记住以下一些好的提示。

纹理可以有不同的大小。减少需要较少细节的纹理的大小将有助于减少带宽。例如,漫反射纹理可以设置为1024 x 1024,相关的粗糙度/金属图可以设置为512 x 512。尽量选择性地减少纹理大小,并始终检查是否有任何视觉效果在之后被降级。
大多数纹理软件使用sRGB颜色空间处理和导出纹理。
我们建议您在sRGB颜色空间中使用漫反射纹理。未作为颜色处理的纹理不得在sRGB颜色空间中。这些纹理的例子包括金属、粗糙度和法线图,因为图是作为数据而不是颜色使用的。在这些图中使用sRGB将导致材料上的视觉效果错误。
注意:确保检查器窗口中的sRGB(颜色纹理)设置旁边没有粗糙度、镜面、法线图或类似项目的勾选。

环境光遮蔽和小镜面高光等元素可以烘焙并添加到漫反射纹理中。这种方法意味着您不必过于依赖计算开销大的着色器和Unity功能来获得镜面高光和环境光遮蔽。

尽可能使用允许在着色器中进行颜色调 tint 的灰度纹理。这节省了纹理内存,但需要创建自定义着色器来执行调 tint。在使用此技术时要谨慎,因为并非所有对象都适合使用此方法。将此应用于具有均匀颜色的对象更容易。

纹理过滤通常会改善场景中的纹理质量,但它也可能降低性能,因为实现更好的纹理质量通常需要更多的处理。纹理过滤有时可能占到 GPU 能耗的一半。选择更简单和更合适的纹理过滤器可以帮助减少应用程序的能量需求。

您的大部分内存可能会用于纹理,因此这里的导入设置至关重要。一般来说,导入资产时请遵循这些指南。

对iOS和安卓使用自适应可扩展纹理压缩(ATSC)。大多数正在开发的游戏倾向于针对支持ATSC压缩的最低规格设备。唯一的例外是:

纹理通道打包有助于节省纹理内存,因为您可以将三个贴图放入一个纹理中。这意味着更少的纹理采样器。这种方法通常用于将粗糙度、光滑度和/或金属感打包到一个纹理中。它也可以应用于任何纹理遮罩。例如,您还可以存储alpha遮罩。具有透明度的图像可能会占用更大的内存,因为它们需要32位格式,但通过使用空闲通道存储alpha遮罩,您可以将漫反射纹理保持在16位,并有效地减小文件大小。
使用绿色通道存储最重要的遮罩。绿色通道通常有更多位,因为我们的眼睛对绿色更敏感,对蓝色的敏感度较低。

UV贴图将2D纹理投影到3D模型的表面上。UV展开是创建UV贴图的过程。