HOT schrieb:
Direktzugriffe auf den RAM von der GraKa aus geht, seit dem es DMA gibt. Jedes PCI Gerät kann auf den RAM zugreifen.
Stimmt. Du hast recht.
Seit DX10 ist es dank Stream-Out Funktion aber erstmals möglich per Shader berechnete Daten abzugreifen. Bei DX9 war das nur bedingt der Fall. Dort waren die Shader nur unidirektional und es konnten keine großen Datenmengen zurück an die CPU übermittelt werden.
Auch ein heutiger Grafikchip kann problemlos Integer rechnen.
Verwenden die dafür aber nicht Fließkommazahlen? Ich war immer der Meinung, dass sie keine reinen Ganzzahlberechnungen durchführen können. Ich wollte damit aber auch eigentlich nur sagen, das DX10 Chips in ihrem Umfang deutlich erweitert wurden um auch Aufgaben abseits der Grafik erledigen zu können.
Du musst bedenken, dass Physik den Detailgrad der Grafik übel erhöht, was dann wieder die Grafik belastet. Die Physik ist nicht der Flaschenhals, kann aber indirekt beim Rendern zu einem werden.
Das kommt natürlich auf die Physik an. Wenn man tausende kleine simple Rigit Bodies simuliert und anschließend rendern will, dann hat die Graka natürlich jede Menge zu tun.
Simuliert man aber Softbodies, Wasser oder aber auch komplexe Rigid Bodies, dann liegt die Hauptbelastung bei der Physikberechnung und die Graka kann sich entspannt zurück lehnen.
Kann ja sein, dass der PhysX spezielle Zugrifssverfahren besitzt. Das spräche aber eher für die bessere Eignung des Chips.
Jo. Das soll ja auch ein Pro-Argument für den PhysX sein. Ich will ja nicht alles schlecht machen.
Wenn ein Grafikchip Physikdaten ausrechnet, muss die CPU das zu rechnende an den Grafikchip genauso verteilen und die Ergebnisse entgegennehmen
Jep. Aber dort sind nur zwei Partner beteiligt, zwischen denen vermittelt werden muss. Bei der PPU, Torenza oder sonstigen CoProzessoren entsteht immer ein erhöhter Aufwand für die CPU, da sie die Koordination aller drei Komponenten übernehmen muss.
Ob die CPU jetzt Physikberechnungen an einen Grafikchip oder einen Physikchip weitergibt und die Ergebnisse erhält, spielt keine Rolle.
Die Sache ist nur die, dass die Graka ihre Berechnungen direkt verwenden kann ohne sie noch einmal an die CPU liefern zu müssen.
Es ist ja nicht so, als ob die CPU die Physikberechnungen der GPU übergibt, diese die Berechnungen durchführt, die Daten an die CPU zurück liefert und die CPU dann erneut die aktuelle Szene an die GPU zum Rendern überträgt.
Stattdessen übergibt die CPU die zu berechnenden Daten an die GPU und diese bindet die auch sofort in die Szene ein, wie das auch jetzt schon bei DX9 der Fall ist. Die CPU muss davon noch nicht einmal etwas mitbekommen.
Lediglich, wenn etwas interaktives geschieht bekommt die CPU eine Rückmeldung von der GPU, damit diese darauf reagieren kann. So lange die Objekte in der Szene das Spielgeschehen nicht beeinflussen braucht die CPU auch nichts darüber zu wissen.
Nein, so wie du dir das vorstellst geht das eben nicht! Wo sollen deiner Meinung nach die fertig berechneten Physikdaten denn hin? An den Monitor oder was?
Wieso denn nicht? Die Informationen über die Objekte liegen ganz allein auf der Grafikkarte. Warum sollte die CPU darüber bescheid wissen?
Solange es das Spielgeschehen nicht beeinflusst, sondern nur die Grafik kann die CPU sowieso nichts mit den Daten anfangen.
Die Engine läuft auf der CPU, nirgendwo sonst! Die CPU gibt Daten, die sie nicht rechnen soll, an den Grafik/Physikchip weiter und nimmt die fertigen Berechnungen wieder entgegen.
Ich verstehe immer noch nicht, warum die Physik-Engine nicht völlig losgelöst von der CPU laufen soll.
Die CPU sagt der GPU lediglich, was für Objekte die Szene enthalten soll und wo sie sich beim Start befinden und von da an übernimmt die GPU alle weiteren Berechnungen und zeichnet sie auch sofort.
Wozu muss die CPU wissen, was die Graka da gerade berechnet und darstellt? Sie weiß ja auch nicht, welche Farbe der Pixel x,y hat. Das weiß nur die Graka.
Es kommt darauf an, was einem der Grafikchipentwickler für Möglichkeiten an die Hand gibt. Die schreiben an sowas rum. M$ schreibt an sowas als DX Standard rum. AGEIA ist da schon sehr viel weiter.
Man braucht ja nicht unbedingt eine Schnittstelle von den Grafikchip-Herstellern oder von MS. Das bekommt man selbst auch ganz normal per HLSL sehr gut hin. Obwohl eine Art DirectPhysics natürlich komfortabler wäre. So weit ich weiß arbeitet MS auch schon daran.
Was Crytek da letztendlich nutzt wird sich zeigen. Im Moment sind die technischen Details von Crysis eher undurchsichtig und die Infos dazu basieren mehr auf Gerüchten und Halbwahrheiten von Leuten, die nicht verstandan haben, was sie da aufgeschnappt haben.
Die Physikengine wurde einmal in einem Interview von einem Mitarbeiter etwas genauer erläutert. Leider finde ich die Quelle nicht mehr.
Die arbeiten mit ein paar interessanten Tricks. Wenn sich die Blätter zum Beispiel im Wind bewegen, dann tun die Modelle das nicht wirklich. Die sind absolut starr. Stattdessen werden alle Objekte noch mit einer Art Krümmungstextur belegt. Der Grünanteil der Textur definiert, wie stark das Blatt hoch oder runter gebogen sein soll, rot legt fest, wie stark das Blatt zu den Seiten gebogen sein soll und blau hat auch noch irgend etwas festgelegt, was ich jetzt vergessen habe.
Um jetzt die Blätter biegen zu könne müssen lediglich die Farben der Texturen, je nach Windrichtung und anderen Einflüssen geändert werden und der Shader rendert es nachher so, als ob die Objekte gekrümmt wären.
Die CPU interessiert es letztendlich wenig, wie die Blätter im Wind hin und her schwingen. Für sie stehen die Bäume still.