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

news2024/11/22 22:26:14

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

文章目录

  • 前导文章
  • 标准组合拳
  • ApplyHierarchy
    • Execute with Context
    • Iteration Loop Body
    • Point Loop Body
    • 应用场景
  • 小结

在这里插入图片描述

前导文章

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

标准组合拳

在这里插入图片描述

上一篇博文《UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(三)SG_CopyPointsWithHierarchy》,我们分析了这套组合拳中SG_CopyPointsWithHierarchy的工作原理,简单来说:

  1. SG_CopyPointsWithHierarchy其实就是携带source中层级信息和相对Transform的高级版CopyPoints。
  2. 它需要和"PCGSettings"一起工作(需要"PCGSettings"中原始ActorIndexParentIndex信息)。
  3. 一般要和本文中介绍的ApplyHierarchy一起使用构成组合拳。

ApplyHierarchy

在使用ApplyHierarchy之前,点云里存在一个由Actor IndexParent Index索引构成的树形结构,而Relative Transform则代表着每个层级子级Point和父级Point之间的"相对变换"。ApplyHierarchy的作用就是将这个树形结构中一层层的Relative Transform应用到每个PointPositionRotationScale属性(Property)上。

Execute with Context

在这里插入图片描述以上部分(包含Iteration Loop)的作用就是构造2个数组IdsHierarchy Depths

  • Ids 数组:数组的Index对应PointIndex;数组的Value对应Actor Index,这样通过Actor IndexParent Index就可以反向找到实际的Index
  • Hierarchy Depths数组:和上面的逻辑类似,建立PointIndexHierarchy Depth一一对应关系。

在这里插入图片描述
逐层(Depth)将Relative Transform转换成PointPositionRotationScale属性(Property)上,逻辑有点像“俄罗斯方块”。

Iteration Loop Body

在这里插入图片描述

Point Loop Body

通过Actor IndexParent Index反向找到实际的Index
在这里插入图片描述
将该层(Depth)的Relative Transform转换成PointPositionRotationScale
在这里插入图片描述
删除无效的Point

在这里插入图片描述

应用场景

注意:在“组合拳”中使用Transform Points变换的对象为Relative Transform

在这里插入图片描述

小结

SG_CopyPointsWithHierarchy构造了一个虚拟的"树形结构",而ApplyHierarchy是将"树形结构"和层级之间的Relative Transform应用到PointPositionRotationScale属性上。

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

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

相关文章

【Android】APT与JavaPoet学习与实战

PS:本文讲解的APT全称为Annotation Processing Tool,而非是Android Performance Tuner,这两种工具简称皆为APT,前者是“注释处理工具”,后者是“Android性能调试器”。 本文分别使用Java、kotlin 语言进行开发&#xf…

做一个游戏小项目有多简单?

认识一个朋友,学了很多年的 python, 还停留在 helloworld 阶段,每次拿起又放下,是不是很熟悉?每天都在想,我要学编程,我要学编程,但是又不知道从何学起,学了一点又不知道怎么用&…

java并发编程原理-----线程

目录 上下文切换 java代码创建线程的两种方式 线程的五个状态 线程join方法 多线程之间的影响 上下文切换 CPU的每一个核心同一时刻只能执行一个线程,但是我们会发现电脑同一时刻现实会进行几千个线程,这就是cpu在快速的切换执行线程,由…

Python中的迭代器

一、介绍 在Python中,迭代器是一种访问集合元素的方式,可以用于遍历数据集中的元素,而不需要事先知道集合的大小。迭代器可以被用于循环语句中,例如for循环,来遍历集合中的每个元素。 Python中的迭代器是一个实现了迭…

将Windows系统上的音频、视频通过iTunes传输到iPhone上

这个地方需要下载安装版的iTunes 下载地址: https://www.apple.com/itunes/download/win64 不要从Windows的APP Store中下载iTunes,不好使。 安装完成后,如果是导入一个文件夹中的资料,则点击 【文件】》【将文件夹添加到资料库】…

岛屿数量 (力扣) dfs + bfs (JAVA)

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的…

在内卷化竞争时代,金龙鱼重返增长的关键到底是什么?

提到欧丽薇兰、胡姬花、香满园、海皇、金味、丰苑、锐龙洁劲100、丸庄酱油等品牌,多数消费者的第一反应是什么?多数消费者认为是某个不知名的新品牌。问题的重点不在产品,而在主品牌定位。 事实上,这都是金龙鱼母公司益海嘉里旗下的品牌。内行都知道益海…

“坏邻居”导致的kafka生产者TPS下降原因排查

背景: 今天测试了两种不同的场景下kafka producer的tps性能数据,两种场景下都是使用3个线程,每个线程都是对应一个kafka producer,测试发送到kafka集群的消息的量,两个场景的区别是场景A只发送kafka消息,场…

自定义类型

目录 什么是自定义类型 结构体 结构体的声明 常规结构体的声明形式 特殊的结构体声明形式 匿名结构体: 匿名结构体的重命名: 注意事项: 结构体的自引用 什么是结构体的自引用 结构体变量的定义与初始化 方法一: 方法…

总结python安装包(库)过程中的采坑

绝大数的包比如numpy、pandas可以用pip install或者conda install解决,使用pip时可以用pip -V命令看一下自己的pip安装在了哪个虚拟环境,一般pip安装在哪默认就把python包安装在哪。 pip -VC:\Users\20478>pip -V pip 23.1.2 from D:\Python\lib\sit…

Android Java代码与JNI交互 JNI子线程访问Java方法 (八)

🔥 Android Studio 版本 🔥 🔥 创建包含JNI的类 JNIInvokeMethod.java 🔥 package com.cmake.ndk1.jni;import com.cmake.ndk1.base.ICallbackMethod; import com.cmake.ndk1.base.IThreadCallback;public class JNIInvokeMethod {static {System.loadLibrary("…

VBA代码如何切换word和excel(3)

【分享成果,随喜正能量】人不能因为一件好事,高兴一整年,却能因为一个创伤,郁郁终生。痛苦给人的刺激,总是远远大于快乐。成年人的烦恼,和谁说都不合适,悲喜自渡,他人难悟。人最强大…

DDOS防御,阻止DDoS攻击的15个独家技巧

DDoS攻击可以使企业完全宕机数小时以上,而宕机的后果可能很严重,各种规模的企业和政府都可能受到影响。2021年,由于系统中断一小时导致销售额大幅下降,亚马逊为此遭受了约3400万美元的直接财务损失。而随后由于Fakebook的服务中断…

Spring源码系列-第2章-后置工厂处理器和Bean生命周期

第2章-后置工厂处理器和Bean生命周期 后置工厂处理器属于后置处理器,后置处理器是Spring最核心的部分,Spring几乎所有的附加功能全由它完成。 什么是BeanPostProcessor? public interface BeanPostProcessor {/*** Apply this {code BeanPos…

桥接(Bridge)模式

目录 动机使用场景参与者优劣协作实现相关模式应用和思考 桥接模式是将抽象部分和它的实现部分分离,使他们都可以独立的变化的对象结构型模式。桥接模式通过将继承改为组合的方式来解决问题;具体来说就是抽取其中一个维度并使之成为独立的类层次。 动机…

gma 2 教程(二)数据操作:2. 功能逻辑架构和栅格数据类型简介

功能逻辑架构 gma栅格数据操作所含功能/属性的关系结构如下图所示: 栅格数据类型 gma栅格数据类型继承自GDAL,与NumPy数据关联,但又有所不同,详细关系见下表: 栅格格式支持 栅格格式信息统计 gma继承了GDAL全部的栅格…

详谈三次握手

作者:爱塔居 专栏:计算机网络 作者简介:大三学生,希望和大家一起进步 经过三次的对话,这两个火柴人才确认了双方都能够说话,都能听见。三次握手也是一样的,只要这样才能确认双方的接受与发送能力…

文件操作--按数据块读写文件

函数fread()和函数fwrite()用于一次读取一组数据,即按数据块读写文件。fread()的函数原型为: unsigned int fread(void *buffer ,unsigned int size,unsigned int count ,FILE *fp);…

raid5故障导致LeftHand存储崩溃的服务器数据恢复案例

HP-LeftHand存储简介: HP LeftHand存储支持RAID5、RAID6、RAID10磁盘阵列,支持卷快照,卷动态扩容等。 服务端: 客户端: LeftHand存储分为三个层级:物理磁盘、逻辑磁盘、逻辑卷。多个物理磁盘组成一个逻辑的…

pdf文档加水印怎么弄?用这款软件很方便

在工作中,我们经常需要将PDF文件发送给他人,但无法保证文件内容不被窃取,因此需要添加水印来保证文件的安全性。如果你不知道如何给PDF文件添加水印,以下两款软件可以帮助你轻松实现,一起来看看吧! 方法一&…