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授權條款
- 網站：開發者網站、開發文檔