PhysX
Vite 集成了 NVIDIA PhysX 3.4,用于刚体模拟、碰撞查询、约束、车辆和骨骼物理。 Vite 通过现代编译器支持、固定时间步长模拟、NVIDIA Blast 和高计数实例物理子系统扩展了后端。
PhysX 通过虚幻引擎的标准物理框架公开。现有的引擎类型(例如主体实例、物理材质、物理资产、碰撞轮廓和约束组件)使用下面的 PhysX 场景。
核心模拟功能
刚体
- 静态、动态和运动参与者;
- 盒子、球体、胶囊、凸面和三角网格碰撞几何体;
- 具有摩擦力、恢复力和密度的物理材料;
- 重力、阻尼、力、脉冲和扭矩;
- 睡眠、清醒和主动身体跟踪;
- 快速移动物体的连续碰撞检测;
- 碰撞过滤和模拟/查询形状标志;
- 接触、重叠和唤醒/睡眠通知。
场景查询
PhysX 提供了整个引擎使用的碰撞查询路径:
- 光线投射;
- 形状扫描;
- 重叠;
- 单次命中和多次命中查询;
- 对象通道、跟踪通道和配置文件过滤;
- 运动、武器、导航和游戏系统使用的同步场景查询.
查询成本取决于冲突复杂性、宽相填充、过滤器回调和结果计数。对重复的游戏查询使用简单碰撞,并避免在仅需要第一次阻止命中时请求多次命中结果。
约束
该集成通过 Unreal 的约束框架支持固定、距离、铰链、球形和 D6 式约束。可用的控件包括:
- 线性和角度限制;
- 运动和驱动;
- 断裂力和断裂扭矩;
- 约束投影;
- 受约束物体之间的碰撞启用;
- 质量和惯性标度;
- 在 Physics Assets 中创作的骨骼约束链.
角色和骨骼物理
PhysX 提供角色运动的碰撞查询和物理资源的刚体模拟。这包括布娃娃、物理动画、命中反应、身体焊接和每个身体的碰撞配置。
载具
Vite 保留了 UE4.27 PhysX 车辆堆栈,包括车轮模拟、悬架、轮胎摩擦、发动机、传动装置、差速器和传动系统配置。车辆行为是通过 UE4 项目使用的标准车辆和轮胎数据资产编写的。
破坏(Destruction)、布料(cloth)和爆炸(Blast)
Vite 物理堆栈包括以下 NVIDIA 系统:
| 特性 | 功能 |
|---|---|
| APEX Destruction(破坏) | 编写可破坏网格、支撑块、损坏和断裂事件 |
| APEX Cloth(布料) | 顶点绘制的布料约束和骨架网格物体布料模拟 |
| NVIDIA Blast(爆炸) | 破坏资产和断裂工作流程与 PhysX 后端集成 |
请参阅破坏和布料以获取创作和运行时指南。
Vite 扩展
现代工具链支持
Vite 的 PhysX 库和构建文件已针对较新的 MSVC 和 Clang 工具链进行了更新,包括当前 Vite 构建使用的 Android NDK Clang 路径。工具链更改在发布前通过物理测试和压力工作负载进行验证。
固定时间步长模拟
可选的固定时间步长路径将模拟节奏与可变渲染帧解耦,并添加渲染插值。它适用于需要稳定的模拟增量或可重复捕获的项目。有关编译时设置和集成要求,请参阅固定时间步长。
实例物理子系统
实例化子系统通过实例化网格表示大型同质刚体集,而不是每个主体一个 Actor 和组件层次结构。它适用于碎片、炮弹、环境物体和其他高计数模拟。请参阅实例物理子系统。
原生 actor 路径
已经拥有紧凑模拟状态的引擎级系统可以更接近本机 PhysX Actor 运行,并避免不必要的高级 Actor/组件工作。这是一个专门的集成路径:所有权、生命周期、转换同步、冲突过滤和拆卸仍然是调用者的责任。
配置
物理设置位于项目设置 > 引擎 > 物理下。
| 设置 | 功能 |
|---|---|
| 默认重力 Z | 世界重力; -980.0 对应 1 uu = 1 cm |
| 子步进 | 将长帧分成更小的模拟步骤 |
| 最大子步增量时间 | 一个子步处理的最大增量 |
| 最大子步数 | 一帧执行的模拟步骤的上限 |
| 在专用服务器上模拟骨架网格体 | 在服务器目标上启用骨骼刚体模拟 |
| 默认自由度 | 限制平面或有限轴游戏的运动 |
子步进
如果不进行子步进,物理场景会随着帧增量而前进。大的或可变的增量会降低接触和约束稳定性。需要时,子步执行多个较小的前进;它的 CPU 成本随着执行的子步骤数量的增加而增加。
从必须保持稳定的最快交互中选择“最大子步增量时间”,然后设置“最大子步”以限制最坏情况的工作。上限可防止慢速帧产生无限制的模拟积压。
对于固定模拟节奏而不是帧触发子步,请使用固定时间步路径。
PhysX 可视化调试器
PhysX Visual Debugger(PVD)可以检查连接的场景,包括参与者、形状、接触、约束和模拟状态。使用支持 PVD 的开发版本,在重现问题之前进行连接,并在场景包含许多尸体时限制捕获持续时间。
视口碰撞可视化对于在完整 PVD 捕获之前确认创作的几何体和过滤仍然有用。
分析
| 命令 | 显示 |
|---|---|
stat physics |
物理时序除以引擎相位 |
stat game |
游戏线程工作背景下的物理成本 |
p.NumPhysScenes |
激活的物理场景数 |
show Collision |
视窗中的碰撞几何体 |
具有代表性碰撞几何形状、刚体计数、睡眠行为和事件生成的分析。每次比较时记录物理毫秒、刚体/形状计数、激活刚体计数、求解器设置、子步骤和工作配置。
对于高刚体数,请使用相同的形状和求解器设置将基于 Actor 的标准模拟与实例子系统进行比较。