Wieviele Dreiecke bildet die GPU, wenn ein 3d Objekt in ein anderes Objekt eintaucht?
-
Mal ein Beispiel.
Man stelle sich eine rechteckige Fläche vor, diese kann man in 2 Dreiecke aufteilen.
Nun setzte man auf diese Fläche einen statischen Würfel.
Setzt man die eine Seite des Würfels genau auf die Anhöhe der Fläche, dann macht die GPU daraus 14 Dreiecke. Daher hat man sich in Spielen wie z.B. Quake eines Tricks bedient.
Wenn man den Würfel leicht über der Fläche schweben lässt, dann sind es nur 4 Dreiecke.Dies galt für statische Szenen.
Wie sieht das aber für dynamische Szenen aus, also bei der der 3d Würfel beweglich ist und nicht statisch mit der Hintergrundszene verknüpft ist?Wieviele Dreiecke werden da gebildet, wenn
1. der Würfel die Fläche berührt
2. in die Fläche eintaucht?
-
jonas7 schrieb:
Mal ein Beispiel.
Man stelle sich eine rechteckige Fläche vor, diese kann man in 2 Dreiecke aufteilen.
Nun setzte man auf diese Fläche einen statischen Würfel.
Setzt man die eine Seite des Würfels genau auf die Anhöhe der Fläche, dann macht die GPU daraus 14 Dreiecke.nope, die Position der Dreiecke relativ zueinander hat absolut keinen Einfluss auf die Anzahl der Dreiecke die tatsächlich gerendert werden. Die GPU bekommt einen Batzen Dreiecke hingeworfen und tut dann nichts anderes, als genau diese Dreiecke zu rendern (jetzt mal von ein paar für die Frage hier irrelevanten Details wie z.B. Clipping abgesehen).
jonas7 schrieb:
Wieviele Dreiecke werden da gebildet, wenn
1. der Würfel die Fläche berührt
2. in die Fläche eintaucht?In allen diesen Fällen immer gleich viele...
-
dot schrieb:
jonas7 schrieb:
Mal ein Beispiel.
Man stelle sich eine rechteckige Fläche vor, diese kann man in 2 Dreiecke aufteilen.
Nun setzte man auf diese Fläche einen statischen Würfel.
Setzt man die eine Seite des Würfels genau auf die Anhöhe der Fläche, dann macht die GPU daraus 14 Dreiecke.nope, die Position der Dreiecke relativ zueinander hat absolut keinen Einfluss auf die Anzahl der Dreiecke die tatsächlich gerendert werden. Die GPU bekommt einen Batzen Dreiecke hingeworfen und tut dann nichts anderes, als genau diese Dreiecke zu rendern (jetzt mal von ein paar für die Frage hier irrelevanten Details wie z.B. Clipping abgesehen).
Dann ist es eben die Engine die bei einem statischen Level daraus 14 Dreiecke macht.
Meine Frage ist nun, wie das bei dynamischen Objekten ist.
jonas7 schrieb:
Wieviele Dreiecke werden da gebildet, wenn
1. der Würfel die Fläche berührt
2. in die Fläche eintaucht?In allen diesen Fällen immer gleich viele...
Auf dynamische Objekte bezogen?
-
jonas7 schrieb:
dot schrieb:
jonas7 schrieb:
Mal ein Beispiel.
Man stelle sich eine rechteckige Fläche vor, diese kann man in 2 Dreiecke aufteilen.
Nun setzte man auf diese Fläche einen statischen Würfel.
Setzt man die eine Seite des Würfels genau auf die Anhöhe der Fläche, dann macht die GPU daraus 14 Dreiecke.nope, die Position der Dreiecke relativ zueinander hat absolut keinen Einfluss auf die Anzahl der Dreiecke die tatsächlich gerendert werden. Die GPU bekommt einen Batzen Dreiecke hingeworfen und tut dann nichts anderes, als genau diese Dreiecke zu rendern (jetzt mal von ein paar für die Frage hier irrelevanten Details wie z.B. Clipping abgesehen).
Dann ist es eben die Engine die bei einem statischen Level daraus 14 Dreiecke macht.
Denkst du da jetzt gerade an eine konkrete Engine/Anwendung die das offenbar so macht oder worum genau geht es dir!?
-
Wie schon gesagt, bei der Quake Engine wurde es so gemacht und ich wollte jetzt wissen, wie das bei dynamischen Objekten wäre.
-
jonas7 schrieb:
Wie schon gesagt, bei der Quake Engine wurde es so gemacht und ich wollte jetzt wissen, wie das bei dynamischen Objekten wäre.
Ok, du beziehst dich also offenbar auf den BSP-basierten Painters Algorithmus für das Rendern der Map-Geometrie in der Quake Engine!? Was genau willst du jetzt wissen; wie das bei dynamischen Objekten damals in der Quake (1?) Engine funktioniert hat!? Denn damit, wie man das heutzutage auf einer GPU macht, hat das überhaupt nichts zu tun. Heutzutage lautet dein Stichwort Z-Buffer...
Der Source Code der Quake Engine ist übrigens frei einsehbar: https://github.com/id-Software/Quake
Good Read zum Thema: http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/ramblings-in-realtime-chapter-1-inside-quake-r981
-
jonas7 schrieb:
Dann ist es eben die Engine die bei einem statischen Level daraus 14 Dreiecke macht.
Engines die BSP Bäume verwenden tun das z.B.
Hat aber mit der GPU nix zu tun, das originale Dreieck das zerteilt wurde existiert dabei normalerweise nichtmal mehr auf dem Install-Datenträger -- es wurde im Build-Prozess des Spiels bereits vernichtet.jonas7 schrieb:
Meine Frage ist nun, wie das bei dynamischen Objekten ist.
Und die hat dir dot beantwortet. Was war daran jetzt unverständlich?
Nochmal: abgesehen von Clipping etc. rendert die GPU einfach das was ihr gegeben wird. Durchdringungen bzw. allgemein Verdeckungen werden dabei über den Z-Buffer gehandhabt. Wenn sämtliche Dreiecke die sich einen Pixel teilen von hinten nach vorne gerendert werden, wird dabei auch wirklich für jedes Dreieck der Pixelshader neu ausgeführt.
Weswegen es sich auch auszahlen kann seine Objekte grob von vorne nach hinten zu sortieren, damit der Pixelshaderdurchlauf für die verdeckten Dreiecke über Early-Z verhindert werden kann.
Bzw. Deferred Shading schlägt in die selbe Kerbe: der erste Pass, der auch für Fragments die dann eh wieder "übermalt" werden ausgeführt werden muss, ist relativ billig. Die teuren Lichtberechnungen werden dann nur mehr für die Fragments ausgeführt die wirklich sichtbar sind.
jonas7 schrieb:
jonas7 schrieb:
Wieviele Dreiecke werden da gebildet, wenn
1. der Würfel die Fläche berührt
2. in die Fläche eintaucht?In allen diesen Fällen immer gleich viele...
Auf dynamische Objekte bezogen?
Ja. Und auch auf statische.
Es sei denn die Engine macht da irgendwas. Und in dem Fall hinge es davon ab was die Engine genau macht.
Bei BSP kann das z.B. völlig beliebig sein. BSP zerteilt dir auch laufend Dreiecke die sich mit überhaupt nix überschneiden.
D.h. entweder ist die Antwort "es bleiben gleich viele" oder, wenn du z.B. ne BSP Engine meinst, ist die Antwort "beliebig viele, hängt ganz von der Szene ab".