Wie werden eigentlich Physikengines mit der Grafikengine kombiniert?



  • Normalerweise muss doch eine Grafikengine alles darstellen, also muss sie ja auch wissen, wo und wie sich die Objekte usw.im Raum befinden und wenn man die Raumlage und Eckpunkte der Objekte nicht in getrennten Speicherbereichen haben will, dann muss ja sowohl die Physikengine, als auch die Grafikengine auf die gleichen Speicherbereiche zugreifen.

    Wie werden also Physikengine wie z.B. die Havoc Physikengine mit den Game Engines verkoppelt?
    Wie geht man da vor?

    Und ist diese Trennung in Phyikengine und Grafikengine eigentlich sinnvoll?
    Wäre eine Verschmelzung zu einer einzigen Engine nicht wesentlich performanter?



  • So weit ich weiß funktioniert das vereinfacht so(hab mal mit Bullet Physics rumgespielt):
    man übergibt Aktionen wie Rennen, Springen usw. z.B. als Impulse an die Physik Engine, welche dann Transformations-Matrizen im OpenGL bzw. DirectX style für jedes Objekt wieder ausgibt, die man nur noch OpenGL bzw. DirectX mitteilen muss.



  • Das klingt interessant.

    Und mit den übergebenen Transformationsmatrizen manipuliert man dann nur noch die 3d Objekte die für die Darstellung zuständig sind, ist das richtig?

    Würde man aber die "Physikbodys = 3d Objekte" gleichsetzen, dann würde man sich die redunante Arbeit dadurch sparen, das gleiche Objekt, wenn auch mit unterschiedlich vielen Vertexpunkten mehrmals zu tranformieren.



  • GPU und Physik schrieb:

    Würde man aber die "Physikbodys = 3d Objekte" gleichsetzen, dann würde man sich die redunante Arbeit dadurch sparen, das gleiche Objekt, wenn auch mit unterschiedlich vielen Vertexpunkten mehrmals zu tranformieren.

    Dagegen spricht:
    - Fuer die Physik wird ueblicherweise eine vereinfachte Huelle des tatsaechlichen 3d-Mesh verwendet.
    - Die Phsyik wird gerne CPU-seitig parallel zum Rendering berechnet
    - Die Positionen der Vertexdaten manuell zur GPU zu uebertragen wird laenger dauern als im Vertex-Shader eine Matrix-Multiplikation zu machen
    - Die Vertices werden zur Darstellung in den Kamera-Raum transformiert, von dem das Physik-Modul aber nichts zu wissen braucht.



  • hellihjb schrieb:

    GPU und Physik schrieb:

    Würde man aber die "Physikbodys = 3d Objekte" gleichsetzen, dann würde man sich die redunante Arbeit dadurch sparen, das gleiche Objekt, wenn auch mit unterschiedlich vielen Vertexpunkten mehrmals zu tranformieren.

    Dagegen spricht:
    - Fuer die Physik wird ueblicherweise eine vereinfachte Huelle des tatsaechlichen 3d-Mesh verwendet.

    Ich weiß.

    - Die Positionen der Vertexdaten manuell zur GPU zu uebertragen wird laenger dauern als im Vertex-Shader eine Matrix-Multiplikation zu machen

    Das könnten zukünftige auf der CPU integrierte GPUs lösen.
    Bei der PS4 wird so etwas ja AFAIK schon gemacht.

    AMD hat da extra die Möglichkeit geschaffen, dass man auf einfache Weise Daten zwischen CPU und iGPU austauschen kann.



  • GPU und Physik schrieb:

    - Die Positionen der Vertexdaten manuell zur GPU zu uebertragen wird laenger dauern als im Vertex-Shader eine Matrix-Multiplikation zu machen

    Das könnten zukünftige auf der CPU integrierte GPUs lösen.
    Bei der PS4 wird so etwas ja AFAIK schon gemacht.

    AMD hat da extra die Möglichkeit geschaffen, dass man auf einfache Weise Daten zwischen CPU und iGPU austauschen kann.

    Dass sich in Zukunft andere Mittel und Wege als sinnvoller herausstellen koennen und werden ist ja klar.
    Solang wir aber ueber die Transformation eines *statischen* Meshes mittels *einer* Matrix (4 Dot-Produkte) reden, muss man sich da gar keine Gedanken drum machen...


Log in to reply