Zitat:
Zitat von Sensillio
Die Grafikkarten berechnen schließlich nur Effekte, nicht aber "echte" Physik!
Warum sollen die keine echte Phsik berechnen können? Die Hauptoperationen, die zur Physik- und Grafikberechnung verwendet wird sind MADD Operationen. Genau von diesen Operationen kann die 8800 GTX zum Beispiel 128 Stück pro Takt berechnen. Das ist ein echtes Fließkommemonster und lässt sich wunderbar für jegliche Art von Berechnungen im dreidimensionalen Räumen verwenden. Sei es Grafik oder Physik.
Da die Graka auch direkt Zugriff auf den Hauptspeicher besitzt und seit DX10 auch direkt mit der CPU kommunizieren kann ist es auch möglich interaktive Physik auf der Graka zu berechnen, die tatsächlich das Gameplay beeinflusst.
Mit DX9 und Havok FX ging das nur bedingt.
Zitat:
Können denn Shader überhaupt "rechnen" oder sind das nur Pipelines, die in der Architektur, die Infos an den Kern weiterleiten ??!!
Früher war es so, dass alles was die Shader berechnet haben direkt an die Grafikausgabe ging. Man konnte also Objekte berechnen und sie anzeigen, aber man konnte der CPU so ohne weiteres nicht mitteilen, wo sich die Objekte befinden.
Mit DX0 hat MS jetzt aber die Stream-Out Funktion eingeführt. Damit ist es möglich berechnete Ergebnisse der Shader an unterschiedlichen Stellen abzuzapfen bevor sie an den Monitor geschickt werden.
Diese Ergebnisse können dann zum Beisiel verwendet werden um sie erneut durch einen anderen Shader laufen zu lassen. Es sind jetzt also multiple und rekursive Shaderdurchläufe möglich, was ganz interessante Filtermethoden ermöglicht.
Davon aber mal abgesehen kann man die berechneten Ergebnisse natürlich auch abzafen und an die CPU übermitteln und genau das kann man sich bei der Physikberechnung zu Nutze machen.
Der Shader berechnet die Physik, die Ergebnisse werden abgegriffen und der CPU zur Verfügung gestellt.
Zitat:
Sind diese überhaupt dazu geeignet um soclhe Aufgaben zu übernehmen ?
DX10 Karten sind heute fast in der Lage den kompletten x86 Befehlssatz zu emulieren. Du könntest also praktisch jedes Programm auf der Graka laufen lassen, wenn du es möchtest. Natürlich wäre das höchst ineffektiv, weil die GPU nicht für diese Operationen ausgelegt ist.
Ihre Stärken stecken in der Berechnung von 3x3 Matrizen, die sowohl zur Grafik- als auch zur Physikberechnung benötigt werden.
Zitat:
Ich dachte immer, dass die dargestellten 3D-Infos , welche die Grafikkarte ja errechnet in ihrer Struktur ganz anders zu bearbeiten sind, als komplexe Algorithmen, die ja bei Physik aufkommen...
Bei Graik gibt es nicht soviele Variablen, oder ?!
Im Grunde genommen berechnen beide Arten der Berechnungen nur Punkte im 3D-Raum. Beide berechnen nur Gittermodelle. Die Grafikengine interessiert es, ob sich Linien an bestimmten Stellen kreuzen und die Physikengine interessiert, ob sich Kanten von Objekten kreuzen. (Mal ganz grob ausgedrückt). Im Grunde genommen sind es die gleichen Operationen, die duchgeführt werden.
Zitat:
Dadurch kann also ein "Overhead" entstehen, der zu Lags führt ??
Genau so ist es. Deshalb empfiehlt Ageia in ihem SDK auch, die Physiksimulation mit mindestens 60 fps laufen zu lassen, damit nicht all zu viel Zeit vergeht zwischen Berechnung der Objekte und dem Darstellen des Bildes.
Zitat:
Und ein Kern der MainCPU allein reicht nicht aus, um die Physik in ähnlich effizienter Weise zu berechnen ! Warum eigtl. nicht ???
CPUs sind Multi Purpose Prozessoren, die optimal sind, wenn es um vielfältige Berechnungen geht.
Eine CPU hat viel mehr Befehle mit denen sie viel mehr Möglichkeiten hat etwas zu berechnen. Dadurch, dass es mehr Befehle sind, müssen diese auch länger sein um sie unterscheiden zu können. Die CPU braucht also schon alleine deswegen schon mehr Takte für eine Operation, weil die Befehlsvielfalt viel höher sind.
Des Weiteren ist eine CPU dafür ausgelegt unvorhersagbare Befehlsfolgen effizient abarbeiten zu können. Programme können auf viele unterschiedliche Arten ablaufen und man weiß nie, was das Programm als nächstes macht. Die CPU macht außerdem noch sehr viele Berechnungen, die sie wieder verwerfen muss, wenn sich rausstellt, dass sie die falsche Richtung eingeschlagen hat. Dabei geht eine Menge Rechenpower "verloren".
Es ist schwierig zu erklären, aber Branch Prediction und Pipelines dürften gute Stichworte für Wikipedia oder Google sein. :)
Warum ist die GPU also schneller bei Grafikberechnungen, obwohl sie doch langsamer getaktet ist? Nun. Zum Einen ist der Befehlssatz stark reduziert und beinhaltet nur das Nötigste. Bei DX10 hat sich das schon wieder etwas geändert. Die sind nicht mehr ganz so effektiv, da sie vielseitiger sind.
Zweitens lassen sich Grafikberechnungen viel besser vorhersagen. Die muss sich also nicht mit Cache-Algorithmen, Branch Prediction und sowas rumquälen, wie die CPU.
Die rechnet am Stück weg und muss keine ihrer Berechnungen verwerfen, so wie es die CPU tut.
Zitat:
Was DIrectPhysics von Microsoft angeht - so glaube ich fast, dass diese auf HArdware setzen wird
Der Sinn dieser Schnittstellen ist ja, ass sie hardwaeunabhängig sind.
Das ist genau wie bei Direct3D. Der Programmier sagt nur. "Zeichne hier ein Dreieck". DirectX leitet dass dann an den Graka Treiber weiter und der weiß dann, was er damit machen soll, ganz egal, ob da eine ATi Karten, eine nVidia Karte oder sonst etwas hinter steckt.
Zitat:
Gerade bei Crysis sieht das mit den Palmen usw... schon echt schick aus, nur eines finde ich nicht so doll... die Explosionen der Häuser, da fliegen zwar Einzelteile weg (in den Videos mal drauf achten)
Hehe. Das ist ein gutes Beispiel.
Die Palmenbewegungen werden auf der GPU mittels eines grafischen Ticks berechnet. Die Modelle bewegen sich nicht wirklich. Die Blätter sind starr und werden mit einer Art Physiktextur belegt. Der rote Farbanteil der Textur legt fest, wie stark sich das Blatt nach oben oder unten biegen soll. Die Farbe Grün legt fest, wie stark es seitlich geneigt werden soll und Blau macht auch irgend etwas, was ich jetzt vergessen habe.
Durch verändern der Farben kann man nun das blatt also hin und herbewegen, so wie man es möchte.
Die Graka nimmt nachher diese Textur und verzerrt das Bild so, dass es aussieht, als ob sich die Blätter biegen würden. Tatsächlich sind die Modelle aber immer noch starr.
Bei den Gebäuden wird die Physik auf der CPU berechnet. Deswegen ist sie auch etwas gröber und beinhaltet nicht so viele Objekte. Du musst bedenken, dass mit steigender Objektanzahl der Rechenaufwand exponenziell ansteigt, da jedes weitere Objekt mit jedem anderen auf Kollision überprüft werden muss. Ein Objekt mehr und du hast sofort wieder hunderte Kollisionsprüfungen mehr durchzuführen.
Natürlich gibt es auch da Tricks um das deutlich zu minimieren, aber das Problem bleibt bestehen. Der Rechenaufwand steigt deutlich schneller an, als die Objektanzahl.