NVIDIA PhysX für GeForce - Grafikkarte als Physikbeschleuniger (2/14)
Wozu ist PhysX gut? Was kann man mit PhysX machen?
Sicher kann sich nicht jeder vorstellen was PhysX nun eigentlich genau macht,
aber das Konzept ist zum Glück recht einfach zu erklären. PhysX ist - ähnlich
Wie DirectX für 3D - eine Schnittstelle/Bibliothek für physikalische
Berechnungen. Es gibt ganz typische Beispiele für solche Berechnungen die immer
wieder auftauchen und auch in den Demos zu PhysX immer wieder gezeigt werden.
Beispiel hierfür sind:
- Das fließen von Wasser, Wellen, Wasserspritzer
- Bewegungen von weichen Objekten wie Stoff, eine wehende Fahne, Ein Decke
die über ein Objekt gelegt wird usw.
- Das "Fliegen" oder auch "Zerbrechen" von Gegenständen. Explosionen,
Zusammenbrechende Häuser oder Wände, Fallende Bäume usw.
Es gibt Unmengen weitere Beispiele, die man sich selbst ausmahlen kann und es
leuchtet schnell ein, dass all diese Dinge Spielen mehr Realität verleihen. Es
macht sicherlich mehr Spaß in einem Spiel durch eine "lebendige" Welt zu laufen,
als in einer starren Umgebung, die sich nie verändert zu spielen. Kurz gesagt
PhysX soll eigentlich nur eins, den Spaß Faktor erhöhen. Wenn man will kann man
PhysX vielleicht am besten noch mit einem "tollen Sound" im Spiel vergleichen.
Was wäre ein Computerspiel ohne Ton - richitg - langweilig. Vielleicht werden wir
bald genauso über Spiele ohne "Physik" denken.
Update 6.8.2008
Um diese Effekte in Spielen zu Realisieren bietet NVIDIA das PhysX SDK an
und dieses ist nicht etwa auf GeForce Karten beschränkt. PhysX funktioniert
genauso immer noch mit der alten AGEIA Physik Karte oder auch mit der
normalen CPU. Mittlerweile werden ja auch Anstrengungen unternommen PhysX
auch auf ATI Radeon Karten laufen zu lassen, was die Attraktivität von PhysX
sicherlich noch einmal steigern würde.
![](i/diagramm1.png)
Der Knackpunkt bei all dem liegt in der Leistungsfähigkeit der Hardware
in Bezug auf Physikberechnungen. Hierbei handelt es sich oft um massiv
parallelisierbare Berechnungen und diese können von einer modernen GPU
erheblich schneller durchgeführt werden als von einer CPU. Einige
Physikberechnungen sind auch nicht parralelisierbar sonder eher serieller
Natur und können daher auf einer schnellen CPU schneller berechnet werden.
PhysX steuert hierbei je nach Art der Effekte wo die Berechnungenausgeführt
werden.
PhysX kann sich
auch der Leistung des Systems anpassen. Expolodiert zum Beispiel ein Gebäude
in viele Teile, so kann die Anzahl der Teile - von denen ja jedes einzelne
berechnet werden muss - variiert werden. so könnte das gleiche Gebäude bei PhysX berechnung auf der GPU in hundert Teile explodieren, während es bei
CPU Berechnung in vielleicht nur 10 Teile explodieren würde. Diese Umstand
sollte immer im Hinterkopf behalten werden, denn er spielt eine große Rolle
bei der Ingame Performance.
Das PhysX SDK stellt dem Spieleprogrammierer also verschiedene Effekte
zur Verfügung, die dann auf den verschiedenen Hardware Platformen umgesetzt
werden. Und je nachdem wie Leistungsfähig diese Plattform ist, variiren auch
die Effekte die dargestellt werden können.
![](i/diagramm2.png)
Würde man nicht so vorgehen wäre es in Zukunft extrem schwer spiele für "Jederman"
zu programmieren, denn man könnte sonst PhysX nur ein oder Ausschalten.
Gamer mit weniger moderner Hardware müssten komplett auf die Effekte
verzichten weil sonst die Gesamtperformance zu schlecht würde und sie nur
noch eine Einzelbildschaltung sehen könnten. So aber lässt sich auch für
diese PhysX aktivieren nur eben mit weniger Effekten.
Was kann und tut PhysX nicht!
Wie wir anfangs bereits sagten, mit PhysX werden über Hardware Berechnung
zusätzliche Inhalte bereit gestellt, die auf Physik basieren. PhysX kann diese
Dinge nicht etwa Anzeigen oder sie "automatisch" in alten Games erzeugen.
Genau hier liegt auch der Punkt wieso PhysX die Performance eher
verschlechtert, denn das was PhysX berechnet muss auch vorbereitet und angezeigt
werden und dafür ist die 3D Karte zuständig. Wenn also mit PhysX etwas
Explodiert und in 1000 Teile zersplittert, dann berechnet PhysX wo und wie diese
Teile herumfliegen. Die Grafikkarte muss dies alles dann auch anzeigen. Ohne
PhysX gab es die 1000 Teile überhaupt nicht und das Auto wäre evtl. nur komplett
oder in 5 Teilen herumgeflogen.
Es leuchtet ein, dass, je komplexer die Situation wird, dies der Grafikkarte
ordentlich zu schaffen macht. Genau aus diesem Grund macht es auch meist keinen
Sinn "3D Performance" mit und ohne PhysX zu vergleichen, denn in der Regel
werden hier komplett andere 3D-Szenen angezeigt, es sei den in speziellen
Benchmarks, die die Physik Berechnung in gleicher weise über die CPU
durchführen. Die massiven Performance Einbrüche, die dann dort zu sehen sind,
basieren aber darauf, das die CPU so stark ausgelastet ist und haben eigentlich
wenig mit der 3D Karte bzw. Performance zu tun. Prinzipiell könnte man hier also auch direkt auf
die 3D Darstellung verzichten und nur Physikberechnungen benchmarken. Genau das
macht übrigens der neue 3DMark Vantage im CPU Test 2.