【UE】Chaos破碎方案浅析

1. Chaos基本概念

1.1 什么是Chaos

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

1.2 Chaos的优越之处

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

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

  1. 首先是能够提供影视级的破碎效果,这个我们后面的视频中会展示
  2. 其次则是提供了极为丰富且易用的工具箱,为玩家的编辑与交互控制提供了十分全面的支持
  3. 第三则是自研的方案可以非常方便的实现与原生Gameplay逻辑的绑定,包括特效、音效以及网络等的联动,这项特性将极大的提升了显示的效果与联网游戏中物理方案的易用性
  4. 最后则是能够充分的保证物理的运行性能在掌控之中,避免不受控制的性能热点等

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

1.3 Chaos与GamePlay的互动

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

Chaos物理与游戏伤害逻辑的绑定
AI在感知到物件坠落时的射击行为
AI角色在破碎发生时的避让行为
Chaos与Niagara的交互

2. Chaos实现流程

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

2.1 Geometry Collection

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

2.2 Fracture

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

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

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

2.3 Cluster

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

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

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

2.4 Connection Graph

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

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

2.5 Field

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

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

  1. Sleep Field,用于对Volume内部的碎片执行低消耗的睡眠模式,以降低其模拟消耗。处于Sleep Field的碎片在特定的条件下可以重新唤醒,与之相对的还有一个Disable Field,处于其中的碎片则会永久的沉睡。
  1. Strain Field,用于对物件进行不断的侵蚀,侵蚀导致Connection
    Graph的连接强度不断降低,当强度降低到某个阈值之下之后就会产生对应的破碎
  1. Anchor Field,指的是将对应区域的物件锁定,禁止产生破碎,如下图中所示的保留建筑底座与部分天花板的残骸,以形成一种更为逼真的效果。
  1. Force Field,用于对Volume覆盖的区域施加一个力场,比如下面动图中蓝色小球所表示的Force Field,就施加了一个从中心点出发径向力以产生一种爆炸效果。

3. 性能

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

  1. 首先,碎片的切分包括碎片Mesh的生成,顶点属性的计算等都是在离线完成的,这就简化了很大一部分破碎模拟的工作量了

  2. 其次,借助了Intel的ISPC并行计算方案,可以很好的利用CPU的多核特性来进行多线并行模拟,进一步降低时间消耗

  3. 第三,在一些低端设备上,会开启Simulation Cache,将碎片受力后的破碎效果离线计算并Cache下来,并在运行时播放,虽然表现质量上有所损失,但是并不明显,而计算效率则是直线上升

  4. 不管破碎生成了多少个碎片,最终同一材质的碎片都会在一个DrawCall中绘制完成,从而减轻了碎片增加导致的渲染压力

  5. 通过将破碎拆分成不同层级的多个Cluster,按需破碎来降低同一时间破碎的碎片数量以减轻模拟压力

  6. 通过Sleep/Disable Field减少需要模拟的碎片数量来减少计算消耗
    当然除此之外,可能还有一些其他的策略,比如将物理模拟拆出到一个单独的线程,通过灵活控制其模拟频率来减轻消耗等,

参考文献

[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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 伯特兰·罗素说他人生由三大激情支配着:对爱的渴望、对知识的探求、对人类痛苦的怜悯 早两天,Epic发布了UE5 E...
    离原春草阅读 9,174评论 1 4
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,084评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,032评论 0 4