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

文章目录

  • 前导文章
  • 关卡概要
  • 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 unregisteredif ((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.hqwc.cn/news/8001.html

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

相关文章

项目性能优化-内存泄漏检测与修改

最近终于有空优化一波项目的性能了&#xff0c;第一波借助Android Studio自带的Profiler工具检测内存泄漏。 第一步、创建Profiler的SESSIONS 第二步、进入MEMORY内存监控 右侧带有绿色原点的就是此时运行的Profiler的SESSION,点击右侧MEMORY进入内存监控的详情模块 第三步…

靶场DVWA未授权访问导致的RCE

1漏洞地址&#xff1a; http://xxxx.vom/vulnerabilities/exec/source/low.php 2漏洞原因&#xff1a; 命令执行直接拼接 3漏洞验证 linux写入phpinfo(); 到hackable/uploads/目录&#xff08;也可以直接写在当前目录&#xff09; 明文内容&#xff1a; 1&echo “<…

Java-数据结构(三)-List:ArrayList和LinkedList及其相关面试题

目录 一、引言二、ArrayList2.1 ArrayList是什么&#xff1f;2.2 ArrayList的历史由来2.3 ArrayList的使用好处2.4 ArrayList的底层原理2.5 ArrayList的操作方法及代码示例 三、LinkedList3.1 LinkedList是什么&#xff1f;3.2 LinkedList的历史由来3.3 LinkedList的使用好处3.…

MySQL事务相关笔记

杂项 InnoDB最大特点&#xff1a;支持事务和行锁&#xff1b; MyISAM不支持事务 介绍 一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元&#xff0c;只有当事务中的所有操作都正常执行完了&#xff0c;整个事务才会被提交给数据库。事务有如下特性…

大数据面试题-场景题

1.手写Flink的UV 手写Flink的UV 2.Flink的分组TopN Flink的分组TopN 3.Spark的分组TopN 1&#xff09;方法1&#xff1a; &#xff08;1&#xff09;按照key对数据进行聚合&#xff08;groupByKey&#xff09; &#xff08;2&#xff09;将value转换为数组&#xff0c;利…

银河麒麟服务器v10 sp1 安装mysql

可以先用 dpkg --list|grep mysql 查看自己的mysql有哪些依赖&#xff1a; 上图已经是安装后的截图&#xff0c;然后再卸载 sudo apt-get autoremove --purge mysql-common 本文在没有安装之前&#xff0c;只有mysql-common包&#xff0c;再用dpkg --list|grep mysql查看&…

联邦学习中的模型聚合

目录 联邦学习中的模型聚合 1.client-server 算法 2. fully decentralized(完全去中心化)算法 联邦学习中的模型聚合 在联邦学习的情景下引入了多任务学习&#xff0c;其采用的手段是使每个client/task节点的训练数据分布不同&#xff0c;从而使各任务节点学习到不同的模型…

ELK增量同步数据【MySql->ES】

一、前置条件 1. linux&#xff0c;已经搭建好的logstasheskibana【系列版本7.0X】&#xff0c;es 的plugs中安装ik分词器 ES版本&#xff1a; Logstash版本&#xff1a; &#xff08;以上部署&#xff0c;都是运维同事搞的&#xff0c;我不会部署&#xff0c;同事给力&#…

Neighborhood Contrastive Learning for Novel Class Discovery (CVPR 2021)

Neighborhood Contrastive Learning for Novel Class Discovery (CVPR 2021) 摘要 在本文中&#xff0c;我们解决了新类发现(NCD)的问题&#xff0c;即给定一个具有已知类的有标签数据集&#xff0c;在一组未标记的样本中揭示新的类。我们利用ncd的特性构建了一个新的框架&am…

JMeter之事务控制器实践

目录 前言 事务控制器 JMeter控制器添加路径&#xff1a; Generate parent sample 1、不勾选任何选项&#xff1a; 2、勾选【Generate parent sample】 3、Include duration of timer and pre-post processors in generated sample 小结 前言 在JMeter中&#xff0c;事…

Linux下GO IDE安装和配置(附快捷键)

目前&#xff0c;GoLand、VSCode 这些 IDE 都很优秀&#xff0c;但它们都是 Windows 系统下的 IDE。在 Linux 系统下我们可以选择将 Vim 配置成 Go IDE。熟练 Vim IDE 操作之后&#xff0c;开发效率不输 GoLand 和 VSCode。有多种方法可以配置一个 Vim IDE&#xff0c;这里我选…

基于免疫优化算法的物流配送中心选址规划研究(Matlab实现)

目录 1 概述 2 物流配送中心选址规划研究 3 Matlab代码 4 结果 1 概述 影响物流配送中心选址的因素有很多,精确选址优化问题亟待解决。通过充分考虑货物的配送时间,将免疫算法加入其中,介绍了物流配送选址模型的构建以及免疫算法实现的相关步骤,最后利用matlab软件进行分析,提出…