中EN
概念页

游戏中的物理与中间件

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 合并
HavokGEA 称其为商业物理 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)。
  1. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  2. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 14 章引言、14.1–14.2、14.6 节
  3. Physics in Unreal Engine

相关页面

游戏开发碰撞检测系统Collision Detection System碰撞检测系统判断游戏世界里的物体是否接触,本质上是一个"高级几何相交测试器",同时返回接触的详细信息。每个可碰撞对象由形状 + 变换描述,全部存放在独立的碰撞世界里;形状尽量用球、胶囊、盒、凸体等简单图元。为了在大量物体中快速找到真正相交的对,引擎使用时间相干性、空间划分,以及宽相、中相、窄相三级筛选(GEA4 卷 II 14.3)。游戏开发刚体动力学Rigid Body Dynamics游戏物理引擎关心的是动力学:力如何影响运动。它做了两个简化:经典(牛顿)力学(无量子、无相对论效应)和刚体(形状不变)。无约束刚体有 6 个自由度,其运动可以分成互相独立的线性动力学(质心像质点一样平动)和角动力学(绕质心转动)。线性部分是 F=ma 的常微分方程;三维角动力学则以角动量为主变量,并用一个四元数形式的微分方程更新朝向(GEA4 卷 II 14.4)。游戏开发碰撞响应与约束求解Collision Response & Constraint Solving刚体碰撞后,模拟必须让它们做出逼真的反应,并保证一步结束时不再互相穿透,这就是碰撞响应。主流方法有三种:基于牛顿恢复定律的冲量法、像硬阻尼弹簧一样的惩罚力、以及把碰撞当作约束交给通用约束求解器。此外还要处理摩擦、多边形汤上的伪接触(焊接),以及让物体安静下来(休眠与模拟岛)。约束(点对点、铰链、棱柱、布娃娃、动力约束等)限制刚体的自由度;每帧的物理步骤是"积分 → 碰撞检测 → 碰撞解决 → 约束求解"的迭代误差最小化(GEA4 卷 II 14.4.7–14.4.10)。游戏开发物理引擎与游戏的集成Integrating a Physics Engine into a Game碰撞/物理世界里的刚体只是抽象的数学描述,要通过游戏对象这个中枢,间接连到屏幕上的视觉表现。刚体按谁驱动分三类:物理驱动、游戏驱动(Havok 称 key framed)、固定;Havok 用可在运行时切换的"运动类型"统一表示。每帧更新有固定顺序:先更新游戏驱动刚体、幻影、力、冲量和约束,再步进模拟,然后回读物理驱动对象、查询幻影、执行投射查询。物理宜用恒定的 1/30 或 1/60 秒时间步。GEA 还逐一讨论了子弹、手雷、爆炸、可破坏物、角色移动、相机碰撞和布娃娃的实际做法(GEA4 卷 II 14.5–14.6)。游戏开发 · UE5Chaos 物理与碰撞Chaos Physics & CollisionChaos 是 UE5 的物理与破碎系统。日常最常打交道的是碰撞模型:每个物理体有对象类型 (Object Type) 和对其他类型的 Block/Overlap/Ignore 响应,结果由双方共同决定;Hit 与 Overlap 事件都要显式开启。骨骼网格通过物理资产 (Physics Asset) 获得刚体与约束(布娃娃、物理动画);Chaos 破碎基于几何集合 (Geometry Collection) 的分级断裂、簇阈值、连接图与缓存回放,并能把事件交给 Niagara。物理体用盒/球/胶囊/凸包代理,原理对应游戏数学中的包围体与相交测试。游戏开发 · UE5Chaos 布料Chaos ClothUE5 的布料由 Chaos Cloth 解算器模拟,它是一个基于粒子的底层解算器。有两套制作流程:一是传统流程,在骨骼网格编辑器里直接选材质分段、绘制参数遮罩(最大距离、背挡、动画驱动等);二是 UE 5.3 起的 Panel Cloth Editor,用独立的布料资产和 Dataflow 节点图搭建,支持可选的 XPBD 约束和水平集体积 (Level Set Volume) 碰撞。游戏开发运行时引擎分层架构Runtime Engine ArchitectureGregory 把游戏视为“软实时、交互式、基于代理的计算机模拟”,把游戏引擎定义为数据驱动、可复用来做多款游戏的软件。运行时引擎按层组织:从目标硬件、驱动、操作系统、第三方 SDK、平台无关层、核心系统、资源管理器,到渲染、物理、动画、音频、网络等子系统,再到游戏性基础层和游戏专属子系统;上层依赖下层,避免循环依赖。游戏策划游戏技术Game TechnologySchell 把技术放到书末才谈,因为"太阳出来时很难研究星星":四元素中技术最动态、最多变、最难预测,像派对上出现的醉酒亿万富翁,所有目光都在他身上。对设计师而言,技术就是游戏的媒介——让游戏成为可能的物理之物(大富翁的棋盘纸片骰子、跳房子的粉笔与人行道)。核心工具:区分基础性技术与装饰性技术;认识 Gartner 技术成熟度曲线与 Christensen 创新者的窘境;理解分化定律;练习预测未来;第 3 版新增"触屏革命"与"乌托邦"两节及 106 乌托邦之镜(第 3 版第 29 章 The Team Builds a Game with Technology)。

被这些页面引用1 篇

输入关键词开始搜索

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