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

文章目录

  • 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.mfbz.cn/a/34193.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apifox|API 文档和开发闭环初体验

Apifox是一款集文档、接口定义、数据模拟、自动化测试为一体的接口协作平台。 据功能介绍,基本总结Apifox Postman Swagger Mock JMeter 既然评的文章那么多,掀起了一阵子热度,究竟哪些功能: 用下来有哪些体会:…

第7章 Scala集合

第7章 Scala集合 7.1 简介 ​ ​ scala.collection.immutable ​ scala.collection.mutable ​ 7.2 数组 ​ 不可变数组 package chapter07object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](10…

多项目管理难在哪,多项目同时进行该如何做好进度管理?

最近,听到群里的项目经理吐槽,手上有10多个项目同时进行,工作起来手忙脚乱,杂乱无章,让他压力特别大。 对于项目经理来说,多项目并行推进的情况已是常态。从工作层面来说,不仅在各项目之间抢资…

SpringBoo集成MongoDB

一、集成简介 spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活…

购物车业务

一、分析购物车vo (1)添加成功页 public class CartItemVo implements Serializable {/*** 商品id*/private Long skuId;/*** 是否选中*/private Boolean check true;/*** 商品标题*/private String title;/*** 商品图片*/private String image;/***…

如何优雅的将 Docker 镜像从 1.43G 瘦身到 22.4MB

Docker 镜像的大小对于系统的 CI/CD 等都有影响,尤其是云部署场景。我们在生产实践中都会做瘦身的操作,尽最大的可能使用 Size 小的镜像完成功能。下文是一个简单的 ReactJS 程序上线的瘦身体验,希望可以帮助大家找到镜像瘦身的方向和灵感。 …

C++之GNU C的__attribute__((constructor))优先级使用(一百四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

【期末不挂科 学习数据结构】

期末不挂科 学习数据结构 第一章绪论1.1数据结构的基本概念1.1.1基本概念和术语1.数据2.数据元素3.数据对象4.数据类型5.数据结构 1.1.2数据结构三要素1.数据的逻辑结构2.数据的存储结构3.数据的运算 第一章绪论 1.1数据结构的基本概念 1.1.1基本概念和术语 1.数据 数据是信…

Flutter学习四:Flutter开发基础(四)包管理

目录 0 引言 1 包管理 1.1 简介 1.2 Pub仓库 1.3 依赖Pub仓库 1.3.1 查找包 1.3.2 添加包 1.3.3 下载包 1.3.4 引入包 1.3.5 使用包 1.4 其他依赖方式 1.4.1 依赖本地包 1.4.2 依赖git仓库 1.4.3 不常用的依赖方式 0 引言 本文是对第二版序 | 《Flutter实战第二版…

【ArcGIS】使用ArcMap进行北京1954-120E坐标转WGS84坐标系

背景 在进行青岛地市GIS数据迁移,涉及坐标转换,经过几天摸索终于找到迁移方法 投影坐标系 北京1954-120E坐标 对应为高斯-克吕格投影 300000 3000001 0 0(青岛本地坐标) 增量:-300000 -3000001(此处为示例&#xff0c…

(15)第一人称视角视频

文章目录 前言 15.1 推荐的零件 15.2 连接图示 15.3 通过任务计划器最小化OSD设置 15.4 集成式OSD 15.5 用户视频/博客 15.6 与FPV飞行特别相关的安全警告 15.7 政府/地方法规 前言 第一人称视角在飞行时为你提供了真正的飞行员视角,它将视频摄像机和发射器…

什么是信号槽机制,如何实现,有什么用?(Qt面试题)

1. 什么是信号槽机制? 信号槽机制(Signal-Slot mechanism)是一种在软件开发中常用的设计模式,用于实现对象间的通信和事件处理。该机制最初由Qt框架引入并广泛应用,后来也被其他编程框架和库所采用。 信号槽机制通过定…

Spring Boot 属性配置解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解 属性配置介绍 Spring Boot 3.1.0 支持的属性配置方式与2.x版本没有什么变动,按照…

C#使用XML和Treeview结合实现复杂数据采集功能

一个项目的数据表暂时没有定下来,但是有了一些确定性:   1、比较复杂,可能变化;   2、大部分是选择项目,因为输入项目都差不多;   3、应用程序是C/S的窗体应用。   对于这样的用户需求,…

搭建个人hMailServer 邮件服务实现远程发送邮件

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 转载自cpolar极点云文章:搭建个人hMailServer 邮件服务实现远程发送邮件 hM…

如何在编程中中实现负载均衡和容错处理

什么是容错 容错是指系统(计算机、网络、云集群等)在其一个或多个组件发生故障时继续运行而不会中断的能力。 创建容错系统的目的是防止由单点故障引起的中断,确保任务关键型应用程序或系统的高可用性和业务连续性。 容错系统使用备份组件…

【Twitter爬虫】Twitter网络爬虫

利用selenium爬取Twitter 从2月9日起,Twitter不再支持免费访问Twitter API,继续使用Twitter API支付较高的费用。下面将介绍一种绕过Twitter API爬取推文的方式 Selenium Webdriver框架 首先介绍一下Selenium Webdriver,这是一款web自动化…

计算机专业大学如何自学?常用网站和工具

耗时5小时,第一个B站视频,满足分享欲 计算机专业现状 or 困境?如何自学?常用网站科普!_哔哩哔哩_bilibili 👆发了个视频,结合文章中的链接,保存到自己浏览器收藏夹里就完了 目录 …

React修改Antd组件的样式

修改默认的antd组件&#xff0c;需要使用global import React, { useState, useEffect } from react; import { Tabs, Rate, Steps } from antd; import styles from ./index.less;const Index (props) >{return (<div className{styles.class_steps}><Stepsprog…

maven 环境配置踩坑

今晚在跟着视频学习spring的时候&#xff0c;创建maven工程&#xff0c;一直提示Sync 下载异常。搞了一晚上终于搞定了环境。下面给出一下今晚的总结。 1、确保maven安装并配置好环境变量。 下载并安装maven后&#xff0c;还需要在电脑上配置maven的环境变量。这部分参考网络教…
最新文章