3d Game Engine : PERFORMANTE Räumliche Verdeckung

CreepyPvP

Mitglied
Zurzeit schreibe ich eine 3d Game engine in Java ohne LWJGL, Vulcan oder OpenGL. Nun suche ich einen Weg , räumliche Verdeckungen zu PERFORMANT zu Berechnen. Mein erster Ansatz war, vor dem Rendern alle Punkte (Vertices) an der Z-Achse zu Sortieren. Das funktioniert nun aus Performance Gründen nicht mehr. Ich wäre für Lösungsvorschläge sehr dankbar. Grüsse Creepy
 
Das kannst du bestimmt umbauen, aber Sinn wird es trotzdem nicht viel machen. Du wirst nie richtig performant werden ohne Grafikkarte. Siehe dein letzter Thread.
 
Vielen , vielen Dank thecain.
Du wirst nie richtig performant werden ohne Grafikkarte
Das war mir durchaus bewusst. Ich habe mich davor (3d-Programmierung) nur mit OpenGL beschäftigt. Ich wollte verstehen was hinter der 3d Programmierung steckt, denn darauf zu warten , bis ich so alt bin , dass ich studieren kann dauerts noch ein paar Jahre 🙁 . 🙂 Grüsse Creepy
 
Zuletzt bearbeitet:
@CreepyPvP Leider ist das alles gar nicht so einfach, wie du dir das vorstellst. Da haben sich schon seeehr viele Leute (z.B. die "Erschaffer von OpenGL" - die Khronos Group oder Nvidia) sehr viele Gedanken gemacht, wie man das effizient hinbekommt.

Der entscheidende Punkt ist aber der:
Eine moderne CPU hat im Durchschnitt vllt. 8 Kerne (Cores). Eine moderne Grafikkarte (GPU) wie die Nvidia GTX 1080 hat 3584 Cores, also 448x mal so viele Cores, wie eine CPU! Dazu kommt, dass die GPU speziell auf die mathematischen Berechnungen optimiert wurde und somit viel effizienter mit Matrizen, Vektoren usw. umgehen kann, als die CPU.
Bei jedem Frame (60 FPS = 60 Frames per Second) wird jeder Pixelpunkt einzeln berechnet. Gehen wir mal von einem Bild mit 800x600 Pixeln aus, das sind dann insgesamt 480.000 Pixel. Wenn du jetzt eine CPU mit 8 Cores nimmst, brauchst du 60.000 CPU Cycles, um einen einzigen Frame zu berechnen! Da wird es wahrscheinlich schon schwer 1 - 5 FPS mit der CPU zu bekommen, weil sie so viel Last erhält.
Wenn du dagegen die GPU mit 3584 Cores nimmst, sind das lediglich 134 GPU Cycles. Merkst du den Unterschied?
134 vs. 60.000 Cycles sind einfach ein sehr drastischer Unterschied, den du bei der Performance sehr deutlich zu spüren bekommst. Deshalb ist es einfach nahezu unmöglich eine 3D Engine zu schreiben, welche nur die CPU nutzt. Und ehrlich gesagt halte ich das auch für Quatsch.

Bei Bedarf kann ich dir dazu unsere Vorlesungsmaterialien zukommen lassen, schicke mir dazu einfach eine PN mit deiner Mailadresse.

EDIT:
Ich habe das Beispiel stark vereinfacht, bei 800x600 Pixeln könnte eine Nvidia GPU z.B. gar nicht alle Kerne voll ausschöpfen, weil z.B. bei Nvidia jede GPU Unit aus 32x32 Pixeln besteht (the "power of 2") und 600 nicht ganzzahlig durch 32 teilbar ist. Allerdings ist der Unterschied so klein, dass er hier vernachlässigt werden kann. Das nur so als Anmerkung, bevor hier jemand das Beispiel in Frage stellt.
 

Zurück
Oben