中EN
概念页

Chaos 物理与碰撞

Chaos Physics & Collision

更新于 2026-10-13 约 15 分钟UE5Chaos物理碰撞刚体物理资产破碎

Chaos 是 UE5 的物理与破碎系统。日常最常打交道的是碰撞模型:每个物理体有对象类型 (Object Type) 和对其他类型的 Block/Overlap/Ignore 响应,结果由双方共同决定;Hit 与 Overlap 事件都要显式开启。骨骼网格通过物理资产 (Physics Asset) 获得刚体与约束(布娃娃、物理动画);Chaos 破碎基于几何集合 (Geometry Collection) 的分级断裂、簇阈值、连接图与缓存回放,并能把事件交给 Niagara。物理体用盒/球/胶囊/凸包代理,原理对应游戏数学中的包围体与相交测试。

Chaos 是什么

官方:Chaos Physics 是 UE 中「为下一代游戏从零构建」的轻量物理模拟方案,涵盖破碎 (Destruction)、网络物理、Chaos 可视化调试器、刚体动力学、刚体动画节点与物理动画、布料、布娃娃、载具、物理场 (Physics Fields)、流体、毛发、肌肉 (Flesh) 与 Dataflow 图。(Physics in Unreal Engine)本页聚焦刚体、碰撞、物理资产和破碎。

刚体与物理代理形状

实时模拟不能直接用渲染网格,必须用代理形状:物理体 (Physics Body / Body Instance) 是简化网格,由盒、球、胶囊或凸包 (Convex Hull) 组成。(Physics Asset Editor / Physics Bodies)这与 包围体构建、相交测试基础与分离轴 的思路一致:用简单凸体换取快速、稳定的相交测试。刚体动力学提供碰撞响应、约束、阻尼与摩擦,并支持异步物理模拟;载具文档指出异步物理模式能提高确定性。(Physics in Unreal Engine)

碰撞:对象类型 × 响应

每个可碰撞对象有一个对象类型 (Object Type) 和对所有其他类型的响应 (Response):Block / Overlap / Ignore;射线检测 (Trace) 则按追踪通道 (Trace Channel)(默认 Visibility、Camera)决定被阻挡还是忽略。(Collision Overview、Collision Response Reference)

对象类型用途
WorldStatic不移动的物体
WorldDynamic由动画或代码移动(运动学):电梯、门
Pawn玩家控制的实体
PhysicsBody由物理模拟驱动
Vehicle / Destructible载具 / 可破坏物默认类型

结果由双方共同决定(Collision Response Reference)。可以把规则理解为取两者中“更弱”的响应:

A 对 B \ B 对 ABlockOverlapIgnore
Block阻挡(Hit)重叠无
Overlap重叠重叠无
Ignore无无无

(表格为对官方规则的归纳:双方都 Block 才阻挡;一方 Overlap 一方 Block 时只发生重叠;任一方 Ignore 则无事件。Collision Overview)

Collision Enabled 四态:No Collision(物理引擎中无表示,性能最好)、Query Only(只用于射线/扫掠/重叠查询,适合角色移动)、Physics Only(只模拟,如角色次级运动)、Collision Enabled(两者)。(Collision Response Reference)查询本身就是 光线求交测试 和 包围体重叠测试 的工程化。

事件开关的坑

  • 双方 Block 只会物理阻挡;要触发蓝图 Event Hit / OnComponentHit 必须开 Simulation Generates Hit Events,且只有开了的一方收到事件。静止接触时 Hit 会每帧刷屏,需要过滤。
  • Overlap 事件(BeginOverlap/EndOverlap)要求双方都开 Generate Overlap Events——这是性能设计:否则一方必须每帧 Tick 检查是否有人移进来。不开时 Overlap 与 Ignore 效果相同。
  • 高速物体即使 Block 也可能产生 Overlap;官方不建议同一物体同时依赖碰撞和重叠事件。
  • PIE 默认相机是 Pawn,会被阻挡;Simulate 模式相机不是。(以上 Collision Overview)

实践中通常在 Project Settings > Engine > Collision 定义自定义对象类型、追踪通道和预设 (Preset),组件只选预设,避免逐个手调。(预设位置见 Collision Response Reference)

物理资产 (Physics Asset)

物理资产为骨骼网格定义物理与碰撞:一组刚体与约束组成一个布娃娃(不限人形,也可是载具);每个骨骼网格只能有一个物理资产。可在导入时勾选 Create Physics Asset 生成,或之后创建,在 Physics Asset Editor 中编辑。(Physics Asset Editor / Physics Bodies)它同时服务于布娃娃、物理动画(刚体随动画模拟)和载具碰撞,与 动画蓝图与动画系统 中的刚体动画节点衔接。(Physics in Unreal Engine)

Chaos 破碎 (Destruction)

  • 基于几何集合 (Geometry Collection):由一个或多个静态网格(含蓝图中嵌套的)构建,可多级、选择性地断裂 (Fracture),每个簇 (Cluster) 设损伤阈值 (Damage Threshold)。
  • 连接图 (Connection Graph) 模拟结构完整性,决定受损后如何坍塌;World Support 把部分设为运动学,减少锚点场 (Anchor Field)。
  • 缓存系统 记录逐帧变换与事件,压缩后用于高效回放;缓存的模拟被交互时可局部“转为实时”。
  • 与 Niagara 深度集成:Niagara 读取断裂事件 (Break Events) 和碰撞事件生成粒子;物理场 可在空间区域内施力、打碎簇、锚定或禁用碎块。(以上 Physics in Unreal Engine)

断裂工具 (Fracture Mode):几何体集合 (Geometry Collection) 是 Chaos 破碎使用的资产类型,在 Fracture Mode 编辑器模式里离线切分。每切一次就多一层断裂层级,层级是一棵树:根骨骼下挂碎块骨骼,碎块还能继续细分;每层可以换用不同工具,也可以只切选中的碎块。(Fracturing Geometry Collections User Guide)

工具算法/图案
UniformVoronoi,用最少/最多站点数控制碎块数
ClusterVoronoi,站点聚成「岛」,碎块大小更不均匀
Radial从中心放射分布站点(冲击点、弹孔)
Planar / Slice无限平面切割 / 按 X/Y/Z 轴成行成列切片,可加随机角度和偏移
Brick砖块砌法图案(实验性)
Mesh用一个静态网格的形状当刀具
Custom自定义 Voronoi 站点,可冻结站点;图案与集合独立,缩放集合后可得到细长的木刺状碎片

通用参数:Random Seed(-1 每次随机,固定值可复现)、Chance to Fracture、Grout(碎块间隙),以及 Perlin 噪声(Amplitude、Frequency、Octave 等)让切面不那么平。Point Spacing 越大,切面三角形越少,但噪声细节越粗,这是碎块面数与外观之间的取舍。(Fracturing Geometry Collections User Guide)运行时如何断裂见下一节。

破碎的运行时:应变、簇与场

5.x 没有找到 Destruction 概览页(chaos-destruction-in-unreal-engine 只是一个索引页),下面以 UE 4.27 的 Chaos Destruction Overview 为主(Chaos Destruction Overview),并用 UE 5.8 的 UGeometryCollectionComponent API 核对当前属性名(UGeometryCollectionComponent API)。

原理:簇 + 应变阈值。 断裂后的碎块按层级组成簇 (Cluster),簇内碎块之间的连接关系就是连接图 (Connection Graph)。施加到簇上的应变 (Strain) 超过该层的伤害阈值 (Damage Threshold) 时,簇就释放出下一层碎块。(4.27)

flowchart TD
  A["碰撞(bEnableDamageFromCollision)<br/>或场 / ApplyExternalStrain"] --> S["簇上累积应变"]
  S --> T{"应变 > 该层 Damage Threshold?"}
  T -->|"否"| K["保持成簇"]
  T -->|"是"| R["释放子层碎块<br/>(不超过 Max Cluster Level)"]
  R --> P["碎块作为刚体模拟"]
  P --> Z{"低速 / 进入 Sleep 或 Disable 场"}
  Z --> SL["休眠:碰撞或场可唤醒"]
  Z --> DI["禁用:移出模拟,只有场能重新激活"]

图从上到下:碰撞或场产生应变,超过阈值才逐层释放碎块;碎块模拟一段时间后进入休眠或被禁用,两者被唤醒的方式不同。

机制要点版本/出处
伤害阈值每层一个值,表示该层断裂需要多大应变;官方示例按层级递减设置,因为碎块下落时碰撞会降低速度,更细的层需要更低的阈值才能继续碎4.27;5.8 API 中为 DamageThreshold 数组,另有 DamageModel、按尺寸阈值 bUseSizeSpecificDamageThreshold、按材质修正、DamagePropagationData
层级设计第一层少量大块,越往上越碎;不要一开始就碎成几千块,而是在建筑倒塌过程中逐步掉落小块;Max Cluster Level 限制最深断裂层4.27;5.8 API 仍有 MaxClusterLevel、MaxSimulatedLevel
碰撞造成伤害打开后,碰撞会向集合施加应变5.8 API bEnableDamageFromCollision
Cluster Group Index索引相同的多个集合合为一个 Level 0 簇,场数据共享4.27
锚定锚定场 (Anchor Field) 必须在构造脚本里用 Add Field Command 设置,因为连接图要在模拟前建立;被锚定的部分在受到应变前保持静止4.27;5.8 API SetAnchoredByBox/ByIndex
代码直接施加ApplyExternalStrain/ApplyInternalStrain(半径、传播深度、传播系数)、CrumbleCluster(直接碎成全部子块)5.8 API
休眠与移除Sleep 场让刚体休眠,碰撞和场都能唤醒;Disable 场把刚体移出模拟,碰撞无法唤醒,开销很低,只有场能重新激活;5.8 有 RemovalOnSleep(休眠后移除)4.27 / 5.8 API

场 (Fields):Field System Actor 蓝图里,Add Field Command 在模拟前设置初始化类场(如锚定),Apply Physics Field 在模拟中施加(如外部簇应变爆炸)。常用场:ExternalClusterStrain(超过阈值就释放碎块)、InternalClusterStrain(配合噪声做随时间坍塌)、LinearForce / AngularTorque、DynamicState、Kill、Sleep/Disable 阈值。坑:Disable、Sleep、Kill 类场外面必须加剔除场 (Culling Field),否则会覆盖地图中其他同类场的设置。(4.27)

性能取舍:碰撞体可用解析形状(快、省内存、不精确)或 Level Set 有符号距离场(精确,内存随分辨率立方增长)。Collision Particles Fraction 过低会导致碎块穿地。和玩家无关的背景破碎可以先录制成缓存 (Cache),再以 Kinematic 回放,消除运行时开销和卡顿;也可以把集合分配给自定义 Chaos Solver 分担计算。玩法上,打开 Notify Breaks/Collisions 后可绑定 OnChaosBreakEvent;Niagara 可通过 Chaos 数据接口读取碰撞、断裂和拖尾事件生成碎屑特效,见 Niagara 粒子系统。(4.27)4.27 与 5.x 的差异:伤害模型、传播数据、按尺寸阈值等是 5.x API 中出现的属性,4.27 页没有描述,具体行为未从官方概念文档核实。

网络物理

三种复制模式:Default(旧版)、Predictive Interpolation(服务器权威,修正客户端速度向服务器靠拢,可处理预测性的本地改动)、Resimulation(服务器权威的物理 Pawn,客户端预测,与历史状态比较差异过大时重新模拟)。(Physics in Unreal Engine)复制基础见 网络复制与 RPC。调试可用 Chaos Visual Debugger 录制并逐帧/逐子步回放。

取舍

选择收益代价
Query Only 代替完整碰撞省模拟树数据不能被物理推动
简单基元代替凸包/复杂碰撞快、稳定贴合度低
破碎缓存回放运行时开销小交互性受限、占存储
Resimulation物理 Pawn 手感好实现与带宽/CPU 成本高

GEA 的视角:通用物理引擎原理与 Chaos 的对照(卷 II 14.2–14.5)

GEA 第 14 章讲的是通用碰撞/物理引擎(以 Havok、PhysX 为例)。与本页 Chaos 内容的对应如下:

GEA 概念本页中的对应详见
碰撞图元(球、胶囊、盒、凸体)物理体的盒/球/胶囊/凸包代理形状碰撞检测系统
碰撞过滤(碰撞层、回调)对象类型 × Block/Overlap/Ignore 响应碰撞检测系统
射线/形状投射、幻影追踪通道、Query Only、扫掠与重叠查询碰撞查询
布娃娃 = 刚体 + 专用约束 + 动力约束物理资产(刚体与约束)、物理动画碰撞响应与约束求解
休眠与模拟岛破碎中的 Sleep / Disable 场碰撞响应与约束求解
用刚体实现可破坏物,按结构逐步坍塌几何集合的分级断裂、簇与应变阈值物理引擎与游戏的集成
  1. Physics in Unreal Engine UE 5.8 文档
  2. Collision Overview UE 5.8 文档
  3. Collision Response Reference UE 5.8 文档
  4. Physics Asset Editor / Physics Bodies UE 5.8 文档
  5. Fracturing Geometry Collections User Guide UE 5.8 文档
  6. Chaos Destruction Overview UE 4.27 文档(5.x 无对应概览页)
  7. UGeometryCollectionComponent API UE 5.8 API 参考
  8. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  9. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 14 章 14.2–14.5 节

相关页面

游戏数学包围体重叠测试Bounding Volume Overlap Tests碰撞检测先测试包围体是否重叠,只有重叠时才逐图元测试;最底层则需要三角形之间、三角形与盒之间的精确测试。本页整理 RTR4 第 22.10~22.13 节:平面与 AABB/OBB(只测两个角的"投影半径"法)、三角形-三角形(Guigue-Devillers 行列式法)、三角形-AABB(13 轴 SAT)、球-球、球-盒(Arvo 及其向量化版本)、AABB-AABB、k-DOP-k-DOP 与 OBB-OBB(15 轴 SAT)。更复杂的 BV(OBB、k-DOP)空体积更少、更紧,代价是测试更贵。游戏数学光线求交测试Ray Intersection Tests光线求交用于拾取、光线追踪、地面高度查询等。本页给出四类经典测试:光线-球(代数解与带早期拒绝的几何优化解)、光线-盒(平板法与光线斜率法)、光线-三角形(Möller-Trumbore,直接从顶点求重心坐标与距离)、光线-多边形(先求平面交点,再投影到二维做交叉数测试)。共同思路是先做便宜的拒绝测试、推迟除法与开方、必要时降维。游戏数学相交测试基础与分离轴Intersection Test Fundamentals & Separating Axis相交测试判断两个对象是否相交(包含、边界相交或分离),有时还需要最近交点或穿透深度与方向,是碰撞检测、视锥剔除、拾取和光线追踪的基础。本页汇总 RTR4 第 22 章的通用工具:光线与曲面的表示、常见包围体定义(AABB、OBB、k-DOP、凸多面体、胶囊与菱形体)、分离轴测试 (SAT)、几何概率与表面积启发式 (SAH)、设计相交例程的经验法则,以及基于 GPU 的拾取。游戏数学包围体构建Bounding Volume Construction紧凑的包围体能降低相交测试成本:光线击中凸体的概率与其表面积成正比,拒绝永远不比相交慢,所以求交加速应最小化 BV 表面积;碰撞检测则常最小化体积。本页讲 AABB/k-DOP、包围球(AABB 法、Ritter 近似法、Welzl 最优法)、凸包(Quickhull)以及 OBB(PCA 法、数值最小化、Larsson 与 Källberg 的近优线性算法)的构建方法与取舍。游戏开发 · UE5Gameplay 框架Gameplay FrameworkGameplay 框架 (Gameplay Framework) 是 UE 提供的一组相互配合的类,用来搭建游戏的基本结构:Actor 与组件 (Component) 构成场景中的一切;GameMode 在服务器上定规则并生成玩家;玩家由“控制器 (Controller) + 棋子 (Pawn)”组成;GameState 与 PlayerState 负责把全局与每个玩家的状态复制给所有客户端;GameInstance 跨关卡存活。游戏开发 · UE5网络复制与 RPCNetwork Replication & RPCUE 采用服务器权威 (Server-Authoritative) 的客户端-服务器模型:游戏真正在服务器上进行,服务器把状态复制 (Replication) 给客户端,客户端通过远程过程调用 (Remote Procedure Call, RPC) 向服务器请求操作。开发者需要显式声明哪些 Actor、属性、函数要走网络,并借助所有权、网络角色、相关性、优先级控制“发给谁、发多少”。UE 5.8 提供通用复制系统、Replication Graph 和实验性的 Iris 三套复制系统。游戏开发 · UE5动画蓝图与动画系统Animation Blueprint & Animation SystemUE5 角色动画以动画蓝图 (Animation Blueprint) 为核心:它每帧为骨骼网格体 (Skeletal Mesh) 计算最终姿势。动画蓝图内部用状态机 (State Machine) 组织“何时播什么”,用混合空间 (Blend Space) 按速度、方向等参数连续混合,用蒙太奇 (Animation Montage) 在插槽 (Slot) 中插播攻击、交互等一次性动作,用 Control Rig 做程序化骨骼控制(如贴地)。算出的骨骼姿势最终交给蒙皮 (Skinning) 驱动顶点。游戏开发 · UE5Niagara 粒子系统Niagara VFX SystemNiagara 是 UE5 的 VFX 系统,由系统 (System) → 发射器 (Emitter) → 模块 (Module) 的栈式结构组成:发射器按 Emitter Spawn/Update、Particle Spawn/Update、Event、Render 分组,模块是自上而下执行、基于 HLSL 的「读-算-写」单元。继承、动态输入、事件和数据接口 (Data Interface) 提供复用与外部数据访问;发射器可选 CPU 或 GPU 计算着色器模拟。官方 5.8 文档未找到 CPU/GPU 对比页,相关取舍按通识标注。游戏开发 · UE5AI 感知、EQS 与导航AI Perception, EQS & NavigationAI 的感官层由三块组成:AI 感知 (AI Perception) 组件挂在 AIController 上监听视觉/听觉/伤害等刺激并更新黑板;环境查询系统 (EQS) 用生成器产生候选项、先过滤后打分,回答「哪里最好」;导航系统从碰撞几何生成分瓦片的导航网格 (NavMesh),按多边形代价寻路,并提供 RVO 与 Detour Crowd 避让。它们为行为树/StateTree 提供输入。游戏开发 · UE5Chaos 布料Chaos ClothUE5 的布料由 Chaos Cloth 解算器模拟,它是一个基于粒子的底层解算器。有两套制作流程:一是传统流程,在骨骼网格编辑器里直接选材质分段、绘制参数遮罩(最大距离、背挡、动画驱动等);二是 UE 5.3 起的 Panel Cloth Editor,用独立的布料资产和 Dataflow 节点图搭建,支持可选的 XPBD 约束和水平集体积 (Level Set Volume) 碰撞。游戏开发 · UE5Chaos 载具Chaos VehiclesChaos Vehicles 是 UE5 的轮式载具物理插件:用骨骼网格加物理资产表示车身,用 ChaosVehicleWheel 蓝图配置车轮、悬挂和刹车,用扭矩曲线描述引擎,再由动画蓝图里的 Wheel Controller 节点驱动车轮转动和转向动画。另有 Chaos Modular Vehicle 插件,用几何体集合 (Geometry Collection) 拼装可拆解的模块化载具。游戏开发动画约束与后处理Animation Constraints & Post-Processing片段混合之后、渲染之前,动画系统常常还要修改姿势,这叫动画后处理:程序化动画、逆向运动学 (IK)、布娃娃。另一大类需求是约束:把武器挂在手上(挂接点)、让多个角色对齐演出(参考定位器)、手抓物体(手部 IK)、脚不滑步(根运动提取与脚部 IK),以及注视、掩体、穿越辅助等(GEA4 卷 II 13.7、13.11)。游戏开发刚体动力学Rigid Body Dynamics游戏物理引擎关心的是动力学:力如何影响运动。它做了两个简化:经典(牛顿)力学(无量子、无相对论效应)和刚体(形状不变)。无约束刚体有 6 个自由度,其运动可以分成互相独立的线性动力学(质心像质点一样平动)和角动力学(绕质心转动)。线性部分是 F=ma 的常微分方程;三维角动力学则以角动量为主变量,并用一个四元数形式的微分方程更新朝向(GEA4 卷 II 14.4)。游戏开发物理引擎与游戏的集成Integrating a Physics Engine into a Game碰撞/物理世界里的刚体只是抽象的数学描述,要通过游戏对象这个中枢,间接连到屏幕上的视觉表现。刚体按谁驱动分三类:物理驱动、游戏驱动(Havok 称 key framed)、固定;Havok 用可在运行时切换的"运动类型"统一表示。每帧更新有固定顺序:先更新游戏驱动刚体、幻影、力、冲量和约束,再步进模拟,然后回读物理驱动对象、查询幻影、执行投射查询。物理宜用恒定的 1/30 或 1/60 秒时间步。GEA 还逐一讨论了子弹、手雷、爆炸、可破坏物、角色移动、相机碰撞和布娃娃的实际做法(GEA4 卷 II 14.5–14.6)。游戏开发游戏中的物理与中间件Physics in Games & Middleware今天游戏引擎所说的"物理",准确说是经典刚体动力学模拟:理想化的、无限坚硬不可形变的物体在力的作用下如何运动和相互作用。它高度依赖碰撞检测系统;反过来,碰撞检测可以独立存在,几乎所有有移动物体的游戏都有某种碰撞检测,但不一定有物理。GEA 先讨论要不要物理、物理是否好玩、它对项目各部门的影响,再列出主流中间件(GEA4 卷 II 第 14 章引言、14.1–14.2)。游戏开发碰撞查询Collision Queries碰撞系统除了检测真实物体的接触,还要回答假设性问题:子弹从枪口朝某方向飞,先打中什么?车能否从 A 开到 B 不碰到东西?某半径内有哪些敌人?这类操作称为碰撞查询。最常见的是投射 (cast),也叫 trace 或 probe:沿射线或线段移动一个假想物体,看它会碰到什么;被投射的东西并不真正进入碰撞世界,不会影响其他物体(GEA4 卷 II 14.3.7)。游戏开发碰撞响应与约束求解Collision Response & Constraint Solving刚体碰撞后,模拟必须让它们做出逼真的反应,并保证一步结束时不再互相穿透,这就是碰撞响应。主流方法有三种:基于牛顿恢复定律的冲量法、像硬阻尼弹簧一样的惩罚力、以及把碰撞当作约束交给通用约束求解器。此外还要处理摩擦、多边形汤上的伪接触(焊接),以及让物体安静下来(休眠与模拟岛)。约束(点对点、铰链、棱柱、布娃娃、动力约束等)限制刚体的自由度;每帧的物理步骤是"积分 → 碰撞检测 → 碰撞解决 → 约束求解"的迭代误差最小化(GEA4 卷 II 14.4.7–14.4.10)。游戏开发碰撞检测系统Collision Detection System碰撞检测系统判断游戏世界里的物体是否接触,本质上是一个"高级几何相交测试器",同时返回接触的详细信息。每个可碰撞对象由形状 + 变换描述,全部存放在独立的碰撞世界里;形状尽量用球、胶囊、盒、凸体等简单图元。为了在大量物体中快速找到真正相交的对,引擎使用时间相干性、空间划分,以及宽相、中相、窄相三级筛选(GEA4 卷 II 14.3)。游戏数学数值积分Numerical Integration游戏中的力是交互的、无法事先预测的,运动方程(常微分方程)几乎没有解析解,所以物理引擎采用数值积分:以大致恒定的时间步长 \Delta t 逐步推进,由当前时刻 t1 的 \mathbf r(t1)、\mathbf v(t1) 和力函数 \mathbf F(t,\mathbf r,\mathbf v) 求出 t2=t1+\Delta t 时的位置与速度。衡量方法好坏看收敛性、阶、稳定性三项。显式欧拉最简单但误差大、不稳定;GEA 认为交互游戏中最常用的大概是 Verlet,尤其是速度 Verlet(GEA4 卷 II 14.4.4)。

被这些页面引用1 篇

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原