Cluster Union破碎相关问题

我们在尝试验证多物理材质破碎时碰到了一些问题:

  1. 首先我们尝试将一整栋建筑合并成一个GC,这样就自动包含了支撑关系,但一个GC只能识别其第一个材质的物理材质作为整体的物理材质; 然后尝试讲其拆分成不同的GC,通过Cluster Union合并到一起,发现Cluster在破碎后会出现不合理的物理结构。例如这根柱子破碎后,柱子顶端无法根据重力的影响自然掉落。 不知道是否是设置不正确;
  2. Cluster Union还碰到了一些其他问题,比如在开启Break Notify之后,Union合并的GC会在刚运行的时候就产生破碎数据到niagara,即使他还没有破碎; 射线检测似乎也无法正确命中Union之后的GC; 在给其中某个特定gc添加remove on sleep的时候,会导致整个union运行时直接破碎,union其他部分的gc添加时没这个问题。
  3. 请问演示中的房屋是通过什么手段制作的呢? https://www.bilibili.com/video/BV1J64y1K7XH/?spm_id_from=333.337.search-card.all.click&vd_source=bfe57aecbe63e44f9f26453f14b84f5a

<br/>

重现步骤

你好,

现阶段一个GeometryCollecion确实只携带一个物理材质信息. 视频中的房屋窗框部分和木结构部分是分开的Geometry Collection, 玻璃只是普通的Static Mesh, 逻辑判断是要整体销毁还是做裂痕.

在使用Cluster Union过程中遇到的问题, 包括支撑结构的问题和射线检测等, 方便发一个可复现的简单场景过来我看下么? 谢谢!

请问窗框部分和木结构部分是用什么方式进行物理约束,避免由于重力的原因而导致结构破坏的;这是我们的测试场景

我们引擎版本是5.6,请查收~ 谢谢!

这是测试的工程文件

https://drive.google.com/file/d/19O8QLTi\-M5C3mLncy6OXMQPVZEngXBIy/view?usp\=sharing​

Unreal Fest上的房屋演示制作的比较早(5.3), 并没有使用cluster union. 射击效果中, 窗框部分只是被Anchor在了原地, 被其他碎块撞到或被物理场影响时掉落. 这样做其实是有悬空风险的, 我也有在坍塌效果中试着合并成一个GeometryCollection, 让二者有约束相连, 但在此案例中, 破碎效果差别不大, 物理材质的拆分对特效的表现更重要一点.

Cluster Union悬空的问题, 参考 FRigidClustering::HandleConnectivityOnReleaseClusterParticle 这个函数下面的注释, 引擎只会根据连通关系判断auxiliary pieces的掉落, main pieces交由游戏逻辑处理, 不会自动释放掉落. 比如你的场景中, 原GeometryCollection默认都属于main pieces, 圆柱中间部分断开后, 残余碎块会被动态连接到相邻的GeometryCollection上, 这部分碎块就被认为是auxiliary pieces, 物理线程只会处理后者, 所以会出现上层GeometryCollection没释放的悬空现象. 在堡垒的乐高项目里, 开发同事是做了一个Connectivity Graph Component在游戏线程判断GeometryCollection之间的连接. 我会和开发再沟通一下如何兼顾连通效果和物理材质拆分, 还有Notify/射线检测的问题我也可以复现, 一起反馈后晚点再回复你, 抱歉!

else if (bCheckForInterclusterEdgesOnRelease && ParentClusterUnion->bCheckConnectivity)
{
// We know we're in an cluster union. There are pieces that we consider to be the "main body". There are certain pieces that we consider to be auxiliary as well.
// If an island is only made up of auxiliary pieces, then those pieces should fall off. Connectivity of main pieces should be handled by the GT.
...

谢谢!期待你们的回复呢~

您好, 抱歉假期耽搁, 回复晚了.

悬空问题:

引擎目前有两种连接Geometry Collection的方式, 设置相同的Cluster Group Index, 或通过Cluster Union Actor相连, 选取哪种方式主要取决于需不需要运行时组装GeometryCollection.

Cluster Union Actor支持运行时连接, 且一个GeometryCollection局部破坏后, 残余部分可以动态连接到邻接的GeometryCollection上. 但连接的Geometry Collection主体是否要释放坠落需要自己在游戏逻辑里判断, 堡垒之夜乐高项目里大量使用了Cluster Union Actor.

Cluster Group Index仅支持编辑时连通不同的Geometry Collection, 功能相对较少但效率更高. Cluster Group原本是支持根据连通关系自动释放主体碎块的, 但5.6 5.7上这个功能失效了, 开发同学发给了一个修复, 我测试可以解决悬空问题, 先贴在下面, 预计会在5.8版本提交.

射线检测问题和break event错误触发的问题, 我暂时提交了Bug单(UE-367481), 后续有修复再沟通.

Niagara响应break event也许可以用Min Speed或者Min SolverTime过滤一下, 暂时绕过这个问题.

Cluster Union Actor是可以使用物理场的, 但需要将场的Meta Data Resolution设置为Maximum, 确保场不会只对Active的刚体生效. 以修改FS_MasterField为例:

另外补充, 我们有计划支持逐碎块的物理材质设置, 但预计在5.8 Dataflow功能完善后.

谢谢xiaoyue!我们这边明白了~