简单学习UE5.2的PCG框架插件里的基础概念

news2024/11/15 17:54:46

目标

最近了解到5.2版本推出了实验性的功能PCG框架,以及用它做的范例 Electric Dreams。

本篇我简单学习它的一些基础概念,做一些记录。

0. 启用插件

此功能相关的类型都在PCG插件中,因此首先要确保启用了PCG插件:
在这里插入图片描述

1. PCGGraph

PCGGraph是一种可创建的资源:
在这里插入图片描述
它里面存储了一个PCG节点网络。外表看起来像蓝图,但不是蓝图。
一个最简单的PCGGraph如下:
在这里插入图片描述
它从输入端获得地形,采样其表面得到一些点,然后根据点生成模型。模型路径是在StaticMeshSpawner节点上配置的。

2. PCGComponent

PCGVolume是PCG插件所定义的Actor类型,它拥有一个PCGComponent。可以直接拖入场景。
在这里插入图片描述
(我实验发现PCGComponent放在一个空Actor上,而非PCGVolume上,也可以工作。可见PCGComponent并不强依赖于PCGVolume

PCGComponent会引用一个PCGGraph

比如,这里测试创建一个PCGVolume放在地形上,然后将PCGComponent指向上一步创建的简单的PCGGraph。点击Generate按钮后就可以看见效果:
在这里插入图片描述

3. PCG节点的内部逻辑在哪?

显然,PCG核心逻辑由PCG节点构成。
虽然很多节点的行为是好理解的,可以作为黑盒看待。但要想进一步研究节点内部逻辑该看哪儿呢?

可以双击节点来看内部逻辑,我注意到有两种情况:

一种是跳转到C++界面,比如 SurfaceSampler 节点:
在这里插入图片描述
这些节点似乎都继承自UPCGSettings类(待查证)

另一种是跳转到一个蓝图资源,比如 SetPointColor 节点:
在这里插入图片描述
蓝图资源似乎都是UPCGBlueprintElement的子类(待查证)

(准确来讲,还有另一种情况是 SubGraph (子网络)节点,即另一个PCGGraph)

总结

  • 核心PCG逻辑由PCGGraph的PCG节点所组成。
  • PCG节点的逻辑可能由UPCGSettings类的C++代码定义,或者是UPCGBlueprintElement的子类蓝图所定义。
  • PCGComponent负责运行PCGGraph的逻辑将内容生成到场景中。

后续学习

  • 学习更多的PCG节点用法。
  • 本篇所测试的PCG逻辑过于简单,其实也能在蓝图中实现。那么为什么PCG框架不以扩展蓝图节点为方向来开发呢?我相信官方使用新的节点框架而非蓝图必然有其意义。那么后续去研究那些“用新PCG框架能实现,而蓝图节点不方便实现的逻辑”,会有助于理解这个问题的答案。
  • 相比于Houdini,此方式一个显著的优势就是“快速”,毕竟少了数据传入传出Houdini的时间。但我想Houdini肯定有其优势。后续可以思考哪些内容/逻辑只能用Houdini实现(或者说更好实现)?(至少目前没看到它可以修改地形高度/材质层,和生成Mesh数据)

一些学习资料:

本篇主要参考的官方文档:
程序化内容生成概述 | 虚幻引擎5.2文档

UE官方范例项目 Electric Dreams 的深入讨论:
Deep Dive into the Electric Dreams Project | Inside Unreal - YouTube

UE官方公众号的4篇关于 Electric Dreams 中PCG技术的讨论:
Electric Dreams PCG技术详解

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

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

相关文章

为什么进程地址空间中包括操作系统?

今天聊聊进程地址空间这点小事。 说到进程的地址空间,大家可能都知道这样一张图: 这张图就是Linux程序运行起来后所谓的进程地址空间,这里包括我们熟悉的代码区、数据区、以及堆区和栈区,今天我们不讲解这些区域,而是…

Vue生态及实践 - SSR(上)

目录 目标 理论 Rendering 你真的需要SSR亦或是同构吗? 同构实践 通用代码 同构第一步:避免单例 src/app.js src/store.js src/router.js 同构第二步:Server entry【服务端进入】;Client entry【客户端进入】 src/entry…

ESP32设备驱动-AS5600磁性旋转位置传感器

AS5600磁性旋转位置传感器 文章目录 AS5600磁性旋转位置传感器1、AS5600介绍2、硬件准备3、软件准备4、驱动实现1、AS5600介绍 AS5600 是一款可编程的 12 位高分辨率非接触式磁性旋转位置传感器。 AS5600可以作为磁性电位器或磁性编码器使用,具有出色的可靠性和耐用性。 与传…

网页版代码编辑器实现

接着前几天写的博客https://blog.csdn.net/woyebuzhidao321/article/details/131495855,提到了涉及vscode网页版工作区创建的api,这两天一时兴起,搞了一个网页版的代码编辑器,如果在2020年10月之前,实现一个网页版代码…

活动笔记 | 「企业人效提升路径」之数字化实践

6月27日,由人力资源智享会联合盖雅工场等机构主办的2023中国人力资源数字化论坛在北京顺利举办。盖雅工场高级解决方案顾问谷天毅先生发表了主题为 《企业人效提升路径之数字化实践》 的分享。 以下是分享内容,enjoy~ △ 盖雅工场高级解决方案顾问谷天…

httpx 返回都是乱码问题,非编码问题。

因为python 的requests 不能使用抓http2 的报文。所以看了一些httpx的使用。但是发现httpx 不能自动解压,text打印出来的都是乱码。一开始以为是编码格式的bug ,但是使用chardet 确认了确实是utf-8.然后怀疑是压缩的问题。先去官网搜了一些文档 文档说会…

opencv4.7.0编译opencv-contrib-4.7.0以及CUDA

0、引言 最近工作中需要用到使用CUDA加速后的opencv进行传统算法的开发,在编程之前,需要先解决环境编译和lib库问题,本文就是记录自己编译opencv-4.7.0的全过程。 1、CUDA下载和安装 可参考我之前的博客WIN10安装配置TensorRT详解中的前几…

达尔文——生物医疗科学领域大模型

赛灵力官网 1. 生物医疗领域的挑战 1.1 复杂性 生物系统和生物过程非常复杂,包含大量的相互作用和调控机制,理解和解析这些复杂性是一项巨大的挑战。 举例来说,单单一个人类,体内的生物信息就非常复杂: 人类体内体内…

Django_re_path_使用正则匹配url

与path定义的路由相比,re_path 定义的路由可以使用正则表达式匹配url。 需要注意的是: 如果未定义匹配结果的变量名,匹配的结果默认传入视图的第2个形参。如果定义了匹配结果的变量名,匹配的结果会传给视图的同名字段&#xff0…

从零开始学习自动驾驶决策规划

从零开始学习自动驾驶决策规划 从入门到掌握的一系列讲解,其中涵盖的内容如下: 前言课 第一节-ros工程的创建 第一节-运行环境和工程目录简介第二节-工程运行和小车模型搭建简介 第二节-车辆里程计第三节-整体架构思路 第三节-地图路线构建方法 第三节…

Packet Tracer – 配置静态 NAT

Packet Tracer – 配置静态 NAT 目标 第 1 部分:测试不使用 NAT 的访问 第 2 部分:配置静态 NAT 第 3 部分:测试使用 NAT 的访问 拓扑图 场景 在 IPv4 配置网络中,客户端和服务器使用专用编址。 然后,在含专用编址…

MATLAB---线性规划问题求最优解(含例题)

线性规划是运筹学的基础,在现实企业经营中,如何有效的利用有限的人力、财力、物力等资源。 MATLAB 为方便大家理解,这里我们直接用一个例题为大家讲解使用matlab求解线性规划问题。 根据上图给出的线性规划问题。我们使…

SpringBoot 如何使用 @ExceptionHandler 注解进行局部异常处理

SpringBoot 如何使用 ExceptionHandler 注解进行局部异常处理 介绍 在开发 Web 应用程序时,异常处理是非常重要的一部分。SpringBoot 提供了多种方式来处理异常,其中之一是使用 ExceptionHandler 注解进行局部异常处理。使用 ExceptionHandler 注解&am…

哈工大计算网络课程数据链路层详解之:数据链路层服务

哈工大计算网络课程数据链路层详解之:数据链路层服务 在介绍完网络层的实现功能和协议之后,接下来我们继续介绍网络层的下一层:数据链路层。 本节首先对数据链路层的功能和所提供的服务进行概述。 如下图示例网络所示,标红色的部…

【二分查找】34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 解题思路 使用二分查找查找到目标元素的索引之后然后向左以及向右寻找目标元素,然后记录下区间位置 然后保存下来 class Solution {public int[] searchRange(int[] nums, int target) {// 使用二分查找 数组有序…

Java使用Stream API对于数据列表经常处理

Java使用Stream API对于数据列表经常处理 先提供一些简单到复杂的常见例子&#xff0c;您可以根据这些例子进行进一步的开发和学习&#xff1a; 数据过滤筛选操作 查询表中所有数据&#xff1a; List<User> users userDao.getAllUsers();根据条件查询单个结果&#…

别测了,背锅上线!

三百六十行&#xff0c;行行都背锅。 用例千万条&#xff0c;质量第一条。 流程不规范&#xff0c;亲人两行泪&#xff01; 每次上线后多多少少都有些问题&#xff0c;每次的项目总结会总会生产一口新锅&#xff0c;等着你我他来背&#xff0c;这不又要上线了&#xff0c;这次…

华为OD机试真题 Java 实现【快递投放问题】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 一、题目描述 有N个快递站点用字符串标识&#xff0c;某些站点之间有道路连接。每个站点有一些包裹要运输&#xff0c;每个站点间的包裹不重复&#xff0c;路上有检查站会导致部分货物无…

基于kubernetes组件初步部署k8s

基于k8s组件初步部署k8s kubernetes组件kubernetes简单化部署安装Master操作环境检查安装配置Containerd安装Containerd配置containerd启动containerd 配置Circtl安装配置Kubeadm安装Kubeadmkubeadm配置启动kubelet服务 拉取镜像初始化集群操作命令行 安装网络插件 Node操作Nod…

Dubbo分布式服务框架,springboot+dubbo+zookeeper

一Dubbo的简易介绍 1.Dubbo是什么&#xff1f; Dubbo是一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。 简单的说&#xff0c;dubbo就是个服务框架&#xff0c;如果没有分布式的需求&#xff0c;其实是不需…