无缝地图模块

支持超大地图的有效资源管理,保障各端性能的前提下呈现出无限生长的超大地图

1.整体介绍

通过无缝大世界资源管理引擎,会把开放世界地图中的大世界分成小块区域管理,并设置一个“参照点”,当参照点足够接近某个虚拟格子,或碰到碰撞体时,将其异步加载进来。实现用户的最优质体验,可以直观感受到一个无限生长地理模块之间无缝隙的世界

2. 主要功能对应数资及脚本

脚本或dll Prefab 说明 功能示意图
Baidu.Meta.MCK.InfiniteMapEditor.ExportBigWorldData
Baidu.Meta.MCK.InfiniteMapEditor.BigWorldModelData
PC Editor下编辑功能,在编辑器模式下,将场景内需要动态加载的物体的位置、包围盒、所属层级、是否需要剔除等信息以数据形式导出,以供Runtime工具在运行时加载无缝地图。

3. 客户端接口

代码:AvatarCreateService.cs

接口 参数 返回 说明
InfiniteMapMainLogic.Instance.CullInit byte[]:bytes
bool:culling
bool 初始化剔除数据,非必选。不传则无剔除
InfiniteMapMainLogic.Instance.LayerInit byte[]:bytes bool 初始化大世界加卸载数据,必传

4.无缝地图生成使用步骤

1.通过如下路径,打开配置文件导出窗口。

2.根据区块加卸载距离的不同,设置若干层级。配置每个层级的区块大小和不同LOD下的区块加卸载距离,点击“保存infiniteMain.json"按钮保存上述配置。已保存的配置可以通过“读取infiniteMain.json"进行读取。

3.打开Bigworld_Edit_New场景,根据上一步设置的层级数量,设置若干节点作为根节点。按需将场景中需要动态加载的物体置于对应节点之下。

  1. 为每一个需要动态加载的物体挂载BigWorldModelData脚本并设置参数。 LOD Level:Layer下的加载子层级,对应第2步中的LOD0、LOD1、LOD2。

Asset Type:资源类型。一般单个物体为single类型,由多个物体组成的整体(如一个地块内的大型建筑群)为group类型。

Is Internal Asset:是否为标准模型。

Join Culling:是否纳入GPU Culling剔除。

  1. 设置场景范围及区块大小:预设的数据将场景中将一个3000x3000大小的场景范围(坐标范围-1500<x<1500, -1500<z<1500)按100x100大小划分为900个区块。此处可按需修改。
  1. 在“配置文件导出”窗口中设置每一层级的根节点(由Scene直接拖入),点击“保存地块配置 layer_x_y.json及包围盒信息并导出二进制”按钮,选择目录并确认,等待一段时间保存相关配置。当保存完成,点击“以Bigworld_Edit_New保存BigWorld”,会将当前打开的场景中动态加载的物体去除,并保存为新场景。

操作完成后,打开导出目录验证生成的LayerAll、extent.json等文件。

5.Runtime使用说明

5.1 组件使用流程

用户通过上面Editor产出如下3分配置:

LayerAll:记录了场景里面所有得对象信息

infiniteMain.json:记录加载得策略,比如具体要加载多远得距离。

extent.json: 用来处理剔除得配置,剔除组件读取该配置。

5.2 组件使用详细流程

  1. 通过Editor导出3.1所需要得场景配置
  2. 加载extend.json 调用InfiniteMapMainLogic.Instance.CullInit(result.Result.text);
  3. 加载infiniteMain.json 调用InfiniteMapMainLogic.Instance.LayerInit(layers);
  4. 将MiddleAssets挂到预制体上,并将LayerAll托到对应得对象上。标记该预制体“MiddleAssets”。
  5. 初始化之后大世界加卸载工具会自动执行。
公告模块系统设置模块