虚幻引擎(UE5)-大世界分区WorldPartition教程(一)


提示:以下是本篇文章正文内容,下面案例可供参考

WC与WP的区别

WorldCompostion(WC)
是UE4中制作大世界的解决方案,但是WC有下面三个的问题:

其一是:多人协作的工作流冲突,大世界的编辑肯定需要多人来协作完成,在WC中需要先将大关卡(PersistentLevel)人为切分为若干个SubLevel,编辑是以SubLevel为单位的,A如果想编辑SubLevel1中的某些Actor,则签出SubLevelA进行编辑,如果此时B想编辑SubLevelA中的另外一些Actor,则必须等待A签入SubLevelA之后再签出进行编辑,降低了协作效率。

其二是:对其中某个SubLevel进行修改如果改变了它的LevelBounds,可能需要重新划分SubLevel,否则可能导致关卡流送错误,因为流送机制是用BBCC包围盒算法(SphereAABBIntersection)来决定是否流送某个SubLevel的。

其三是:坐标精度限制,在UE4中坐标采用的是32位的单精度浮点数据类型,这在一定程度上限制了大世界的规模以及Actor的位置精度。

WorldPartition(WP)
而UE5新出的WorldPartition为了解决WC的问题提供了下面三种方法:

其一是:正对WC出了一个叫One File Per Actor(OFPA)直译意思是一个Actor保存为一个文件,这个机制,完美的解决了WC中协作冲突问题,究其原因是编辑粒度问题,在WC中编辑的最小单位是SubLevel,它由若干个Actor组成,它并非大世界中可编辑的最小单位Actor,UE5中的OFPA机制会将大世界中的Actor实例保存到额外的一个文件中,编辑人员可以针对某个Actor进行编辑,协作互不影响。

其二是:编辑SubLevel有可能导致LevelBounds变化的问题,UE5中编辑大世界无需人为手动划分SubLevel,而是在运行或烘焙(Cook)时,程序自动将大世界中的Actor划分到若干个Cell中,因此不存在LevelBounds问题,同时也省去了在WC中排布这些SubLevel的工作。

其三是:坐标精度问题,UE5引入了大世界坐标Large World Coordinates(LWC),支持64为的双精度浮点数据类型,为制作次世代超大世界提供了支持。

一、如何开启WP

1.默认创建WP

在创建工程时,选择游戏->空白模板
在这里插入图片描述
创建完成后在上方菜单栏中选择 窗口->时间分区->世界分区编辑器,即可看到默认创建的关卡就是大世界光卡
在这里插入图片描述
在这里插入图片描述

2.手动创建WP

在菜单栏中,文件→新建关卡,然后选择Open World或空白开发世界模板即可,这样创建的关卡会默认开启流送属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.转换创建WP

普通关卡是指除了通过上述两种方式
1.创建的关卡,比如在内容浏览器中通过右键创建的关卡
2.通过菜单文件->创建新关卡中选择Basic或空白关卡模板创建的关卡
以上两种方式创建的都是普通的关卡
在这里插入图片描述
在这里插入图片描述
以上创建的关卡无法开启WP,这可以从世界设置中的世界分区中可以看出,其中World Partition被置灰,无法修改
在这里插入图片描述
要想将上述的普通关卡转成WP关卡,UE中提供了两种方式:

第一种:通过工具来转,上方工具栏中→转换关卡
在这里插入图片描述

第二种:通过命令来进行转换

UnrealEditor.exe 工程名 -run=WorldPartitionConvertCommandlet 目标关卡 -AllowCommandletRendering

可以参考一下官方文档:World Partition

二、设置World Partition参数

World Partition系统会将整个大世界中的Actor自动划分到若干个单元格网格中,那么这个单元格式大小是多少呢?它实际上是我们在世界分区设置->运行时设置 中配置的:
在这里插入图片描述
在这里插入图片描述
默认情况下,会为WP关卡生成一个Grid,该Grid就是整个关卡的大小,当然你也可以手动创建或删除Grid,但至少要保证有一个Grid,否则运行时无法加载关卡

其中有两个参数值得注意:

CellSize,在运行或烘焙时,WP系统会根据设定的CellSize来将Grid划分为若干个Cell,这个CellSize的具体大小应根据项目来设置,但不易过大或过小,因为流式加载是以Cell为单位的,过大可能会导致加载较慢,且可能加载了一些不必要的Actor,过小可能会导致频繁的加载卸载
Loading Range,划分好的Cell会根据Grid的LoadingRange来流式加载,同样的,LoadingRange的大小也应该根据具体的项目来设置
这其实和UE4中WC的LevelLayer差不多,一个LevelLayer相当于一个Grid,每个LevelLayer都可以设定SteamingDistance,SteamingDistance就相当于LoadingRange
在这里插入图片描述
但也有不同的地方,那就是WC中需要先将大关卡切成一个个的子关卡,然后再在WC中进行排布这些子关卡,而WP中是自动划分Cell的

前面提到了可以手动创建Grid,那么如何指定Actor属于哪个Grid,它具体操作如下:

首先创建自己的Grid,然后选中关卡中的Actor,去到它的Details面板的World Partition部分

在这里插入图片描述
在这里插入图片描述
其中的两个设置:

Runtime Grid:在其中填入自己创建的Grid的名字,如果为不填(None),该Actor将属于默认创建的Grid

Is Spatially Load:如果勾选会,则会根据LoadingRange来流式加载,如果没有勾选,那么将直接加载(类似UE4中的Always Load),注意,如果该Actor处于DataLayer中并且该DataLayer被设为Unload状态,此时无论勾选与否,Actor都不会被加载

三、启动流送

在这里插入图片描述
也可以通过创建Actor并添加WorldPartitionStreamingSource组件来让Actor变成Streaming Source

在这里插入图片描述
这里可以运行打开关卡流送调试图,运行后输入命令:

开启该调试的指令:wp.Runtime.ToggleDrawRuntimeHash2D

白色圈圈表示StreamingSource所在位置和LoadingRange大小,与白色圈圈有交集的Cell会被加载

绿色表示已加载的Cell,黄色表示正在加载的Cell,紫色表示已卸载的Cell

在这里插入图片描述

总结

WorldPartition是一套复杂且完善的构建大世界的解决方案,这样一套解决方案的背后,是一系列技术的支持,其中主要包括:

  1. One File Per Actor(OFPA),将大世界中的每个Actor实例都保存为一个额外的文件,文件编辑粒度变小。
  2. Level Instancing,在编辑时可以将某些Actor合并为一个LevelInstance,以方便对某些Actor重用和一些特殊的操作。
  3. Hierarchical Levels of Detail(HLOD),为了降低超大世界在运行时的内存和渲染压力,需要对大世界做LOD处理,例如将远处的山脉、树林等静态网格的Actor合并为一个静态网格等。
  4. 自动划分Cell,在运行时或烘焙的时候将大世界中的Actor自动划分到若干个Cell中,然后流式加载Cell。
  5. Data Layers,在编辑时,将Actors放到不同的DataLayer中,并可以动态的加载卸载DataLayer内的Actor,以方便编辑时管理复杂关卡,同时也可用它来做一些Gameplay功能,比如将白天和黑夜相关的Actor放到不同的DataLayer中来完成白天黑夜切换。
  6. Large World Coordinates(LWC),支持64为的双精度浮点数据类型,为制作次世代超大世界提供了支持大世界坐标。

以上就是今天要讲的内容,本文仅仅简单介绍了WorldPartition的使用,而WorldPartition提供了大量能使我们快速便捷地构建自己的大世界场景。

下一篇:虚幻引擎(UE5)-大世界分区WorldPartition教程(二)

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS子枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值