# PhysX

PhysX ist eine quelloffene Physik-Engine des Unternehmens Nvidia. PhysX verlagert die Berechnung physikalischer Effekte in Computerspielen und Simulationssoftware auf Grafikkarten der GeForce-Serie des Herstellers. So wird der Hauptprozessor vom Aufwand dieser Berechnungen mit dem Ziel entlastet, die Ablauf- und Darstellungsgeschwindigkeit (Framerate) zu beschleunigen und/oder die Qualität der Darstellung durch zusätzliche Effekte zu erhöhen.

## Geschichte

Am Beginn der Entwicklung von PhysX stand die Physik-Engine NovodeX, entwickelt von dem gleichnamigen Schweizer Unternehmen. Die NovodeX AG, ein Spin-off der ETH Zürich, wurde 2004 von dem Halbleiterhersteller Ageia übernommen. Dieser entwickelte einen speziellen Physikbeschleuniger und vermarktete seine Hardware gemeinsam mit der Software unter dem Namen PhysX.
Im Februar 2008 übernahm der Grafikchiphersteller Nvidia Ageia und integrierte die PhysX-Engine in das hauseigene CUDA-System, um sie auf Grafikkarten der GeForce-Serie lauffähig zu machen. Damit können die Physikberechnungen auch von der Grafikkarte durchgeführt werden, was zusätzliche Physikbeschleuniger optional macht. Allerdings muss die Grafikkarte CUDA unterstützen und ein aktueller Grafikkartentreiber (bei Nvidia ab Version 177.83) installiert sein. Es ist zudem möglich, eine separate Grafikkarte nur als Physikbeschleuniger zu verwenden.
Im März 2015 kündigte Nvidia in Teilen die kostenlose Freigabe des PhysX-Quellcodes auf GitHub an, mit Beschränkung auf die CPU-berechneten Codeteile. Die auf CUDA aufbauende GPU-Variante blieb von dem Angebot ausgenommen. Interessenten müssen sich außerdem vor Freigabe bei Nvidias Entwicklerprogramm registrieren und den Nutzungsbedingungen zustimmen. Diese Einschränkungen wurden am 3. Dezember 2018 aufgehoben, womit der Quellcode nun unter einer BSD-Lizenz auf GitHub steht.

## Anwendung

Rechenintensive Vorgänge wie die Physik starrer Körper, die Simulation von Flüssigkeiten wie Wasser oder Lava, sowie das realistische Verhalten von Seilen, Haaren oder Kleidung stellen das Haupteinsatzgebiet der PhysX-Engine dar. Damit sind auch die folgenden Effekte realisierbar:
* Explosionen mit Rauch und Trümmern
* komplexe Figuren mit realistischen Bewegungen und Interaktionen
* durch Wind bewegte Dinge, z. B. Laub, Papier, Funken, Wasser etc.
* dichter, bewegte Objekte einhüllender Nebel
Neben PCs findet PhysX auch in den Spielkonsolen Wii (von Nintendo), PlayStation 3 (von Sony) und Xbox 360 (von Microsoft) Anwendung.
Anwendungsprogramme mit PhysX-Unterstützung sind:
* 3DMark06
* Dark Physics
* 3DMark Vantage
* 3D GameStudio (ab A8 integriert)
* Unreal Engine
* Unity

## Kritik

Die Website Realworldtech analysierte den PhysX-Code und prangert an, dass dieser in Verbindung mit Hauptprozessoren lediglich einen Kern zur Abarbeitung nutze. Wird aber der Grafikchip als „PhysX-Prozessor“ festgelegt, dann verpacke der GeForce-Treiber die Aufgaben automatisch in mehrere Threads, und die Bildrate schnelle in die Höhe. Außerdem nutze Nvidia lediglich veraltete x87-Befehle für Gleitkommaberechnungen, von denen Intel und AMD schon seit Anfang 2000 abraten. Effiziente SSE-Befehle, die ohne größeren Programmieraufwand eingebunden werden könnten und die Performance auf aktuellen CPUs deutlich steigern würden, nutze Nvidia bei PhysX nicht.
Daraus leitete Realworldtech den Verdacht ab, Nvidia bremse die Berechnung von PhysX-Effekten auf CPUs künstlich aus, um den GeForce-Grafikkarten ein weiteres Verkaufsargument angedeihen zu lassen.
Nvidias Senior-PR-Manager Bryan Del Rizzo wies einerseits die Vorwürfe der absichtlichen Ausbremsung der CPUs zurück, versprach aber anderseits in der PhysX-Version 3.0 automatisches Multithreading und SSE-Unterstützung.
AMDs Senior Manager of Developer Relations, Richard Huddy, sprach sich in diesem Zusammenhang dafür aus, dass PhysX hoffentlich bald zusammen mit Glide und A3D im proprietären-API-Museum landet und von offenen Implementationen wie OpenCL und DirectCompute ersetzt wird.