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

news2024/9/21 2:44:38

文章目录

  • WC与WP的区别
  • 一、如何开启WP
    • 1.默认创建WP
    • 2.手动创建WP
    • 3.转换创建WP
  • 二、设置World Partition参数
  • 三、启动流送
  • 总结


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

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教程(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【java实战】emoj表情导致mySQL存储错误,完美解决

MySQL表的编码格式为utf-8,现在表内数据量巨大,已不能新建表更改表的编码格式。 采用手动编码将有问题的数据转化为utf8进行存储 工具类 import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util…

大数据Doris(五十):Export导出原理

文章目录 Export导出原理 一、原理 二、查询计划拆分 三、查询计划执行 Export导出原理 Doris Export、Select Into Outfile、MySQL dump三种方式数据导出。用户可以根据自己的需求导出数据。此外数据还可以以文件形式通过Borker备份到远端存储系统中,之后可以…

Gitlab升级报错一:rails_migration[gitlab-rails] (gitlab::database_migrations line 51)

Gitlab-ce从V14.0.12升级到V14.3.6或V14.10.5时报错:如下图: 解决办法: 先停掉gitlab: gitlab-ctl stop 单独启动数据库,如果不单独启动数据库,就会报以上错误 sudo gitlab-ctl start postgresql 解决办法&#x…

哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP) 在互联网中,IP数据报的传输很容易出现差错,当出现差错时,最简单的处理办法就是对该IP数据报进行丢弃。但是,并不是直接丢弃就…

android 如何分析应用的内存(九)——libc回调

android 如何分析应用的内存(九) 接上文,在前面文章中,介绍了bionic库提供的各种功能,其中包括: 自定义的mallocmalloc hookmalloc debug 接下来,介绍的是bionic库提供的libc回调功能&#x…

【Java】Java核心 77:Dom4j 解析 XML综合案例

文章目录 1、需求2、案例效果3、案例分析4、自定义JDBC框架-代码实现4.1、Configuration4.2、注解4.3、映射类:Mapper4.4、SqlSession类 5、自定义JDBC框架的使用5.1、数据表5.2、创建实体类5.3、UserMapper接口5.4、配置文件:config.xml5.5、测试类5.5、…

当金融风控遇上人工智能,众安金融的实时特征平台实践

导读:随着企业数字化转型升级,线上业务呈现多场景、多渠道、多元化的特征。数据要素价值的挖掘可谓分秒必争,业务也对数据的时效性和灵活性提出了更高的要求。在庞大分散、高并发的数据来源背景下,数据的实时处理能力成为企业提升…

vCenter崩了之后重新搭建处理办法

一、需要重新搭的情况下,vCenter虚拟机是无法使用分布式端口组的,而此时所有的物理网卡都在分布式交换机上,这样vCenter虚拟机的网络是无法访问的,所以需要先找到需要一台esxi。 二、此时可以看到两个分布式交换机 正常情况下分布…

高性能商品秒杀抢购系统

完整资料进入【数字空间】查看——baidu搜索"writebug" Goirisrabbbitmqmysql构建高性能商品秒杀抢购系统 一、项目介绍 1. 课程目标 应用GoWeb快速构建秒杀系统全流程应用开发及架构化设计思维梳理逐级优化,轻松应对“秒杀”及类似高并发场景 2. 知…

layui框架学习(30:树形模块)

Layui中的树形组件模块tree用于以树形形式显示上下级结构的数据&#xff0c;类似于winform中的tree控件。tree模块的基本用法及显示效果如下所示&#xff1a; <div id"test"></div><br /><script>layui.use([tree,layer], function(){var tr…

python安装pyelliptic-.5.7报错ImportError: No module named setuptools

1.背景&#xff1a; python安装pyelliptic-.5.7模块报错 2.环境及版本&#xff1a; linux&#xff1a;centos-7.7 python&#xff1a; 2.7.5 pyelliptic&#xff1a;5.7 注意&#xff1a;这里是纯内网环境所以pip不能使用&#xff0c;我这里配置了一个内部yum源 3.解决思路&…

Spring Boot 中的事务注解

在应用程序中&#xff0c;事务管理是一个非常重要的概念。事务是指一系列的操作&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。在Spring Boot中&#xff0c;可以使用事务注解来管理事务。在使用事务注解的时候&#xff0c;一个非常重要的概念就是事务传播行为。 …

js内存泄漏及排查详解

js内存泄漏及排查详解 常见内存泄漏及解决方案 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至系统崩溃等严重后果。 隐式全局变量 在局部…

音频小说项目介绍

看小说、听音频&#xff0c;App,H5网站&#xff0c;小程序多端开发 一、主页 主页tabBar四个分类&#xff1a; 首页&#xff0c;分类&#xff0c;收藏&#xff0c;我的 最上方是搜索框 下方是轮播图&#xff0c;不但自动滚动&#xff0c;还有动画效果 下面分类有&#xf…

IDEA 或者SVN修改老项目的svn地址

公司svn地址修改了&#xff0c;ip修改了。本地还有代码没提交。这里介绍一下怎么在IDEA或svn修改为新地址&#xff0c;然后代码就可以直接提交了。网上也有文章介绍&#xff0c;但其中没注明一个关键点&#xff0c;导致很多人修改不成功。所以有了这篇文章。 IDEA下修改svn地址…

【Python】模块导入 ⑤ ( 主程序判断语句 | 模块中执行函数问题 | 制作自定义模块并执行函数 | 导入自定义模块会执行模块中的代码 )

文章目录 一、模块中执行函数问题1、制作自定义模块并执行函数2、导入自定义模块会执行模块中的代码3、主程序判断语句4、代码示例 - 主程序判断语句 一、模块中执行函数问题 1、制作自定义模块并执行函数 如果在自定义模块中 , 定义了函数 , 并且调用了该函数 ; 如下代码所示…

【TCP/IP】多播 - 定义、原理及编程实现 (TTL、多播组、多播消息)

目录 多播 多播的原理 多播的数据传输时的特点 TTL 的概念 TTL 和 多播组的配置方法 多播的编程与实现 发送者 接收者 多播 多播是一种介于单播和广播通信之间的技术方式&#xff0c;可以将发送者所需要发送的数据包分别发送给分散在不同子网中的一组接收者。 多播的原…

MySQL - 第11节 - MySQL事务管理

1.事务的概念 事务的概念&#xff1a; • 上层看起来比较简单的需求&#xff0c;可能对应的后端要做很多工作&#xff0c;后端这些工作组合起来才是一个完整的需求解决的方案。 • 事务由一条或多条SQL语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;共同完成一个…

聊聊transformers库; 微软推出ZeRO++技术:优化大型AI模型训练时间和成本

&#x1f989; AI新闻 &#x1f680; 微软推出ZeRO技术&#xff1a;优化大型AI模型训练时间和成本 摘要&#xff1a;据报道&#xff0c;微软研究人员最近发布了一项名为ZeRO的新技术&#xff0c;旨在优化训练大型AI模型时常遇到的数据传输成本和带宽限制问题&#xff0c;可大…

【0212】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 2)

文章目录 1. 回顾2. 密码校验通过3. 密码校验失败上一文:【0211】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 1) 1. 回顾 在上一节内容中,讲解了Backend对于接收到来自frontend的字符串明文密码,和来自于来自pg_auth…