UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(三)SG_CopyPointsWithHierarchy

继续解析《Electric Dreams》项目中的自定义节点和子图:SG_CopyPointsWithHierarchyPostCopyPoints-OffsetIndices

文章目录

  • 前导文章
  • 标准组合拳
  • SG_CopyPointsWithHierarchy
  • PostCopyPoints-OffsetIndices
    • 使用情景
    • Execute with Context
    • Iteration Loop Body
  • 小结

在这里插入图片描述

前导文章

《UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例)》
《虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(一)》
《虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(二)数据流》
《UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(一)》
《UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(二)Look At》

标准组合拳

《Electric Dreams》以及官方文档中给出了SG_CopyPointsWithHierarchyApplyHierarchy标准使用套路
在这里插入图片描述
以下摘自官方文档:

  1. Level to PCG资产工具 将关卡转换为包含PCG点的PCG设置资产,其相关联的场景层级信息将存储为metadata特性。
  2. SG_CopyPointsWithHierarchy子图表使用目标点变换在多个位置复制PCG设置资产,这与Copy Points节点的作用类似,但它还通过维护和偏移层级特性值,使父级信息对于原始资产点的每个副本来说都是唯一的。
  3. Point Filter节点,根据特性选择点。
  4. Transform Points节点与ApplyToAttributes选项,对被选中点的相对变换特性执行变换操作。
  5. Merge节点,重新组合同一数据流中同一层级的所有点。
  6. ApplyHierarchy节点,将相对变换特性与父级变换相结合,应用到点上。

SG_CopyPointsWithHierarchy

在这里插入图片描述
SG_CopyPointsWithHierarchy中首先进行了Copy Points,而它的关键部分在于PostCopyPoints-OffsetIndices

PostCopyPoints-OffsetIndices

顾名思义:PostCopyPoints-OffsetIndices就是在CopyPoints之后,对Point的"Index"进行Offset。但是理解到这个层次还是让人摸不着头脑。在研究源代码之前我们先看一下它的使用情景。

使用情景

SG_CopyPointsWithHierarchy(以及PostCopyPoints-OffsetIndices)都是结合着Assembly来使用的,所以这个例子要从Assembly开始。

老王在《UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例)》一文中简要介绍过Assembly。

构造一个简单的简单的关卡“Assembly_01”,并使用"PCG-Level to PCGSettings"工具生成对应的“Assembly_01_PCG”
在这里插入图片描述

构造一个简单的PCGGraph看一下

在这里插入图片描述

在这里插入图片描述

"Assembly_01"中Points通道的原始信息
在这里插入图片描述

  • Mesh: 模型
  • Material: 材质
  • Actor Index: Actor的Index
  • Parent Index: 这个Actor父级Actor的Index,当Parent Index为-1时没有父级
  • Hierarchy Depth: 所处层级
  • 其它: 相对父级的Transform

"SG_CopyPointsWithHierarchy"的信息

在这里插入图片描述

**对比以后我们可以看到PostCopyPoints-OffsetIndices,实际上就是对为每个Point重新分配了Actor Index保证它们在1:N变成M:N*M以后依然有互不相同的Actor Index,并且Parent Index依然对应着它的父级Actor Index。接下来,我们看一下它是如何实现的。

在这里插入图片描述

Execute with Context

在这里插入图片描述

1-2. 首先获取CopyPointsTarget输入通道中第1个PCGTaggedData(→PCGSpatialData)计算出其中Point个数存入Total Point Count
3. 获取ContextTaskId计算出Random Offset,这里TaskId就是一个uint64类型的整数,相当于一个随机种子
4-5. 获取CopyPointsOut输入通道中第1个PCGTaggedData(→PCGPointData),其中PCGPoint的数量会作为IterationLoop的迭代次数。

Iteration Loop Body

在这里插入图片描述

Iteration Loop Body的目的就是为Point的两个Int64类型的特性:ActorIndexParentIndex重新赋值,保证每个Point的子Point有足够的编号空间。

小结

SG_CopyPointsWithHierarchy就是其实就是携带source中层级信息的高级版CopyPoints

在这里插入图片描述

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

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

相关文章

超有趣的linux命令2

超有趣的linux命令2 此次实验命令均在Ubuntu16.04版本上测试 注意有些命令需要在图形化界面才能显示效果 温馨提示:可能有人是第一次接触Ubuntu,所以下面详细写了如何配置源和网络,以及安装命令的方式 1. 首先配置软件源 以命令行方式配置…

mybatis学习记录

63、数据访问-整合mybatis-配置版_哔哩哔哩_bilibili id和mapper接口里方法名称对应,返回类型就写对应的返回类型地址 两个文件的名称要一样 注解配置就是直接在mapper里写sql语句,不用写xml文件了,这种方式使用的相对少一点。

RabbitMQ系列(19)--实现在RabbitMQ宕机的情况下对消息进行处理

前言:在生产环境中由于一些不明原因,导致RabbitMQ重启的情况下,在RabbitMQ重启期间生产者投递消息失败,生产者发送的消息会丢失,那这时候就需要去想在极端的情况下,RabbitMQ集群不可用的时候,如…

第44节:cesium 大雾效果(cesium自带)(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><!

Android 视频直播提拉流 嵌入式硬件 流媒体开发详细内容

1 Linux 系统编程网络编程基础 2 Linux 网络编程流媒体服务器&#xff0c;客户端开发实践 3 Android流媒体客户端 FFmpeg OpenGL ES 开发实践 4 Android H.264 AAC 封装mp4开发实战 5 流媒体开发实战之Rtmp推流 6 流媒体开发实战之RTSP推流 7 流媒体开发实战之UDP 8 P2P点对点项…

路径规划算法:基于晶体结构优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于晶体结构优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于晶体结构优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

Python3+requests搭建接口自动化测试框架

目录 一、接口自动化的意义&#xff08;为什么做这个框架&#xff09; 二、准备工作 三、框架流程及逻辑 四、各模块介绍 五、具体使用 一、接口自动化的意义&#xff08;为什么做这个框架&#xff09; 新版本上线时之前版本的功能需要进行回归测试&#xff0c;导致大量的…

布雷默浪丹 PT 141:189691-06-3,1607799-13-2,Bremelanotide,布美诺肽

Bremelanotide&#xff0c;布雷默浪丹 PT 141&#xff0c;布美诺肽Product structure&#xff1a; Product specifications&#xff1a; 1.CAS No&#xff1a;189691-06-3/1607799-13-2 2.Molecular formula&#xff1a;C50H68N14O10 3.Molecular weight&#xff1a;1025.063 4…

gigachad1靶机详解

gigachad_vh靶机详解 扫描到ip后对ip做一个全面扫描&#xff0c;发现有一个匿名服务器&#xff0c;是可以免密登陆的。 登陆上后发现就一个文件&#xff0c;get到我们电脑上。 file一下发现是一个zip文件&#xff0c;unzip解压一下&#xff0c;发现给了一个用户名chad&#xf…

C++多线程学习(十七、简单实现线程池)

目录 线程池 设计线程池的关键问题 代码 可能出现的疑问 queue> task; 总结&#xff1a; template auto InsertQueue(T&& t, Args&& ...args)->future;(t(args...))> 总结&#xff1a; ThreadPool(size_t size);构造函数 总结&#xff1…

Vue3 CSS v-bind 计算和三元运算

官方文档 中指出&#xff1a;CSS 中的 v-bind 支持 JavaScript 表达式&#xff0c;但需要用引号包裹起来&#xff1a; 例子如下&#xff1a; <script lang"ts" setup> const treeContentWidth ref(140); </script><style lang"less" scop…

springcloud eureka增加安全认证

网上很多资料写的不全&#xff0c;不细致。 springcloud架构&#xff0c;本地运行代码是eureka地址一般为localhost:port&#xff08;自己暴露的端口&#xff09;&#xff0c;例如http://localhost:9000/ &#xff0c;但是如果在服务器&#xff0c;且使用k8s部署&#xff0c;一…