ue5 小知识点 geometry script modeling

 

-----------------------------------------------------------------------------------------------

append mesh 用着有问题,mesh会变 有时候normal变了

用Boolean union模式就行 就是速度有点慢

---------------------------------------------------------------

ADynamicMeshActor里面自带一个pool

UDynamicMeshPool* ADynamicMeshActor::GetComputeMeshPool()
{
	if (DynamicMeshPool == nullptr && bEnableComputeMeshPool)
	{
		DynamicMeshPool = NewObject<UDynamicMeshPool>();
	}
	return DynamicMeshPool;
}


UDynamicMesh* ADynamicMeshActor::AllocateComputeMesh()
{
	if (bEnableComputeMeshPool)
	{
		UDynamicMeshPool* UsePool = GetComputeMeshPool();
		if (UsePool)
		{
			return UsePool->RequestMesh();
		}
	}

	// if we could not return a pool mesh, allocate a new mesh that isn't owned by the pool
	return NewObject<UDynamicMesh>(this);
}

----------------------------------------------------------------------------------------------

在editor状态下

如果一个level   A 用了 packed level instance B

那么A里面应该有一个packed level actor C 引用 B

在C中 有多个 instanced static mesh component

多少个 instanced static mesh component 代表B中多少种类的 static mesh actor

一个instanced static mesh component 代表 多个 同一种类的static mesh actor

 

 

如果packed level instance  有嵌套

比如A 中 有B  B中有C

那么在editor 状况下  只要获得B对应的 packed level actor ,这个actor 其实 引擎已经帮你递归了, 这个actor已经包含了全部的static mesh actor 不管 里面嵌套多少层

---------------------------------------------------------------------

蓝图中生成一个dynamic mesh的方法

1、

 记得维护这个pool 该释放释放

2、万能的

 3、ADynamicMeshActor里面自带一个pool

UDynamicMeshPool* ADynamicMeshActor::GetComputeMeshPool()
{
	if (DynamicMeshPool == nullptr && bEnableComputeMeshPool)
	{
		DynamicMeshPool = NewObject<UDynamicMeshPool>();
	}
	return DynamicMeshPool;
}


UDynamicMesh* ADynamicMeshActor::AllocateComputeMesh()
{
	if (bEnableComputeMeshPool)
	{
		UDynamicMeshPool* UsePool = GetComputeMeshPool();
		if (UsePool)
		{
			return UsePool->RequestMesh();
		}
	}

	// if we could not return a pool mesh, allocate a new mesh that isn't owned by the pool
	return NewObject<UDynamicMesh>(this);
}
引用\[1\]:在UE中,可以使用SetMeshTriangles节点将新的三角形应用于GameGeneratedActor。可以在运行时使用它来创建动态的网格(当更新过多的顶点时可能会出现延迟)。如果需要,可以使用SetMeshMaterial节点为网格应用材质。需要注意的是,这些网格没有UV坐标。\[1\] 引用\[2\]:关于UE的procedural geometry,有一种修复算法可以用来处理环状结构的切面。该算法将切面切割为多个“无孔”的多边形。具体步骤如下:首先遍历所有封闭多边形,判断其外部存在的封闭多边形数量,如果是奇数个,则认定其为内边,并将其设置为上一层多边形的内边;如果是偶数个,则认定其为外边。然后遍历所有外边,将没有内边的多边形放入最终输出的多边形队列,并将有内边的多边形压入堆栈。接下来,从堆栈中弹出一个多边形,任取一个内边,判断切割该内边是否会影响其他内边。如果不会影响,则进行切割。切割方式可以是任取内边上的一点,找出距离最远的点,然后计算这两个点到外圈多边形各个边的距离,找出距离最小的边,通过这两个点做垂线,得到的两条垂线即为切割线。判断切割线是否会影响其他内边的方法是判断切割线是否与其他内边相交。如果不满足条件,则重新选择内边上的点进行切割。重复以上步骤,直到没有含有内边的多边形。最后输出无内边的多边形队列。\[2\] 引用\[3\]:在UE中生成程序化几何体并在游戏中生成它们的方法非常简单。这只是一个简单的演示,用于帮助您生成自己的网格,而不是作为正确编程技术的示例。\[3\] 回答: 在UE中,可以使用SetMeshTriangles节点将新的三角形应用于GameGeneratedActor,从而生成程序化几何体。可以在运行时使用这种方法来创建动态的网格。如果需要,还可以使用SetMeshMaterial节点为网格应用材质。需要注意的是,这些程序化几何体没有UV坐标。此外,还有一种修复算法可以用来处理环状结构的切面,将切面切割为多个“无孔”的多边形。该算法通过遍历多边形并判断其内外边的数量来实现切割。然后,根据切割线的计算结果进行切割,并将切割后的多边形进行分类和处理。最后,输出无内边的多边形队列作为结果。需要注意的是,这只是一种简单的演示,用于帮助您生成自己的程序化几何体,而不是作为正确编程技术的示例。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [UE4 Procedural Mesh Generation](https://blog.csdn.net/pizi0475/article/details/53514831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [UE4——SliceProceduralMesh 函数解析及BUG修复](https://blog.csdn.net/lz_oases/article/details/88135148)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值