UE5《Electric Dreams》项目PCG技术解析 之 PCGDemo_Ditch关卡详解

news2024/11/23 19:30:30

文章目录

  • 前导文章
  • 关卡概要
  • PCGGraph
    • Points From Actor Tag作为PCG的分割工具
    • 分层装饰
  • 一些知识点和技巧
    • 使用Attribute Operation将属性暂存到临时属性中
    • 是否生成碰撞
  • 小结

前导文章

  • 《UE5《Electric Dreams》项目PCG技术解析 之 基于关卡PCGSettings的工作流》
  • 《UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例)》

在上述博文中,我们了解了《Electric Dreams》项目的宏观工作流以及构建关卡的基本思路,再来看这个“PCGDemo_Ditch”关卡就很好理解了。

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

“PCGDemo_Ditch”关卡主要为我们展示了PCG的小技巧:

  • 使用自定义节点Points From Actor Tag作为PCG的分割工具
  • 分层装饰的思想

关卡概要

在这里插入图片描述

PCGGraph

在这里插入图片描述

Points From Actor Tag作为PCG的分割工具

在 PCGDemo_Ditch关卡中使用了很多Points From Actor Tag,这是一个很好用的自定义节点,可以直接移植到我们自己的项目中,下面我们来看一下它的主要逻辑,Points From Actor Tag的核心就在于Excute with Context中的如下部分:
在这里插入图片描述

从整个场景中获取到所有携带指定Tag的Actor,然后用它们的Transform以及Scaled Bounds组成Point Cloud输出。我们再看一下GetActorBoundsPCG的具体逻辑:

GetActorBoundsPCG

FBox UPCGBlueprintHelpers::GetActorBoundsPCG(AActor* InActor, bool bIgnorePCGCreatedComponents)
{
	return PCGHelpers::GetActorBounds(InActor, bIgnorePCGCreatedComponents);
}

以及它调用的GetActorBounds

FBox GetActorBounds(const AActor* InActor, bool bIgnorePCGCreatedComponents)
	{
		// Specialized version of GetComponentsBoundingBox that skips over PCG generated components
		// This is to ensure stable bounds and no timing issues (cleared ISMs, etc.)
		FBox Box(EForceInit::ForceInit);

		const bool bNonColliding = true;
		const bool bIncludeFromChildActors = true;

		if (InActor)
		{
			InActor->ForEachComponent<UPrimitiveComponent>(bIncludeFromChildActors, [bNonColliding, bIgnorePCGCreatedComponents, &Box](const UPrimitiveComponent* InPrimComp)
			{
				// Note: we omit the IsRegistered check here (e.g. InPrimComp->IsRegistered() )
				// since this can be called in a scope where the components are temporarily unregistered
				if ((bNonColliding || InPrimComp->IsCollisionEnabled()) &&
					(!bIgnorePCGCreatedComponents || !InPrimComp->ComponentTags.Contains(DefaultPCGTag)))
				{
					Box += InPrimComp->Bounds.GetBox();
				}
			});
		}
		else
		{
			UE_LOG(LogPCG, Error, TEXT("Actor is invalid in GetActorBounds"));
		}

		return Box;
	}

从上述代码可以看到,最关键的就是获取ActorUPrimitiveComponent组件的BoundsBox,并且可以每个Actor可以携带多个Volume。

这个节点的常用方法是在关卡中设定一些Volume并添加相应Tag,然后在PCG中通过Tag筛选出这些Volume,并排除它们体积。

在这里插入图片描述

下图中有一个使用环形Spline生成的Ditch,然后使用几个标记有"PCG_EXCLUDE"标签的Volume(各种Volume都可以)为它开了两个口子。

在这里插入图片描述
在"ElectricDreams_Env"可以也找到应用范例:

在这里插入图片描述

分层装饰

在这里插入图片描述
分层装饰是构建PCG的一个重要的思想, PCGDemo_Ditch关卡中,一个Ditch由如下4个从主到次的部分组成:

  1. Ditch的主体

  2. 树木和石头

  3. Ditch和地面的连接部
    在这里插入图片描述

  4. 污渍细节

在这里插入图片描述
本关卡中分层构建PCG的逻辑虽然比较复杂,但并不难理解,本文中就不展开解释了。

一些知识点和技巧

使用Attribute Operation将属性暂存到临时属性中

在这里插入图片描述

是否生成碰撞

在这里插入图片描述

小结

PCG真好玩啊,时间的关系,本文先写到这里,如果有错误敬请指正!

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

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

相关文章

mac系统通过终端连接远程服务器

mac系统通过终端连接远程服务器 1、通过自带终端连接1.1 命令直接连接1.2 方式2——创建连接 2、通过iTerm2连接2.1 方式一&#xff1a;命令直接连接 3. Mac上使用scp命令 1、通过自带终端连接 1.1 命令直接连接 如下&#xff1a;ssh -p 22 root远程IP1.2 方式2——创建连接 …

类Twitter风格的RSS阅读器

本文完成于 2 月中旬&#xff0c;其中的反代还是 frp npm 方案&#xff1b; 什么是 RSS ? RSS 是用 PHP、Laravel、Inertia.js、Tailwind 和 Vue.js 编写的简单的类Twitter 风格的 RSS阅读器&#xff0c;支持 RSS和ATOM 格式。 命令行安装 在群晖上以 Docker 方式安装。 官…

形式化验证,QED: Quick Error Detection Tests for Effective Post-Silicon Validation(二)

目录 一、Article:文献出处&#xff08;方便再次搜索&#xff09; &#xff08;1&#xff09;作者 &#xff08;2&#xff09;文献题目 &#xff08;3&#xff09;文献时间 &#xff08;4&#xff09;引用 二、Data:文献数据&#xff08;总结归纳&#xff0c;方便理解&am…

chatgpt赋能python:如何用Python打造一个简单的抽奖程序

如何用Python打造一个简单的抽奖程序 随着互联网的不断发展&#xff0c;抽奖活动已经成为了各种营销活动的必备环节&#xff0c;因此如何快速便捷地实现一个抽奖程序也变得尤为重要。本文将介绍如何使用Python打造一个简单的抽奖程序。 一、抽奖程序的工作原理 抽奖程序的核…

Vue使用vue-3d-model组件预览3D三维文件、立体文件,支持旋转、自动播放

实现效果 Tips:先泼个冷水&#xff0c;这个预览3D组件有个致命的缺陷——不能设置材质、皮肤文件的目录路径&#xff0c;必须要和3d文件放在同一个目录&#xff0c;如果项目是用hash模式(url后面会有/#/这种井号)&#xff0c;就会导致无法读取根目录的材质文件。所以推荐了解下…

LabVIEW利用相机开发零件处理和检查系统

LabVIEW利用相机开发零件处理和检查系统 为了将自动化运用于飞机发动机轮机机翼的去毛刺和检查流程&#xff0c;设计了一个系统&#xff0c;该系统使用六轴机器人操作抖动&#xff0c;并结合两个关键操作。首先&#xff0c;使用专门选定的工具对机翼进行去毛刺&#xff0c;以去…

ssh 端口转发

本地转发 ssh -L -CTfN 9527:remote_server_ip:23 ssh_server_ipL 本地转发模式C 压缩数据T 禁用模拟终端f 后台运行N 不执行远程指令&#xff0c; 常用于仅做端口转发 在local_server上开启本地转发模式之后 。ssh_server就会出现2端的TCP链接。然后所有发向9527端口TCP数据…

ASCII、Unicode、UTF-8、GBK、全角/半角

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、定义 1、ASCII 2、Unicode 3、UTF-8 4、GB2312 5、GBK 6、\u和\x 7、全角和半角 二、相互转化 1、str 与 ASCI…

[acwing周赛复盘] 第 110 场周赛20230701

[acwing周赛复盘] 第 110 场周赛20230701 总结5044. 求和1. 题目描述2. 思路分析3. 代码实现 5045. 三角形数1. 题目描述2. 思路分析3. 代码实现 5046. 智商药1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 状态不对&#xff0c;把自己写懵了。T1 模拟币T2 对向双指针…

关于Linux同步机制知识点整理

在Linux系统中&#xff0c;同步机制是操作系统中非常重要的一部分&#xff0c;以下是一些基本要点&#xff1a; 互斥锁 互斥锁是一种「独占锁」&#xff0c;比如当线程 A 加锁成功后&#xff0c;此时互斥锁已经被线程 A 独占了&#xff0c;只要线程 A 没有释放手中的锁&#…

梁宁:VisionPro、GPT、Web3三件套齐备,元宇宙开启

本文内容整理自图灵社区对谈栏目直播&#xff0c;主题为 ChatGPT 真需求&#xff0c;从产品的第一性原理解析。 上篇内容回顾&#xff1a;梁宁&#xff1a;为什么中国没有像 ChatGPT 和 Vision Pro 这样的创新产品&#xff1f; 梁宁&#xff0c;产品战略专家&#xff0c;曾任湖…

chatgpt赋能python:如何在Python中安装PIL

如何在Python中安装PIL Python Imaging Library&#xff08;PIL&#xff09;是一款用于处理图像的Python库&#xff0c;它提供了各种图像处理功能&#xff0c;包括大小调整、旋转、裁剪等等。如果你需要在你的Python项目中处理图像&#xff0c;那么PIL是一个不错的选择。 步骤…

DBeaver连接GaussDB

DBeaver 官网&#xff1a;https://dbeaver.io/打开DBeaver&#xff0c;点击菜单栏 “数据库”>“驱动管理” 点击“新建” 填入下面内容&#xff1a; 驱动名称&#xff1a;GS 驱动类型&#xff1a;Generic 类名&#xff1a;org.postgresql.Driver URL模板&#xff1a;jdbc…

Linux:LNMP上搭建discuz论坛(源码安装)

LNMP环境 Linux &#xff1a;LNMP&#xff08;源码包安装&#xff09;_鲍海超-GNUBHCkalitarro的博客-CSDN博客 discuz论坛 准备好源码包 LNMP环境正常 yum -y install unzip unzip Discuz_X3.3_SC_UTF8.zip # unzip 源码包名称 mv upload/ /usr/local/nginx/html/tarro…

信号链噪声分析13

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 接 触 ADC 或 DAC 时您一定会碰到这个经常被引用的公式&#xff0c;用于计算转换器理论信噪 比(SNR)。与其盲目地相信表象&#xff0c;不如从根本上了解其来源&#xff0c;因为…

Shell中的流程控制(if/case/for/while)

文章目录 Shell中的流程控制&#xff08;if/case/for/while&#xff09;1 if判断1.1 单分支1.2 多分支 2. case语句3 for循环3.1 第一种写法 (())3.2 第二种写法 in 4 while循环4.1 demo14.2. demo2测试let Shell中的流程控制&#xff08;if/case/for/while&#xff09; 1 if判…

【C】操作符详解

操作符 算术操作符移位操作符位操作符赋值操作符&#xff08;&#xff09;复合赋值操作符 单目操作符关系操作符逻辑操作符逗号表达式条件操作符下标引用&#xff0c;函数调用和结构成员 今天给大家带来一篇关于C语言操作符的详细介绍&#xff0c;在C语言中操作符主要有以下几种…

VS工程加载失败 | 找不到导入的项目CUDA xx.props解决方案

问题背景&#xff1a; 如果遇到VS项目某些工程无法加载&#xff0c;有一个可能的原因是属性表没有找到。即props文件无法加载&#xff0c;导致项目加载失败。 解决方案&#xff1a; 找到工程配置 .vcxproj 文件&#xff0c;编辑打开&#xff0c;查找props&#xff0c;发现电脑…

07_Linux并发与竞争

目录 Linux并发与竞争Linux并发与竞争 并发与竞争 保护内容是什么 原子操作简介 原子整形操作API函数 原子位操作API函数 自旋锁简介 自旋锁API函数 信号量简介 信号量API 函数 互斥体简介 互斥体API函数 Linux并发与竞争Linux并发与竞争 Linux是一个多任务操作系…

SQL-每日一题【178.分数排名】

题目 表: Scores 编写 SQL 查询对分数进行排序。排名按以下规则计算: 分数应按从高到低排列。 如果两个分数相等&#xff0c;那么两个分数的排名应该相同。 在排名相同的分数后&#xff0c;排名数应该是下一个连续的整数。换句话说&#xff0c;排名之间不应该有空缺的数字。 …