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. 小结

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计算最终变换,并生成最终的模型。

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker学习(一)docker概述

Docker 是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从 Apache2.0 协议开源。它可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 可用于…

BeanShell:多线程环境下Interpreter解释器的优化使用

BeanShell是用 Java 编写的一个小型、免费、可嵌入的 Java 代码的脚本解释器。 BeanShell动态执行标准Java语法,并使用通用语法对其进行扩展 脚本编写便利性,适用于 Java 的轻量级脚本。本文说明在并发环境下对BeanShell更加优化的使用方式。 简单示例 …

零信任:基于Apisix构建认证网关

背景 零信任一直是我们未来主攻的一个方向,全球加速,SD-WAN组网都是一些非常成熟的产品,全球加速是我们所有产品的底座,SD-WAN解决的是多个网络打通的问题,而零信任则主打应用访问。 关于零信任,我们已经…

oracle服务器的CPU占用率一直100%排查方式

背景说明 公司开发、测试、演示环境,三个环境的oracle服务器无论服务器是否空闲, CPU的占用率一直是100%, 一直也没有找到问题原因,今天就花了一整天时间研究这个问题。 通过AWR报告查看oracle运行情况 awr报告是oracle 10g下提…

基于Docker环境下的Jenkins搭建及使用

目录 前言: Docker下安装Jenkins 启动Jenkins Jenkins插件下载 配置Jenkins 修改Jenkins时间 配置Python3环境 配置HTML报告/Allure报告 Allure报告配置 简单使用-实例构建 参数化构建 构建后操作 配置成功 控制台输出 Allure报告查看 HTML报告查看 前言&#xff1a…

mac m1通过qemu和grub制作操作系统引导盘

文章目录 前言grub安装引导盘FAQ参考附录qemu安装ubuntuGRUB安装到回环设备吧啦吧啦... 前言 我电脑是mac m1芯片的,做了如下尝试,最终在第4种方式下成功: 开始用了parallels desktop安装了ubuntu 22版本的,因为本机是arm64芯片…

vue js实现表格行拖拽

效果图&#xff1a; <a-table :dataSource"dataSource" :columns"columns" :pagination"false"><template #bodyCell"{ column, record }"><template v-if"column.key td"><div style"cursor: p…

【容器起不来~tomcat】

记录一次线上容器~tomcat起不来的场景: **部门由于资金有限,只能用tomcat去部署,话不多说直接贴图: Docker 镜像 Tomcat 启动失败– 查看线上日志,日志报错了,报错内容如下: 1,Error response from daemon: driver failed programming external connectivityon endpoint jen…

R 语言 ggplot2 PCA 主成分分析(虚拟数据集)

生成虚拟数据集 library(ggplot2)data.matrix <- matrix(nrow 100, ncol 10)colnames(data.matrix) <- c(paste("wt",1:5,sep ""),paste("ko",1:5,sep "") )rownames(data.matrix) <- paste("gene",1:100,sep…

Modin 入门学习

Modin 是一个 Python 第三方库&#xff0c;用于加速 Pandas 的 API 执行速度。原始的 Pandas 是单线程执行的&#xff0c;而 Modin 则重新打包了 Pandas 里面的 API&#xff0c;使其同时在多个内核中运行&#xff0c;提高硬件性能的利用率。 使用方法很简单&#xff0c;安装 M…

车载软件架构 —— 闲聊几句AUTOSAR OS(七)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

CAD Voronoi 3D三维泰森多边形维诺图插件三维狄利克雷镶嵌(Dirichlet tessellation)

三维Voronoi Voronoi又名泰森多边形或Dirichlet图、维诺图等&#xff0c;三维Voronoi是由连接两邻点直线的垂直平分面组成的连续三维多面体结构。Voronoi在各个学科中应用广泛&#xff0c;如进行区域规划、晶体塑性有限元研究、路径优化、地形简化、多孔结构力学等方面的分析。…