April 3, 2018

网格体的跨平台设置及优化

作者 Sam Deiter

如果你有关注Epic的《堡垒之夜:大逃杀》(FNBR)的最新动态,就会知道我们最近宣布了面向移动设备的FNBR,将完整的《大逃杀》体验置于玩家的手掌之间。

为了游戏在保持PC、主机以及新增的移动平台上的连贯性,Epic的美术和工程师团队实现了一种解决方案,既易于维护,同时又令FNBR保持了相同的画面和玩法……且不受游戏设备的限制。在本博文中,我们将探讨此次开发过程中遇到的挑战以及通过UE4实现的解决方案。

理解跨平台问题:


Battle_Royale_Supported_Platfroms_No_Logo.png

当我们在《堡垒之夜:大逃杀》(FNBR)的语境下探讨跨平台问题时,我们指的是不同平台(例如PC、主机和移动平台)的玩家能够在同一个服务器上使用同一个地图、同一组资源一起游戏。虽然这是一个令人难以置信的壮举,但也确实存在一些必须解决的美术和工程障碍。

什么是“一一对应”:

What_Is_One_To_One.png

实现FNBR跨平台运营的一大关键挑战在于,必须让所有平台都能使用的同一张地图和同一组资源。这一点之所以重要是因为,要打造真正的跨平台游戏体验,地图及其中包含的所有物体在不同平台上都需要保持一一对应的关系。一一对应的意思是指无论你在哪个平台上玩FNBR,你看到的地图和地图中包含的所有资源都是相同的。玩家在PC游戏中看到的实际地图和资源和主机以及移动设备上的完全相同。这样,就能防止任何平台因为内容的缺失或差异而产生优势(或劣势)。

网格体LOD的跨平台设置

Static_Mesh_Editor_LOD_01.png

要让同一张地图和同一组资源在多种类型的硬件上运行需要对细节层次(LOD)系统的工作方式进行一些重大修改。不必太过担心;LOD系统的工作方式没有改变,只是现在它将提供一个新设置最小LOD(Minimum LOD),允许你指定在每个平台上如何使用LOD。为了更好地了解其工作原理,请参见以下静态网格体(Static Mesh)的示例图片,以及使用自动LOD生成工具创建的三种LOD层次。
  
Per_Platform_LOD_Tree_PC.png

在PC上使用该静态网格体(Static Mesh)时,所有这三个静态网格体(Static Mesh)都可以使用,因为一般来说,PC都拥有大量内存。

Per_Platform_LOD_Tree_Console_.png
   
但是,在(通常)内存有限的主机上使用同一个静态网格体(Static Mesh)时,我们就需要移除第一个静态网格体(Static Mesh),仅允许使用其余两个。

Per_Platform_LOD_Tree_Mobile.png

最后,在移动设备上使用这个静态网格体(Static Mesh)时,考虑到移动设备的内存比PC和主机更小,我们需要删除前两个静态网格体(Static Mesh),仅允许使用最后一个。

通过限制在哪个平台上可以使用哪种LOD,我们提高了渲染性能,同时又不必大幅修改内容。你可以在静态网格体编辑器(Static Mesh Editor)中的LOD设置(LOD Settings)下找到最小LOD(Minimum LOD)的设置。下图显示了如何设置上文示例中的树木静态网格体(Static Mesh)来确保每个平台使用特定的LOD范围。请特别注意主机移动输入插槽中的值。
  
在确保LOD系统可以灵活地指定每个平台的LOD的同时,另一个重要的部分是确保静态网格体(Static Mesh)的碰撞效果在所有平台上都一样。这一点很重要,因为具有不同碰撞物体的静态网格体(Static Mesh)会让某一个平台获得意外的优势,而这正是我们无论如何都要避免发生的情况。
LOD_Change_Tree_00.gif

幸运的是,这个问题不难克服,因为我们在所有平台上都使用了相同的地图和资源。我们只需要确保为静态网格体(Static Mesh)添加碰撞物体即可。完成这一操作后,该静态网格体(Static Mesh)就可以驾驭想要使用该网格体的所有平台了。     

限制绘图调用量(Draw Call):

提高任何虚幻引擎4项目渲染性能的最佳方法之一就是减少一帧所需的绘图调用数量。这里要为不了解“绘图调用(Draw Call)”一词含义的读者解释一下,该术语用于描述在一个帧内,为了构建游戏场景,必须在屏幕上绘制多少静态网格体(Static Mesh)以及应用到这些网格体的材质(Material)。但是,限制绘图调用意味着要优化材质(Material)和三角形(Triangle),而这对于FNBR这样大小的游戏而言可能存在问题,因为构建场景用到的资源众多。为了帮助完成这个几乎不可能完成的任务,需要大量使用分层细节级别(Hierarchical Level of Detail,HLOD)和代理几何体工具。

有人或许会问,为什么结合使用这些工具有助于限制绘图调用数量呢?首先,我们要使用HLOD工具依次放置静态网格体(Static Mesh)形成一个个组,我们称之为集群(Cluster),如下图所示。 
HLOD_SM_Group.png

创建好HLOD集群之后,我们再使用代理几何体工具以编程的方式为HLOD集群中的对象创建高度优化的替代静态网格体(Static Mesh)和纹理(Texture)。当代理几何体工具完成其任务后,就会得到类似下图的结果。
  
Proxy_Geometry_Results.png

第一次看到上图时,你可能会认理几何体工具没有正常工作,或者哪里设置得不正确,但事实并非如此。代理几何体工具结果看起来有点怪异的原因是我们使用的查看的方式并不是它预期的查看方式。观察下图就能看到游戏中的示例效果。

Org_VS_Proxy_At_Game_Distance_01.png

上图中的高亮区域显示了使用HLOD和代理几何体工具替换远距离对象的视觉效果差异。由于这个区域比较小,难以区分,所以将高亮区域放大后形成以下对比图。

Org_VS_Proxy_At_Game_Distance_02.png

上图(标注为“Original”)显示了该区域没有使用HLOD和代理几何体的效果。这一小块(高亮)区域由424个静态网格体(Static Mesh)组成,需要渲染556,445个三角形。这就需要大量资源来创建一个面积小、距离远的资源。

下图(标注为“Proxy”)显示了该区域使用HLOD和代理几何体工具之后的效果。现在,这一小块区域只需要一个静态网格体(Static Mesh),需要渲染1,215个三角形。当然,二者之间的视觉差异可能很小,但需要记住,玩家不会像我们这样放大这张图片。此外,考虑到这种做法对任何UE4项目带来的性能益处,即使远距离对象不会完美匹配原始对象,也是非常值得一试的做法。 

结束语:

在虚幻引擎4.19版中,您可以找到本博文提到的所有令人惊叹的新功能,正因为这些功能,才使的在任何设备体验上FNBR成为可能。如果您想了解有关如何在UE4项目中使用HLOD和代理几何体工具的更多详细信息,可以使用以下链接查看这些工具的虚幻引擎4官方文档。

HLOD工具

HLOD_Outliner.png

HLOD工具用于创建静态网格体(Static Mesh)组,继而将这些组合并成一个静态网格体(Static Mesh)和纹理(Texture)。

代理几何体工具
  
ProxyGeo_Tool.png

代理几何体工具用于以编程方式创建高度优化的静态网格体(Static Mesh)和纹理(Texture)以降低渲染远距离对象的成本。

如果您是UE4的新用户,并想要获取下载地址,可以使用以下链接进行下载。