GS DynamicMeshActor

news2025/1/2 2:59:37

GS DynamicMeshActor

GeometryScript DynamicMeshActor。

ADynamicMeshActor与AStaticMeshActor类似之处在于,它主要是UDynamicMeshComponent的容器。但是,DynamicMeshActor确实为想要基于UDynamicMesh实现程序化网格体生成的Actor蓝图提供了一些特定支持。

之前只能创建新StaticMesh资产的建模模式工具现在还可以创建新DynamicMeshActor,并且编辑工具可以编辑任一类型的网格体Actor。

UE5 程序化生成相关的DynamicMesh解析。

ADynamicMeshActor is an Actor that has a USimpleDynamicMeshComponent as it’s RootObject.

在这里插入图片描述

AActor
ADynamicMeshActor
UDynamicMeshComponent
UBaseDynamicMeshComponent
UMeshComponent
UPrimitiveComponent
USceneComponent
UActorComponent
UDynamicMesh
FDynamicMesh3

FDynamicMesh3 is a dynamic triangle mesh class. The mesh has has connectivity,
is an indexed mesh, and allows for gaps in the index space.

FDynamicMesh3 是一个动态三角形网格类。网格具有连接性,是一个索引网格,除了保存基本的几何数据,还保存一些拓扑连接关系,便于快速查询等等相关几何操作。

Engine\Source\Runtime\GeometryFramework\Public\DynamicMeshActor.h

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "UDynamicMesh.h"
#include "Components/DynamicMeshComponent.h"

#include "DynamicMeshActor.generated.h"


/**
 * ADynamicMeshActor is an Actor that has a USimpleDynamicMeshComponent as it's RootObject.
 */
UCLASS(ConversionRoot, ComponentWrapperClass, ClassGroup=DynamicMesh, meta = (ChildCanTick))
class GEOMETRYFRAMEWORK_API ADynamicMeshActor : public AActor
{
	GENERATED_UCLASS_BODY()

protected:
	UPROPERTY(Category = DynamicMeshActor, VisibleAnywhere, BlueprintReadOnly, meta = (ExposeFunctionCategories = "Mesh,Rendering,Physics,Components|StaticMesh", AllowPrivateAccess = "true"))
	TObjectPtr<class UDynamicMeshComponent> DynamicMeshComponent;

public:
	UFUNCTION(BlueprintCallable, Category = DynamicMeshActor)
	UDynamicMeshComponent* GetDynamicMeshComponent() const { return DynamicMeshComponent; }



	//
	// Mesh Pool support. Meshes can be locally allocated from the Mesh Pool
	// in Blueprints, and then released back to the Pool and re-used. This
	// avoids generating temporary UDynamicMesh instances that need to be
	// garbage-collected. See UDynamicMeshPool for more details.
	//

public:
	/** Control whether the DynamicMeshPool will be created when requested via GetComputeMeshPool() */
	UPROPERTY(Category = DynamicMeshActor, EditAnywhere, BlueprintReadWrite)
	bool bEnableComputeMeshPool = true;
protected:
	/** The internal Mesh Pool, for use in DynamicMeshActor BPs. Use GetComputeMeshPool() to access this, as it will only be created on-demand if bEnableComputeMeshPool = true */
	UPROPERTY(Transient)
	TObjectPtr<UDynamicMeshPool> DynamicMeshPool;

public:
	/** Access the compute mesh pool */
	UFUNCTION(BlueprintCallable, Category = DynamicMeshActor)
	UDynamicMeshPool* GetComputeMeshPool();

	/** Request a compute mesh from the Pool, which will return a previously-allocated mesh or add and return a new one. If the Pool is disabled, a new UDynamicMesh will be allocated and returned. */
	UFUNCTION(BlueprintCallable, Category = DynamicMeshActor)
	UDynamicMesh* AllocateComputeMesh();

	/** Release a compute mesh back to the Pool */
	UFUNCTION(BlueprintCallable, Category = DynamicMeshActor)
	bool ReleaseComputeMesh(UDynamicMesh* Mesh);

	/** Release all compute meshes that the Pool has allocated */
	UFUNCTION(BlueprintCallable, Category = DynamicMeshActor)
	void ReleaseAllComputeMeshes();

	/** Release all compute meshes that the Pool has allocated, and then release them from the Pool, so that they will be garbage-collected */
	UFUNCTION(BlueprintCallable, Category = DynamicMeshActor)
	void FreeAllComputeMeshes();
};



UE5 AGeneratedDynamicMeshActor 对象

首先开启Geometry Script 插件,才可以使用GeneratedDynamicMeshActor动态生成Mesh。

AActor
ADynamicMeshActor
GeneratedDynamicMeshActor

AGeneratedDynamicMeshActor is an Editor-only subclass of ADynamicMeshActor that provides special support for dynamic procedural generation of meshes in the Editor, eg via Blueprints. Expensive procedural generation implemented via BP can potentially cause major problems in the Editor, in particular with interactive performance. AGeneratedDynamicMeshActor provides special infrastructure for this use case. Essentially, instead of doing procedural generation in the Construction Script, a BP-implementable event OnRebuildGeneratedMesh is available,and doing the procedural mesh regeneration when that function fires will generally provide better in-Editor interactive performance.

AGeneratedDynamicMeshActor 是 ADynamicMeshActor 的子类,仅在Editor模式下使用,ADynamicMeshActor用途是对Editor模式下动态程序化生成网格体提供了支持,例如使用蓝图。在Editor编辑模式下通过蓝图大量动态程序化生成网格体可能会在交互式性能方面产生很大的问题。AGeneratedDynamicMeshActor针对这种问题提供专门的解决方案。本质上,在Editor编辑模式下进行交互式生成网格体,OnRebuildGeneratedMesh基于蓝图实现的事件中进行程序化生成要比在蓝图Construction Script进行程序化生成有更好的效果。

示例

程序化生成一个Box
在这里插入图片描述
拖动右侧Box Size图标可动态缩放Box
在这里插入图片描述
添加一个Box与第一Box进行Bool运算substract
在这里插入图片描述

在这里插入图片描述

GS Function

提供的相关的蓝图函数
UGeometryScriptLibrary_MeshPrimitiveFunctions::AppendSimpleExtrudePolygon
多边形挤出
UGeometryScriptLibrary_MeshSpatial::BuildBVHForMesh
BVH空间索引
FGeometryScriptDynamicMeshBVH->FindNearestPointOnMesh
使用BVH空间索引查找网格体上最近的点

自定义DynamicMeshActor

自定义Runtime运行时可用的DynamicMeshActor对象。

TObjectPtr<UDynamicMeshPool> DynamicMeshPool = NewObject<UDynamicMeshPool>();
UDynamicMesh* OutMesh = DynamicMeshPool->RequestMesh();
OutMesh->EditMesh([&](FDynamicMesh3& EditMesh)
		{
			FVector newVertex;
			FIndex3i newTriangle;
			int32 ConstantGroupID = EditMesh.AllocateTriangleGroup();

			for (size_t i = 0; i < VertexCount; i++)
			{
				newVertex.X;
				newVertex.Y;
				newVertex.Z;
				EditMesh.AppendVertex(newVertex);
			}

			for (size_t i =0; i < TriangleCount; i++)
			{
				newTriangle.A ;
				newTriangle.B;
				newTriangle.C;

				EditMesh.AppendTriangle(newTriangle, ConstantGroupID);
			}

		}, EDynamicMeshChangeType::GeneralEdit, EDynamicMeshAttributeChangeFlags::Unknown, false);

AActor* Actor = Cast<AActor>(GetWorld()->SpawnActor(AActor::StaticClass()));
UDynamicMeshComponent* DMCom = NewObject<UDynamicMeshComponent>(Actor);
DMCom->RegisterComponent();
DMCom->SetMesh(MoveTemp(OutMesh->GetMeshRef()));
Actor->SetRootComponent(DMCom);
Actor->SetActorLabel(TEXT("F6"));

DynamicMeshPool->ReturnMesh(OutMesh);

在这里插入图片描述

参考

  1. https://docs.unrealengine.com/5.0/zh-CN/geometry-script-users-guide/
  2. https://blog.csdn.net/mrbaolong/article/details/131543522?spm=1001.2014.3001.5501

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

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

相关文章

【C语言】图文解析,深入浅出汉诺塔问题

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_&#xff0c;今天更新一篇我一直想更但是一直没空写的博客——汉诺塔问题&#xff0c;在所有有关递归的问题中&#xff0c;汉诺塔问题是最经典的问题之一&#xff0c;可以说&#xff0c;如果你能真正理…

GitGithub 上手就是这么简单!

Git 和 Github 对程序员或计算机爱好者来说肯定都不陌生&#xff0c;这个不多说&#xff01;下面要做的就是带你光速掌握 git 和 github 的日常操作&#xff0c;让你做到心中有数。 我们为什么要学习Git&Github&#xff1f;嗯… 相信你是带着目的学习的&#xff01; 不过…

Nginx三大核心功能

一、反向代理&#x1f349; (1)什么是正向代理&#x1f95d; 概念 正向代理是一个位于客户端和目标服务器之间的代理服务器&#xff08;中间服务器&#xff09;。为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并且指定目标服务器&#xf…

Lion:闭源大语言模型的对抗蒸馏

Lion&#xff1a;闭源大语言模型的对抗蒸馏 Lion&#xff0c;由香港科技大学提出的针对闭源大语言模型的对抗蒸馏框架&#xff0c;成功将 ChatGPT 的知识转移到了参数量 7B的 LLaMA 模型&#xff08;命名为 Lion&#xff09;&#xff0c;在只有 70k训练数据的情况下&#xff0…

白嫖一份小白到进阶网络安全学习宝典【建议收藏】

前言 想学网络安全但是无从下手的小白看过来&#xff0c;非常系统的学习资料&#xff0c;无数小白看了这份资料都已经成功入门&#xff0c;涵盖多个网络安全知识点&#xff0c;我愿称之为网络安全自学宝典。 一、概念性知识 1、了解什么是网络安全 2、清楚法律法规 3、网络安…

【ElatsticSearch】ES索引库与文档的增删改查

文章目录 一、操作索引库1、mapping映射属性2、索引库的CRUD 二、文档操作1、新增文档2、查询文档3、删除文档4、修改文档5、注意点 一、操作索引库 1、mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 4 日论文合集)

文章目录 一、分割|语义相关(18篇)1.1 TomatoDIFF: On-plant Tomato Segmentation with Denoising Diffusion Models1.2 CGAM: Click-Guided Attention Module for Interactive Pathology Image Segmentation via Backpropagating Refinement1.3 RefSAM: Efficiently Adapting …

Python实现通过GUI界面提交参数,来启动python脚本

前言 本文是该专栏的第30篇,后面会持续分享python的各种干货知识,值得关注。 假设现在有如下需求,用python写一个GUI界面,在该GUI界面上输入参数信息,然后再点击GUI界面上的提交按钮,启动并执行对应的python脚本。换言之,在GUI界面上输入的参数信息传递给对应的python脚…

图像处理常用算法(基础)

同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,…

【动态规划算法练习】day14

文章目录 一、97. 交错字符串1.题目简介2.解题思路3.代码4.运行结果 二、712. 两个字符串的最小ASCII删除和1.题目简介2.解题思路3.代码4.运行结果 三、718. 最长重复子数组1.题目简介2.解题思路3.代码4.运行结果 总结 一、97. 交错字符串 1.题目简介 97. 交错字符串 给定三个…

嵌入式如何面试10家公司,拿到9个offer的?

又快到一年一度的秋招季&#xff0c;不少同学私信学长吐苦水&#xff0c;明明在各大招聘网站上海投了那么多家公司&#xff0c;收到的面试通知却屈指可数&#xff0c;好不容易拿到面试机会&#xff0c;却在一面就扑街...... 很多同学能力还行&#xff0c;但是经验谈不上很出彩&…

【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

发现问题的契机&#xff1a; 学习异步通知的时候&#xff0c;自己实现一个功能&#xff1a;按键控制蜂鸣器&#xff0c;同时LED灯在闪烁 结果&#xff1a;LED好像也同时被按键控制了 最后调试结果发现&#xff1a; 应用层的sleep被驱动层的kill_fasync打断&#xff0c;所以sle…

GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法

文章目录 GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法概述笔记老国标 - 判断线材标称直径的方法END GB/T 3596-2008 购买线材时,判断线材标称直径和载流的方法 概述 在淘宝上买线材, 买了RV1.5/RV1.0各买了4种颜色(红/黑/黄绿/蓝). 看到评论区, 有人留言, 说线径…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 3 日论文合集)

文章目录 一、检测相关(9篇)1.1 Federated Ensemble YOLOv5 - A Better Generalized Object Detection Algorithm1.2 Zero-shot Nuclei Detection via Visual-Language Pre-trained Models1.3 Federated Object Detection for Quality Inspection in Shared Production1.4 Comp…

Raw Socket 之网络层数据获取

目录 简介正常使用tcpdump程序与分析报文理解参考 简介 针对网络包&#xff0c;我们一般的发送接收直接使用的是应用层&#xff0c;此时无法分辨接收为广播包还是单播包&#xff0c;为了能够分辨出接收到的是否为广播包&#xff0c;需要接收数据链路层的数据或者网络层的数据。…

ct.js笔记-加载字体时字体名不能包含中文

这个和Qt很像&#xff0c;在开发过程中尽量避免使用中文。如下&#xff1a; 这个AaJH中文&#xff0c;在加载时&#xff1a; this.nickNameLabel new PIXI.Text(Your text here, ct.styles.get(AaJH中文)); this.addChild(this.nickNameLabel);this.nickNameLabel.x 30; thi…

UE5接入在线直播视频源,如hls(m3u8)格式

文章目录 1.实现目标2.实现过程2.1 VlcMedia插件重编译2.2 UE5接入在线直播2.3 创建材质3.参考资料1.实现目标 通过重编译VlcMedia插件,以支持在线直播视频在UE5中的播放,GIF动图如下: 2.实现过程 本文主要包括插件的重编译、在线直播视频的接入,以及材质的创建三个部分。…

基于Java办公用品管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

atomic原子操作

当一个程序中的两个线程同时向这个程序里的全局变量增加数时会发生什么&#xff1f; 理论上来说&#xff0c;应该是200000&#xff0c;但是最后结果不是200000。 这是多个线程同时操作一个全局变量引起的错误。 要解决这个错误&#xff0c;用互斥锁即可&#xff1a; 这样就可以…

【计算机视觉】DETR 系列的最新综述!

论文地址&#xff1a; https://arxiv.org/pdf/2306.04670.pdf项目地址&#xff1a; https://github.com/mindgarage-shan/trans_object_detection_surveyTransformer在自然语言处理(NLP)中的惊人表现&#xff0c;让研究人员很兴奋地探索它们在计算机视觉任务中的应用。与其他…