Frage

Ich habe vor kurzem ein Teil der Physik-Engine im Vergleich gibt für Simulation und Entwicklung von Spielen. Einige sind kostenlos, einige Open-Source sind, einige kommerzielle sind (1 sogar sehr kommerziell $$$$). Havok, Ode, Newton (aka oxNewton), Geschoss, PhysX und "roh" build-in Physik in einigen 3D-Engines.

Irgendwann kam ich nach Abschluss oder Frage: Warum sollte ich alles andere als NVidia PhysX, wenn ich den Einsatz seiner erstaunlichen Leistung machen kann (wenn ich es brauchen) aufgrund GPU-Verarbeitung? Mit Zukunft NVidia-Karten kann ich weitere Verbesserung unabhängig von den regulären CPU-Generation Schritten erwarten. Das SDK ist kostenlos und es ist für Linux zur Verfügung. Natürlich ist es ein bisschen von Vendor Lock-in und es ist nicht Open Source.

Was ist Ihre Ansicht oder Erfahrung? Wenn Sie jetzt mit der Entwicklung beginnen würde, würden Sie mit dem oben zustimmen?

cheers

War es hilfreich?

Lösung

Disclaimer: Ich habe noch nie verwendet, PhysX, meine Berufserfahrung zu Einschuss beschränkt, Newton und ODE. Von diesen dreien ist ODE mein Favorit bei weitem; es ist die numerisch stabil und die andere beide haben Reifen Fragen (nützlich Gelenke nicht implementiert, rechtliches Gelenk / Motor-Kombinationen in undefinierter Weise verhalten, und c).

anspielte Sie auf die Vendor Lock-in Problem in Ihrer Frage, aber es lohnt sich zu wiederholen: Wenn Sie PhysX als alleinige Physik-Lösung verwenden, die Menschen AMD-Karten verwenden wird Ihr Spiel nicht in der Lage zu laufen (ja, ich weiß, es kann gemacht werden arbeiten, aber es ist nicht offiziell oder von NVIDIA unterstützt). Eine Möglichkeit, dies zu umgehen ist eine Failover-Engine zu definieren, mit ODE oder etwas auf Systeme mit AMD-Karten. Dies funktioniert, aber es verdoppelt Ihre Arbeitsbelastung. Es ist verlockend zu glauben, dass Sie in der Lage sein werden, die Unterschiede zwischen den beiden Motoren hinter einer gemeinsamen Schnittstelle und schreiben Sie den Großteil Ihres Spiel-Physik-Code einmal zu verstecken, aber die meisten Ihre Probleme mit Spiel-Physik im Umgang mit den Eigenschaften Ihrer besonderes sein Physik-Engine, auf Werte für Dinge wie Kontaktreibung und Restitution zu entscheiden. Diese Werte haben keine konsistente Bedeutung für Physik-Engines und (meist) nicht formal abgeleitet werden, so dass Sie stecken zu finden, gut aussehende, spielbare Werte durch das Experiment. Mit PhysX plus ein Failover Sie tun alles, was scut Arbeit zweimal.

Auf einer höheren Ebene, ich glaube nicht, dass die Stream-Verarbeitungs APIs noch fertig gebacken ist, und ich würde nur ungern ein, bis zumindest zu begehen, haben wir, wie die Reaktion der Kunden von Intel Larrabee Formen der Menschen-Designs.

So weit von PhysX als die offensichtliche Wahl für High-End-Spiele-Entwicklung zu sehen, würde ich sagen, es sollte vermieden werden, es sei denn, entweder Sie nicht denken, Menschen mit AMD-Karten einen signifikanten Anteil des Spielerbasis bilden (höchst unwahrscheinlich ) oder Sie haben genug Codierung und QA Arbeitskräfte zwei Physik-Engines zu testen (plausibler, obwohl, wenn Ihr Unternehmen, dass wohlhabende ist ich gute Dinge über Havok) gehört habe. Oder ich denke, wenn Sie ein Physikspiel mit Leistungsanforderungen entworfen haben, so intensiv, dass nur Physik-Streaming können Sie erfüllen - aber in diesem Fall würde ich Ihnen raten, eine Band zu gründen und lassen Moores Gesetz nicht sein Ding für ein Jahr oder zwei.

Andere Tipps

Ein Anfang 2013 Update Antwort: Ich entwickle für das, was ich als den drei großen Betriebssystem: Linux, OS X, MS. Ich entwickle auch mit den drei großen Physic Bibliotheken. PhysX, Havok, Kugel

In Bezug auf PhysX, ich habe vor kurzem einige Tests mit der neuesten Version 3.2.2 ab dem Zeitpunkt des Schreibens dieses Artikels ist. Meiner Meinung nach reduziert nVidia wirklich die Wirksamkeit der Bibliothek. Die größte ist der Mangel an Beschleunigung für starren Körper. Die lib beschleunigt nur Partikel und Tuch. Auch Schnittstelle diejenigen nicht mit allgemeinen starren Körper. Ich bin völlig verwirrt von nVidia dies zu tun, da sie ein riesigen Marketing-Laufwerk schieben GPU-beschleunigten Anwendungen haben, auf wissenschaftliche Berechnungen mit einer großen Antriebskraft mit Schwerpunkt Physik-Simulation zu sein.

Während also meine Erwartungen des Königs der Physik sim sein PhysX, Havok und Kugel in dieser Reihenfolge ich die Rückseite in Wirklichkeit zu sehen. Kugel hat lib 2.8.1 mit einer Abtastung von OpenCL Träger freigesetzt. Kugel ist eine relativ kleine lib mit großzügigen Lizenzierung. Ihr Ziel ist es Release zu haben 3 mit voll integrierten OpenCL Starrkörperbeschleunigung.

Ein Teil der Kommentare Vortrag über mehrere Codepfade. Meine Meinung nach ist dies nicht allzu große Sache ist. Ich unterstütze bereits drei OSes mit minimaler Fest Code-Unterstützung (zum größten Teil Einfädeln und nicht betriebssystemspezifische Code verwenden, verwende C ++ und std lib Vorlagen). Es ist ähnlich für die Physik-Bibliotheken. Ich benutze eine gemeinsam benutzte Bibliothek und abstrakte eine gemeinsame Schnittstelle. Das ist in Ordnung, weil die Physik nicht viel ändern;) Sie werden nach wie vor eine Simulationsumgebung einrichten müssen, verwalten Objekte, macht Iterationen in der Umwelt, aufzuräumen, wenn Sie fertig. Der Rest ist Blitz, in der Freizeit durchgeführt.

Mit dem Aufkommen von OpenCL in Mainstream-Bibliotheken (nVidia Cuda ganz in der Nähe ist - siehe Einschuss OpenCL-Demos). Die Physik Plugin Arbeit schrumpft

Also, von vorne anfangen und nur mit Physik-Modellierung betroffen? Sie können mit Kugel nicht schief gehen. Kleine, flexible Lizenz (kostenfrei), ganz in der Nähe der Produktion bereit OpenCL, die Cross-Plattform über die großen drei OS und GPU-Lösungen sein wird.

Good Luck!

Sie können diese interessant finden:

http://www.xbitlabs.com/news/video/display /20091001171332_AMD_Nvidia_PhysX_Will_Be_Irrelevant.html

Es ist voreingenommen ... es ist im Grunde ein Interview mit AMD ... aber es macht einige Punkte, die ich denke, sind in Ihrem Fall eine Überlegung wert.

Aufgrund der Probleme zeigte David Seiler aus, Physik-Engines einige Zeit in der Zukunft Umschalten kann ein großes / unüberwindliches Problem sein ... vor allem, wenn das Gameplay fest an die Physik gebunden ist.

Wenn Sie also wirklich Hardware-beschleunigte Physik in Ihrem Motor wollen NOW, für Physx gehen, aber bewusst sein, dass, wenn Lösungen wie die von AMD in diesem Artikel postulierte verfügbar werden (sie absolut wird aber sie sind hier noch nicht), werden Sie mit unangenehmen Entscheidungen konfrontiert werden:

1) umschreiben Ihres Motor Namen der neuen Cross-Plattform-Hardware-beschleunigte Physik-Engine) verwenden (einzufügen, möglicherweise die Dynamik des Spiels in einem schlechten Weg zu ändern

2) weiterhin nur mit Physx, völlig zu vernachlässigen AMD Benutzer

3) versuchen Physx auszukommen AMD GPUs zu arbeiten (blech ...)

Abgesehen von Davids Idee, eine CPU-Physik-Engine als Ausweich der Verwendung (tun zweimal die Arbeit und die Herstellung von 2-Motoren, die verhalten sich nicht identisch) Ihre einzige andere Möglichkeit ist reine CPU Physik zu verwenden.

Wie jedoch Sachen wie OpenCL Mainstream wird wir, dass einzuarbeiten sehen ODE / Kugel / kin beginnen kann ... IOW, wenn Sie es codieren jetzt mit ODE / Kugel / kin Sie vielleicht (wahrscheinlich irgendwann werden) erhalten die GPU-Beschleunigung für „frei“ später (keine Änderungen an Ihrem Code). Es wird noch etwas anders mit der GPU-Version (ein unvermeidbares Problem wegen des Schmetterlingseffektes und Unterschiede in Gleitkommaoperationen Implementierung) verhalten, aber zumindest werden Sie die ODE / Kugel / kin Gemeinschaft haben mit Ihnen zu arbeiten, diese Lücke zu reduzieren .

Das ist meine Empfehlung: eine Open-Source-Physik-Bibliothek verwendet werden, die zur Zeit nur die CPU verwendet, und warten, bis es den Einsatz von GPUs via OpenCL, CUDA, ATI Stream Sprache zu machen, usw. Die Leistung wird schnell schreien, wenn das passiert, und Sie finden sich Kopfschmerzen speichern.

Der hypothetische Nutzen zukünftiger Grafikkarten ist alles schön und gut, aber es wird auch zu zukünftigem Nutzen von zusätzlichem CPU-Kern sein. Können Sie sicher sein, dass zukünftige Grafikkarten immer freie Kapazitäten für die Physik haben?

Aber wahrscheinlich der beste Grund, wenn auch ein wenig vage in diesem Fall ist, dass die Leistung ist nicht alles. Wie bei jeder 3rd-Party-Bibliothek, Sie unterstützen müssen können und dass Code-Upgrade für die kommenden Jahre, und Sie werden sicherstellen wollen, dass die Schnittstellen angemessen sind, ist die Dokumentation gut, und dass sie die Fähigkeiten haben, die Sie erforderlich ist.

Es gibt auch mehr mathematische Probleme wie einige APIs sein kann stabilere Gleichung bietet die Lösung und dergleichen, aber ich werde Kommentar hinterlassen auf, das zu einem Experten.

ich verwendet habe, ODE und jetzt mit PhysX . PhysX macht den Aufbau Szenen einfacher und (meine persönliche Meinung) scheint realistischer, aber es für PhysX keine ausreichende Dokumentation ist; in der Tat kaum eine Dokumentation überhaupt. Auf der anderen Seite, ODE ist Open Source und es gibt viele Dokumente, Tutorials usw. PS: Mit GPU Beschleunigung hilft mir und meinen Kollegen deutlich; wir sind mit APEX Zerstörung und PhysX Partikel.

PhysX arbeitet mit nicht-nVidia-Karten, es funktioniert einfach nicht beschleunigt. Verlassen sie in der gleichen Position sind die anderen Motoren mit zu beginnen. Das Problem ist, wenn Sie eine physikalische Simulation haben, die mit Hardware-Physikbeschleunigung nur praktikabel ist.

, wenn alle Ihren Code massiv paralelizable ist, dann gehen sie!

für alles andere, GPUs sind völlig unzureichend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top