【UE】Chaos破碎方案浅析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【UE】Chaos破碎方案浅析相关的知识,希望对你有一定的参考价值。

参考技术A Chaos是UE自研的新一代物理引擎,以提供影视级的实时破碎方案作为阶段性的核心目标,但Chaos的最终目标不仅于此,其最终是希望提供包括流体模拟、布娃娃模拟、布料模拟在内的所有主流物理特性的整套方案,不过目前展出且开发完成度较高的为其破碎方案,这也是我们此次介绍的主体。

UE更换了原有的Physx物理组件目的就是希望能有所突破,那么Chaos相对于Physx方案而言有什么样的优点呢?

总的来说,其优点主要可以归纳成如下四个方面:

破碎的表现可以参见之前UE发布的 宣传视频 。

Epic在GDC2019中还给大家展示一下Chaos跟Gameplay的交互表现:

下面来看下Chaos的实现流程,主要分成五个部分。

首先是Geometry Collection,什么是Geometry Collection,这是UE专为物理破碎新增的一种Asset,由一个或多个StaticMesh组成,用于表示需要破碎的物件。在Geometry Collection中,所有共享一个材质的StaticMesh都会在两个DrawCall中画完,一个用于绘制破碎物件的外部面片,一个则用于绘制破碎物件的内部面片。

Chaos破碎的实现以对Geometry Collection的划分开始,如下图所示

UE提供了包括标准的Voronoi划分、径向划分等在内的众多划分模式,这个划分是可以根据需要进行递归的,比如下图所示,

我们通常会对一些大块的碎片进行再次的细分,直到划分方案满足我们的需求为止。

划分后的每个碎片,我们将之Group到一个Cluster中,而Cluster是可以级联的,因此一个Geometry Collection的所有Cluster会构成一个树状结构,这棵树的不同层级对应于不同的划分粒度,如下图所示:

在编辑划分阶段,我们就可以指定一个物件的破碎级别,下方的动图给出了不同层级的破碎对应的效果。

这里并不局限于所有的cluster都按照相同的层级进行破碎,实际上我们可以为每个Cluster设置破碎的强度,通过为不同的Cluster设置不同的强度我们可以得到较为随机的破碎效果,比如我们可以将最粗粒度的cluster的破碎强度设置为1,最细粒度的cluster的破碎强度设置为10,这样在受力逐渐加大的时候,破碎的粒度就会变得越来越小,从而得到一种更为真实的破碎感,当然实际情况中,为了使得破碎表现更为自然,我们通常会为不同的cluster设置一个较为随机的破碎强度,而不会将破碎强度设置得如此统一。

刚才说到了破碎强度,那么破碎强度是如何作用的呢?这就要介绍到Connection Graph了,Connection Graph是多个Cluster(非叶子Cluster,叶子Cluster则指的是多个碎片)之间的连接线组成的一张Graph,如左图所示,在这张Graph中,每个节点对应于一个Cluster,而每条边代表着某个Cluster与一个相邻的Cluster的连接强度,当作用力超出某个设定的阈值之后,这条边就会断裂,当某个Cluster的所有边都断裂了之后,就会根据受力计算其接下来的运动轨迹,从而完成破碎效果。

上图给出的是最粗粒度的Cluster的Connection Graph,实际上在每个Cluster内部应该也有对应的Sub Connection Graph以实现更为细腻的破碎粒度。

Connection Graph给出了碎片之间的连接关系,那么碎片之间的连接强度以及物件比如说子弹碰撞时施加的破碎力度又是怎么指定的呢?这一切都要依赖于我们最后这里说到的Field,一个Field就是一个一定形状的Volume,这个Volume会对其覆盖范围内的Cluster施加影响,比如说指定Connection Graph中的连接强度,比如说在这个Volume内部施加一个随着到中心点的距离的增加而不断降低的径向破坏力,如果将这个Field附加在一枚炮弹上,就能实现碎片朝着四面八方飞溅的效果。

Field主要有很多种,下面介绍其中常用的几种:

前面介绍了Chaos的实现流程,下面简单介绍下Chaos是如何在如此大范围的破碎的情况下保持一个实时帧率的,主要有如下的几个原因:

[1] Order from Chaos - Destruction in UE4 | GDC 2019 | Unreal Engine
[2] Chaos Destruction Overview
[3] 如何评价Unreal Engine 4.23版的Chaos物理与破坏系统?
[4] Chaos Physics in Unreal Engine 5
[5] Async Tick Physics Overview

php 破碎(或空白)wordpress定制器解决方案

define('CONCATENATE_SCRIPTS', false);

/* That's all, stop editing! Happy blogging. */

以上是关于【UE】Chaos破碎方案浅析的主要内容,如果未能解决你的问题,请参考以下文章

php 破碎(或空白)wordpress定制器解决方案

自动生成测试脚本方案浅析

破碎的动画SwiftUI

破碎的Nuget包参考文献开箱即用

如何制作破碎/波浪状的网格

[ue4] HISM 大规模植被渲染解决方案