UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例)

2023-11-12

在这里插入图片描述

1. 什么是Assembly

UE5.2的PCG出了有一段时间了,大家玩得都很开心。很多朋友可能和老王一样,使用PCG一直停留在程序化摆放各种StaticMesh的水平。虽然仅使用StaticMesh也可以构造出很多好玩的结构,但相对于《Electric Dreams》项目给我们带来的Assembly级的玩法,可以说还是小巫见大巫了。

如果说StaticMesh是PCG世界的"原子",我们只能用它们来构造一些“无机物”,那么Assembly就更像是“大分子”,用Assembly可以构造更复杂的“有机物”。

接下来,我们以SplineExample关卡为例,分析一下什么是Assembly,以及Assembly是如何在两个灵魂般的小工具加持下,焕发出惊人生命力的。

文件位置:/Content/Levels/PCG/Breakdown_Levels/ElectricDreams_PCGSplineExample.umap

首先我们看一下这个场景:

左边就是Assembly,而右面就是用这个“大分子”生成的PCG
在这里插入图片描述
技术上讲Assembly其实就是一个关卡实例(Level Instance)

在这里插入图片描述

  • 这个关卡实例由若干StaticMesh组成(一些小的土块、石头、树),并且一些StaticMesh(主要是土块)也设定了层级关系。这种多级结构,结合着后面每个StaticMesh在给自局部坐标系上的随机Transform运算,可以产生更丰富的变体

  • 本例中的Assembly通过Spline形成了一条“小路”,“小路”的“宏观特征”是中间主要为土块,而两旁为植物。我们发现本例中的Assembly也满足这个特征。即使对Assembly上的StaticMesh进行局部坐标的随机变换,也不会打破该特征。

这就是我称之为“大分子有机物”的原因,即可以保证大的宏观趋势,又可以提供局部的随便多样性。

在这里插入图片描述

  • Assembly中的一些StaticMesh还设定了特定的Tag,本例中一些树木的StaticMesh上添加了KeepVertical的Tag,其目的是后面会局部随即变换时保持它仅在垂直方向上变换。

2. PCG部分

在这里插入图片描述
本例中直接在Actor的实例下添加了Spline和PCG组件。

这里也使用了我在《UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流》一文中提到的,基于关卡PCGSettings的工作流

在这里插入图片描述

它的PCGGraph也很简单,主要分个部分:

  1. Assembly变换
  2. Point变换

2.1 Assembly变换

在这里插入图片描述

  1. 首先从PCGSettings中获取到Assembly的BoundBox,作为Spline每个采样点上的BoundBox.这一步主要是用于设定Spline的采样距离
  2. 然后随机选择Assembly,并对其进行z轴180度旋转(保持道路的宏观特征)

2.2 Point变换

在这里插入图片描述

2.2.1. SG_CopyPointsWithHierachy

SG_CopyPointsWithHierachy的作用和CopyPoints很类似,只不过SG_CopyPointsWithHierachy携带了一系列的层级信息,我们Inspect一下SG_CopyPointsWithHierachy节点:

在这里插入图片描述

  • ActorIndex : 当前点的Index
  • ParentIndex:父节点Index
  • HierarchyDepth:层级深度
  • RelativeTransform:相对变换

2.2.2 过滤及点变换

在这里插入图片描述
Point Filter筛选的就是上文提到的带有Keep Vertical的Tag的StaticMesh

在这里插入图片描述

注意这里的Transform是针对局部坐标,所以要讲作用Attribute设为RelativeTransform

2.2.3. ApplyHierachy

在这里插入图片描述

ApplyHierarchy计算出每个点最终的Transform,然后用StaticMeshSpawner生成最终模型。

这里关于StaticMeshSpawner的用发我在《UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流》一文已经解释过,本文就不再赘述了。

3. 小结

Assembly的思路并不难理解,就是把一系列原子(StaticMesh)“有机”结合起来,形成一个具有更高多样性变化空间的“分子”。使用的时候先通过SG_CopyPointsWithHierachy提取相对变换信息,经过筛选变换以后,再通过ApplyHierachy计算最终变换,并生成最终的模型。

所谓“有机”就如本例中,保持小路的“宏观特征”那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例) 的相关文章

  • UE中FRotator和Pitch(Roll,Yaw)以及相对朝向的关系

    前几天 看人宅的塔防视频教程 他使用了塔的成员变量rotator 我可能在哪里少写了 所以 老是朝向不对 跟踪调试了下 发现FRotator是由pitch roll yaw三个部分组成 而pitch roll yaw是局部坐标系中的朝向 那
  • cesium for ue->CesiumGeospatial

    共32个文件 4257行代码 含注释 截至2022年11月26日 剩余23个文件 3162行代码 截至2022年11月27日 剩余19个文件 2671行代码 截至2022年11月28日 剩余17个文件 2438行代码 截至2022年11月2
  • 部署Git服务器

    哈喽 大家好 本次为大家演示如何部署git服务器 首先要准备gitea和phpstudy pro phpstudy一路nest即可 可以帮你安装mysql和阿帕奇 登录127 0 0 1 3000注册gitea即可 如何在上传公钥的时候出现
  • UE5关于高亮显示物体轮廓线

    描边材质如果是透明的话 不会显示描边 材质参数勾选 允许自定义深度写入 即可 材质参考这个文章 https blog csdn net Axiang 0123 article details 121168272 ops request mi
  • 请取件

    Part1前言 最常见的鼠标平移算法是平行于水平面 地面 的 无论相机视角如何 平移时 相机的世界Z值始终不变 因为绝大多数场景都是在观察地面上的物体 而人类的行走总是平行于地面的 但是本文要介绍的另一种小众的平移算法则平行于视锥体的截面
  • UE5 AddYawInput踩坑

    在UE5内使用AddYawInput蓝图节点 发现我输入的值和旋转的值完全不匹配 总是扩大了2 5倍 无奈去看源码 发现并不是你输入多少值就旋转多少值 如果项目设置里EnableLegacyInputScales为真 那么还会乘以一个Yaw
  • UE的rtsp插件崩溃过程排查

    Part1前言 Invideo插件是一个UE5的rtsp视频播放插件 当然还可以播放主流的其他视频协议 其开源地址如下https github com inveta InVideo 前段时间有网页反馈使用该插件进行播放视频的时候会有偶发程序
  • 虚幻引擎程序化资源生成框架PCG 之 常用撒点方法小结

    PCG真好玩 门槛很低 天花板很高 文章目录 前言 1 基本撒点 1 1 Landscape上撒点 1 2 使用射线检测在地表面撒点 1 3 使用曲线撒点 1 3 1 沿曲线撒点 1 3 2 在闭合曲线内部撒点 1 4 在StaticMes
  • ue5获取从http中get到的json信息的蓝图节点是什么?

    在 Unreal Engine 5 UE5 中 您可以使用 HTTP 请求 蓝图节点来发送 HTTP 请求 并使用 HTTP 响应 蓝图节点来获取 HTTP 响应 要获取从 HTTP 中 GET 到的 JSON 信息 您需要执行以下步骤 使
  • 虚幻引擎(UE)C++,加载读取本地路径图片、Texture2D

    通过路径获取单张图片 转为Texture2D UFUNCTION BlueprintCallable Category Image static UTexture2D LoadTexture2D const FString ImagePat
  • RenderCore模块抄写记录(ue5.2)

    共151个文件 47800行 截至2023年9月10日 剩余个文件 行
  • cesium for ue5中actor的cesium georeference组件的改变(英文教程文档是更新了的)

    今天 重新回顾下cesium for ue的教程 actor添加cesium georeference组件 发现在ue5中 没有这个组件了 忍住卸载ue5 重新安装ue4 27的冲动 cesium的组件数量增多了 反而功能减少了 不可能 绝
  • UE4 Actor生命周期 SpawnActor DestroyActor剖析

    原创文章 转载请注明出处 AActor很重要 只要是我们世界大纲列表内的物体 全部都是AActor 目录 第一部分 从编辑器点击Play开始分析World里面全部的Actor的Spawn流程 分析到调用BeginPlay结束 1 gt 下面
  • 如何解决UE5重定向后丢失RootMotion

    解决方法如图所示
  • UE_移动端测试使用

    教程流程 参照官方文档 android篇 https docs unrealengine com 5 1 zh CN android development requirements for unreal engine https docs
  • 【UE5 Cesium】11-Cesium for Unreal 切换Dynamic Pawn为其它Pawn

    前言 我们知道在Cesium for Unreal中默认使用的是DynamicPawn来浏览地图场景 DynamicPawn适用全球浏览 可以按自定义曲线进行飞行 但是DynamicPawn是使用的是地理参考坐标系 并不是标准的UE坐标系
  • 【UE5.2】通过Water插件使物体漂浮在水面上

    效果 步骤 1 新建一个工程 创建一个Basic关卡 添加初学者内容包到内容浏览器 2 在插件中启用 Water 插件 然后重启工程 3 重启后提示 碰撞描述文件设置不包括水体碰撞描述文件的条目 水碰撞必须使用该描述文件才能正常工作 将条目
  • 【UE5.1 MetaHuman】使用mixamo_converter把Mixamo的动画重定向给MetaHuman使用

    目录 前言 效果 步骤 一 下载mixamo converter软件 二 Mixamo动画重定向 三 导入UE 四 动画重定向 五 使用重定向后的动画 前言 上一篇 UE5 初识MetaHuman 创建虚拟角色 中我们已经制作了一个Meta
  • 【UE5】监控摄像头效果(上)

    目录 效果 步骤 一 视角切换 二 摄像头画面后期处理 三 在场景中显示摄像头画面 效果 步骤 一 视角切换 1 新建一个Basic关卡 添加第三人称游戏资源到项目浏览器 2 新建一个Actor蓝图 这里命名为 BP SecurityCam
  • 【UE材质】通过曲线图谱和颜色曲线来控制材质运动

    目录 效果 步骤 一 实现线性运动 二 实现非线性运动 效果 步骤 一 实现线性运动 1 新建一个材质并打开 设置材质域为用户界面 混合模式为半透明 在材质图表中添加如下节点 此时我们就可以通过数值改变圆圈纹理的缩放 但是缩放会伴随着纹理平

随机推荐

  • 0-1背包问题由二维数组转换为一维数组的理解

    对于0 1背包问题的话 可以使用一维数组来表示 我们要知道每一行的数据其实是依赖于上一行的数据 并不依赖于本行的数据 所以无论正序或者逆序更新一行的数据都不会需要本行的数据 但是为什么用一维数组更新时就要用逆序呢 其实是因为用一维数组更新时
  • imx8烧写Linux系统,RT-Linux在IMX8上的使用

    By Toradex胡珊逢 Real time Linux 是指在普通 Linux 内核打上 PREEMPT RT补丁后使内核满足实时要求 下面我们将使用 Apalis iMX8QM 介绍如何开启 Linux 5 4 的实时功能 首先需要下
  • 200 行代码实现一个简单的区块链

    java 区块链开发与交流群 613121183 有兴趣的也可以加下哈 提供了不少区块链资料 以后有资料可以相会共享 区块链的基础概念很简单 一个分布式数据库 存储一个不断加长的 list list 中包含着许多有序的记录 然而 在通常情况
  • 数据仓库模型设计V2.0

    一 数仓建模的意义 数据模型就是数据组织和存储方法 它强调从业务 数据存取和使用角度合理存储数据 只有将数据有序的组织和存储起来之后 数据才能得到高性能 低成本 高效率 高质量的使用 高性能 良好的数据模型能够帮助我们快速查询所需要的数据
  • 什么是vps

    在上网冲浪的时候看到网友在说一个我不认识的词汇 vps 于是在此记录下 文章目录 一 介绍 1 概念 2 特性用途 二 VPS又称为机场 三 VPS的使用 1 如何获取VPS 2 VPS品牌 总结 一 介绍 1 概念 VPS Virtual
  • 物联网平台设备运维监控报警介绍——实践类

    物联网平台监控报警简介 物联网平台除了基础的设备接入上云以及物模型建模管理外 还提供了面向运维场景的监控报警功能 帮助客户了解业务的运行情况 进行相关的运维操作 本文重点介绍相关的监控可视化及规则报警通知功能 包括 自定义的可视化监控大盘
  • 时间序列预测——LSTM模型(附代码实现)

    目录 模型原理 模型实现 导入所需要的库 设置随机数种子 导入数据集 打印前五行数据进行查看 数据处理 归一化处理 查看归一化处理后的数据 将时间序列转换为监督学习问题 打印数据前五行 划分训练集和测试集 查看划分后的数据维度 搭建LSTM
  • 通过环境变量修改java版本不生效

    通过环境变量修改java版本不生效 环境变量指向的是Java1 8版本 但是在终端下查看Java version版本是10 0 2 本机依次安装了 jdk1 8 jdk1 6 和 jdk1 7 三个版本的 jdk 由于maven打包andr
  • 基于PaddleGAN项目人脸表情动作迁移学习(二)单人表情迁移

    学习目标 学习基于PaddleGAN实现的动作迁移模型 First order motion model First order motion model原理 First order motion model的任务是image animat
  • STM32——I2C通信理论基础(1)(学习笔记)

    STM32 I2C通信理论基础 硬件层 协议层 1 I2C基本读写过程 2 I2C通信的起始和停止信号 3 数据的有效性 4 响应 前言 我们在学习stm32的时候 要想学得更好 i2c协议的学习是必不可少的 现在很多的硬件 传感器等都是用
  • Vite2.0常见配置

    一 创建 1 创建 npm init vite latest my vue app template vue ts 查看 create vite 以获取每个模板的更多细节 vanilla vanilla ts vue vue ts reac
  • Win10-部署java环境教程

    一提到部署环境 不得不提到java环境 现如今java遍地走 python多如狗的世界里 如果不能在本地搭建一套java环境 都不好意思说自己是搞软件的 这里呢 给大家来分享一下 如何在一个新的机器上部署java环境 首先 java环境的配
  • FPGA零基础学习之Vivado-锁相环使用教程

    FPGA零基础学习之Vivado 锁相环使用教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者都
  • mybaties总结

    1 需要导入四个坐标 分别是mybatits junit log4j mysql connection java 2 连接数据库信息 配置mapper的位置 3 映射文件namespace对应的是接口全名 id是接口里面的方法名 resul
  • BUCK电路原理及PCB布局与布线注意事项

    1 BUCK架构 Buck架构 当开关闭合的时候 当开关断开的时候 根据伏秒平衡定理可得 Vin Vout DT Vout 1 D T gt Vin Vout D lt 1 在实际DCDC应用中 当Q1闭合的时候 在图1 a中 红线示出了当
  • Java面试——缓存

    一 什么是缓存 1 缓存就是数据交换的缓冲区 称作 Cache 当某一硬件要读取数据时 会首先从缓存汇总查询数据 有则直接执行 不存在时从内存中获取 由于缓存的数据比内存快的多 所以缓存的作用就是帮助硬件更快的运行 2 缓存往往使用的是RA
  • MMRotate:旋转框检测实现过程

    MMRotate 旋转框检测实现过程 MMRotate地址 https github com open mmlab mmrotate 文档地址 https mmrotate readthedocs io en latest 一 环境搭建 1
  • Raspberry Pi Zero 单板配置手记(四)调整 TF 卡分区大小的不同方式

    RPi Zero 调整 TF 卡分区大小的不同方式 本文章为系列文章 Raspberry Pi Zero 单板配置手记 的第四篇 上一篇为 Raspberry Pi Zero 单板配置手记 三 使用 NetworkManager 管理网络连
  • 启动httpd服务:SSLCertificateFile: file ‘/var/www/miq/vmdb/certs/server.cer‘ does not exist or is empty

    启动httpd服务 SSLCertificateFile file var www miq vmdb certs server cer does not exist or is empty 启动httpd服务 失败 复制代码 root te
  • UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例)

    文章目录 1 什么是Assembly 2 PCG部分 2 1 Assembly变换 2 2 Point变换 2 2 1 SG CopyPointsWithHierachy 2 2 2 过滤及点变换 2 2 3 ApplyHierachy 3