PhysX

PhysX是一套由AGEIA设计的用于处理复杂物理运算的物理处理器（PPU），如今代表一款开源的实时物理引擎SDK，是Nvidia GameWorks软件套装的一部分。

最初，支持PhysX的游戏通过由AGEIA设计的PhysX PPU扩展卡进行硬件加速。

AGEIA声称，PhysX将会让开发者在开发游戏的过程中能够直接使用复杂的物理效果，而不需要像以往那样耗费漫长的时间开发一套物理引擎。以往使用了物理引擎，还会使一些配置较低的电脑无法流畅运行游戏。AGEIA更宣称，PhysX执行物理运算的效率比市面上的CPU与软件物理处理的组合高出100倍。

在Nvidia收购AGEIA之后，专用的PhysX扩展卡停产，取而代之的是在支持CUDA的GeForce GPU上通过API使用PhysX。在这两种情况下，硬件加速可以将物理计算的任务从CPU中转移到GPU，从而使CPU能够执行其他任务。

如今，PhysX和其他物理引擎被广泛应用于许多游戏中，因为它们使得开发者无需从头编写自己的代码来实现物理模拟，例如模拟软体动力学。

## 历史

如今被称为PhysX的物理引擎起源于一个名为NovodeX的物理引擎。该引擎由瑞士公司NovodeX AG开发，该公司是苏黎世联邦理工学院（ETH Zurich）的一个衍生公司。2004年，AGEIA收购了NovodeX AG，并开始开发一种可以辅助CPU加速物理运算的硬件技术。AGEIA将这项技术命名为PhysX，其SDK也从NovodeX改名为PhysX，加速卡被称为PPU（物理处理单元）。

在开发过程中，第一个使用PhysX技术的游戏是《斯大林地铁站》（The Stalin Subway），于2005年9月在俄罗斯的游戏商店独占上架。

2008年，图形技术厂商NVIDIA收购了AGEIA。NVIDIA开始在其GeForce系列显卡上启用PhysX硬件加速功能，并最终放弃对AGEIA PPU的支持。

PhysX SDK 3.0于2011年5月发布，对其进行了大量重写，带来了诸如更高效的多线程和适用于所有支持平台的统一代码库等改进。

在2015年的游戏开发者大会（GDC 2015）上，NVIDIA将PhysX的源代码放在GitHub上，使用者需要在developer.nvidia.com进行注册。这个专有的SDK向开发者免费提供，无论是商业还是非商业用途，在Windows、Linux、macOS、iOS和Android等平台上都可以使用。

在2018年12月3日，PhysX在BSD许可证下成为开源，但此变更仅适用于计算机和移动平台。

在2022年11月8日，开源版本被更新为PhysX 5，仍然采用相同的BSD许可证。

## 特性

PhysX引擎和SDK适用于Microsoft Windows、macOS、Linux、PlayStation 3、PlayStation 4、Xbox 360、Xbox One、 Wii、iOS和Android。

PhysX是一个多线程物理模拟SDK。它支持刚体动力学、软体动力学、布娃娃系统和角色控制器、车辆动力学、粒子模拟和体积流体模拟。

## 硬件加速

### PPU

物理处理单元（PPU）是一种专门设计的处理器，旨在减轻CPU的计算负担，特别是涉及物理的计算。这概念类似于对上GPU，但在早期的计算机中，GPU用于处理矢量图形，并且延伸到3D图形。但GPU对物理处理无能为力，故目前大部分物理处理都交给CPU处理，这无疑是加重了CPU本来就不轻的负担。PhysX PPU以PCI或PCIe卡的形式由ASUS、BFG Technologies、 Dell和ELSA Technology等厂商提供给消费者。

自PhysX SDK 2.8.3版本开始，不再支持并不再生产PPU卡。AGEIA设计的PhysX PPU独立卡的最后版本大致与专用的9800GTX具有相同的PhysX性能。

#### 当年PhysX物理加速卡规格

- 内存：128 MB GDDR3 RAM（华硕据说有发行256 MB GDDR3 RAM的版本)
- 接口界面：PCI或PCI Express
- 球体碰撞能力：5.3亿次每秒（最大能力）
- 浮点运算能力：530,000次每秒（最大能力）
- 价格：220英镑 300美元 2000人民币 9500台币（估计）
- BFG推出的PhysX扩展卡售价为2000人民币

### GPU

在NVIDIA收购AGEIA之后，PhysX的开发偏离了PPU扩展卡，而是专注于现代GPU的GPGPU能力。

现代GPU非常擅长处理和显示计算机图形，其高度并行的结构使它们比通用CPU更有效地加速使用PhysX进行物理模拟。

曾经任何支持CUDA的GeForce图形卡（GeForce 8系列及以上），并至少具有32个核心和至少256MB专用图形显存的GPU都可以利用PhysX，无需安装专用的PhysX卡。不过GeForce RTX 50系列显卡不再支持Physx。

有趣的是，据说NVIDIA在当时通过第三方开发者，有意让ATI的显卡支援PhysX运算，AMD官方未对此表态。后来，AMD宣布旗下产品会被Havok物理引擎优化，它是PhysX物理引擎的竞争对手。

## NVIDIA APEX PhysX

NVIDIA在GDC 2009上介绍了APEX PhysX，它允许艺术家更高效的创作物理内容。

Nvidia APEX技术是围绕PhysX SDK构建的多平台可扩展动力学框架。它首次在2010年8月的《黑手党II》中引入。

Nvidia的APEX包括以下模块：APEX Destruction、APEX Clothing、APEX Particles、APEX Turbulence、APEX ForceField，以及2011年停止开发的APEX Vegetation。

从版本1.4.1开始，APEX SDK已被弃用。

## NVIDIA FleX

FleX是一种基于粒子的实时视觉效果模拟技术。传统上，视觉效果是使用专门的刚体、流体、服装等专用求解器创建的元素的组合制作的。由于FleX对所有对象类型都使用统一的粒子表示，它使得不同的模拟物质可以无缝地相互作用。这种统一的物理求解器是离线计算机图形的重要组成部分，其中诸如Autodesk Maya的nCloth和Autodesk Softimage的Lagoa等工具被广泛使用。FleX的目标是利用GPU的能力将这些离线应用程序的功能带入实时计算机图形领域。

## 来自Real World Technologies的批评

于2010年7月5日，Real World Technologies发表了一篇关于PhysX架构的分析。根据这篇分析，当时在PhysX应用程序中使用的大部分代码都基于x86CPU指令，没有进行任何多线程优化。这可能导致在CPU上运行PhysX代码时性能显著下降。文章建议使用SSE指令对PhysX进行重写，这可能会大大减少CPU PhysX和GPU PhysX之间的性能差距。

作为对Real World Technologies分析的回应，PhysX的产品经理Mike Skolones表示，SSE支持被抛在了后面，因为大多数游戏首先是为游戏主机开发，然后再移植到PC上。因此，即使几乎没有进行优化，现代计算机运行这些游戏的速度也比游戏机快得多，效果也更好。

NVIDIA的高级公关经理Bryan Del Rizzo解释说，多线程已经在CPU PhysX 2.x中可用，开发人员可以利用它。他还表示，自动多线程和SSE将在PhysX SDK的第3版中引入。

PhysX SDK 3.0于2011年5月发布，代表了SDK的重大改写，带来了诸如更高效的多线程和统一的代码基础等改进。

## 用法

### 游戏

PhysX技术被诸如虚幻引擎（从第3代开始）、Unity、Gamebryo、Vision Engine（从第6代开始）、Instinct Engine、Panda3D、Diesel、Torque、HeroEngine和BigWorld等游戏引擎所使用。

作为为数不多的主要物理引擎之一，PhysX被用于许多游戏中，例如巫师3：狂猎、星际战甲、杀戮空间2，辐射4、蝙蝠侠：阿卡姆骑士、行星边际2和无主之地2。这些游戏大多使用CPU来处理物理模拟。

支持硬件加速PhysX的游戏通常包含额外的效果，如可撕裂的布料、动态烟雾或模拟的粒子碎片。

### 其他软件

其他支持PhysX的软件包括：

- Active Worlds（AW），一个在Windows上运行的3D虚拟现实平台。
- Amazon Lumberyard，由亚马逊开发的3D游戏开发引擎。
- Autodesk 3ds Max、Autodesk Maya和Autodesk Softimage，计算机动画套件。
- DarkBASIC Professional（配备DarkPHYSICS升级），一个面向游戏开发的编程语言。
- DX Studio，用于创建交互式3D图形的集成开发环境。
- 由前Sony Online Entertainment开发的游戏引擎Forgelight Engine。
- Futuremark的3DMark06和Vantage基准测试工具。
- Microsoft Robotics Studio，一个用于机器人控制和模拟的环境。
- NVIDIA的SuperSonic Sled和Raging Rapids Ride技术演示。
- OGRE（通过NxOgre包装器），一个开源渲染引擎。
- Physics Abstraction Layer，一个物理模拟API抽象系统（为PhysX提供COLLADA和Scythe Physics Editor支持）。
- Rayfire，用于Autodesk 3ds Max的插件，允许碎裂和其他物理模拟
- The Physics Engine Evaluation Lab，一个旨在评估、比较和基准测试物理引擎的工具。
- 由Epic Games开发的虚幻引擎游戏开发软件。从Unreal Engine 4.26开始，PhysX已正式弃用。
- 由Unity ApS开发的Unity引擎。其DOTS（Data-Oriented Technology Stack）不使用PhysX。

## 测试软件

网站oZone3D.net已推出相关的测试软件，名为FluidMark，用来考察电脑的物理计算性能。

## 外部链接

- Official Product Site
- Projects using PhysX SDK
- "PS Meeting 2005: Sony Hooks Up with AGEIA" - IGN News Story
- The Unofficial AGEIA PhysX Links & Info Page
- Official BFG Technologies Product Site
- 动态逼真！NV超震撼物理加速视频赏析
- 部分对PhysX技术的质疑
- Official Product Site
- Techgage: AGEIA PhysX.. First Impressions
- Techgage: NVIDIA's PhysX: Performance and Status Report

## 基本资料

- 日语原文：PhysX by NVIDIA
- 作者：NovodeX AG (ETH Zurich)
- 开发者：Nvidia Corporation、(2008-至今)、AGEIA Technologies、(2004-2008)、NovodeX AG、(2001-2004)
- 源代码库：https://github.com/NVIDIA-Omniverse/PhysX (5.x)、https://github.com/NVIDIAGameWorks/PhysX (4.x)
- 编程语言：C++
- 操作系统：Microsoft Windows, macOS, Linux, PlayStation 2, PlayStation 3, PlayStation 4, Xbox 360, Xbox One, Wii, iOS, Android
- 许可协议：BSD授权条款
- 网站：开发者网站、开发文档