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

本文主要是介绍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有足够的编号空间。

小结

  1. SG_CopyPointsWithHierarchy其实就是携带source中层级信息和相对Transform的高级版CopyPoints。
  2. 它需要和"PCGSettings"以及"PCG-Level to PCGSettings"一起工作(需要"PCGSettings"中原始ActorIndexParentIndex信息)。

在这里插入图片描述

这篇关于UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(三)SG_CopyPointsWithHierarchy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822293

相关文章

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中