游戏中的物理与中间件
Physics in Games & Middleware
今天游戏引擎所说的"物理",准确说是经典刚体动力学模拟:理想化的、无限坚硬不可形变的物体在力的作用下如何运动和相互作用。它高度依赖碰撞检测系统;反过来,碰撞检测可以独立存在,几乎所有有移动物体的游戏都有某种碰撞检测,但不一定有物理。GEA 先讨论要不要物理、物理是否好玩、它对项目各部门的影响,再列出主流中间件(GEA4 卷 II 第 14 章引言、14.1–14.2)。
物理系统能做什么
动态物体与静态世界的碰撞检测;受重力等力作用的自由刚体;弹簧-质点系统;可破坏的建筑;射线与形状投射(视线、弹着点);触发体积;复杂机械(吊车、移动平台谜题);陷阱(滚石);带真实悬挂的载具;布娃娃死亡;动力布娃娃 (powered rag doll)(传统动画与布娃娃的混合);晃动的挂件、半真实的头发和衣物;布料;水面与浮力;声音传播。物理模拟也可以离线运行来生成动画片段,Maya 有不少物理插件(卷 II 14.1.1)。
物理好不好玩
刚体模拟本身不保证好玩,其固有的混沌常常有损体验。按类型看(卷 II 14.1.2):
| 类型 | 物理的角色 |
|---|---|
| 模拟类(Flight Simulator、Gran Turismo、NASCAR Racing) | 真实感正是目标,非常契合 |
| 物理解谜(Bridge Builder、The Incredible Machine、Fantastic Contraption、Crayon Physics) | 核心玩法几乎全靠物理 |
| 沙盒(Besiege、Spore、LittleBigPlanet、Minecraft) | 物理本身可以好玩,但常为趣味牺牲真实(夸张爆炸、改重力),需要调"手感" |
| 目标驱动与叙事驱动 | 很棘手:用控制换真实,失控会妨碍玩家达成目标或叙事。例:平台跳跃角色要好控制而非真实;桥要真实地炸,但碎片不能堵住唯一的路。最好给玩家脱困手段,如《光环》按 X 把翻倒的载具翻正 |
物理对项目的影响
- 设计:可预测性差,必须每次都一样的事最好做成动画;调参(重力、恢复系数)效果间接难以可视化,靠调力让角色朝某方向走远比调走路动画难;会出现涌现行为(《军团要塞经典版》火箭跳、《光环》被炸飞的疣猪号、《PsyOps》的飞行"冲浪板")。原则:由游戏设计驱动物理需求,而不是反过来(卷 II 14.1.3.1)。
- 工程:工具管线的建设与维护;玩家如何操控物理对象(射击、走进去、捡起,《Trespasser》的虚拟手臂,《半条命 2》的重力枪);物理用碰撞模型要更细致;AI 寻路在物理物体面前变得不可预测,可能需要处理会移动或被炸掉的动态掩体;"不听话"的物体(弹飞、抖动),可能需要碰撞过滤允许轻微穿插、确保物体能停稳并休眠;布娃娃需要大量调校,动画把肢体推进别的碰撞体后再转布娃娃会极不稳定;图形方面,物理运动影响包围体,可破坏物会让部分预计算光照和阴影失效;网络上,不影响玩法的物理可以各客户端独立模拟,影响玩法的(手雷轨迹)必须在服务器模拟并精确复制;录像回放要求所有系统确定性,物理不确定就是大麻烦(卷 II 14.1.3.2)。
- 美术:要给物体配质量、摩擦、约束等,工作流更复杂;可能要为同一外观做多个碰撞与动力学配置不同的版本(完好版和可破坏版);物理的不可预测让场景构图难以控制(卷 II 14.1.3.3)。
- 其他:需要工程、美术、音频、设计紧密协作;增加成本、技术与组织复杂度和风险。即便如此,GEA 认为如今多数团队还是会选择集成刚体动力学(卷 II 14.1.3.4)。
碰撞与物理中间件
碰撞/物理系统往往占引擎源码的很大比例,所以多数团队使用中间件(卷 II 14.2):
| 中间件 | GEA 的描述 |
|---|---|
| ODE (Open Dynamics Engine) | 开源碰撞与刚体动力学 SDK,功能接近 Havok;免费、有完整源码,便于调试和定制 |
| Bullet | 开源,游戏和电影都在用;碰撞引擎与动力学集成,但碰撞也可单独使用;支持连续碰撞检测 (CCD,也叫冲击时间 TOI 检测) |
| PhysX | 源自 Ageia 的 Novodex,为推广物理协处理器而生;被 NVIDIA 收购后可用 GPU 作协处理器,也能纯 CPU 运行;CPU 版免费,付费可得源码;已与 APEX 合并 |
| Havok | GEA 称其为商业物理 SDK 的"金标准",功能最丰富、性能出色,也最贵;核心碰撞/物理引擎外有载具、可破坏环境和与布娃娃集成的动画 SDK 等附加产品 |
| PAL (Physics Abstraction Layer) | 开源抽象层,让一个项目同时使用多个物理 SDK(PhysX、Newton、ODE、OpenTissue、Tokamak 等) |
| DMM (Digital Molecular Matter) | Pixelux 用有限元方法模拟可形变和可破碎物体,2008 年发布,用于《星球大战:原力释放》 |
UE5 使用自研的 Chaos,见 Chaos 物理与碰撞。
高级物理特性
约束刚体之外的方向(卷 II 14.6):可形变体(如 DMM);布料(点质量组成的薄片 + 刚性弹簧,碰撞和数值稳定性都难,Havok 等已提供好用的布料模拟,UE5 见 Chaos 布料);头发(大量细丝模拟,或把贴了头发纹理的布片用布料模拟驱动,《神秘海域:失落的遗产》中 Chloe 的头发就是这样);水面与浮力(浮力可以是专门的系统或物理模拟中的力;水面的有机运动常只是渲染效果,物理上把水面当作平面,大位移时移动整个平面;《From Dust》做了动态水面);一般流体(LittleBigPlanet 用 2D 流体做烟火,PhysX 提供基于位置的 3D 流体);基于物理的声音合成;GPGPU(Naughty Dog 的布料模拟完全跑在 GPU 上)。
GEA 原书中的问题
- 14.2.3 列出的 PhysX/APEX 支持平台(含 Xbox 360、PS3、Wii)与 14.2.4 的 Havok 平台列表(含 PS Vita、Wii U、Windows 8)都停留在较早的年代;书中也没有提到 UE5 已改用 Chaos(见 Chaos 物理与碰撞)。这里只指出列表的年代感,各 SDK 当前的平台支持以官方为准。
- 14.2.3 称 PhysX 的 CPU 版免费、"付费可获得完整源码",并说 PhysX "现已与 APEX 结合"。这也是旧情况:NVIDIA 于 2018-12-20 发布 PhysX SDK 4.0,以 3-Clause BSD 许可在 GitHub 开源(PhysX 3.4 同月改为 BSD;主机平台代码仍受 NDA/EULA 约束),而 APEX 1.4 被标为弃用、仅为已有项目保留(NVIDIA Technical Blog "PhysX SDK 4.0 Available Now",2018;PhysX 4.0 Release Notes;NVIDIAGameWorks/PhysX-3.4 README)。
出处
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 14 章引言、14.1–14.2、14.6 节
- Physics in Unreal Engine