Multithreaded Rendering
-
rapso schrieb:
Ansonsten erreicht man höhere Abtastraten, nur durch höhere Frameraten.
die abtastung wird in der maus gemacht, nicht auf dem pc. dieser bekommt das resultat lediglich zugeschickt afaik.
Wenn man also das Input-System deiner Wahl benutzt, bekommt man nicht nur die aktuelle Mausposition, sondern auch die letzten 10 Stück.
Das Input-System würde ich gerne auch kennen lernen.Normalerweise kriegt man sowas wie "MouseMoved" und damit hat man die aktuelle Position.
Wenn man nur einmal pro Sekunde die MausPosition auswertet ist die Bewegung entsprechend ruckelig.Analog bei der Tastatur, man bekommt KeyPressed und KeyReleased.
Was ist aber wenn die Dauer des Tastendrucks relevant ist ?
Um die KeyPressed-Dauer genau zu messen, muss das InputSystem häufig genug arbeiten.
Bei 1000Hz Polling-Rate ist die KeyPressed Auflösung übrigens 1ms.
-
Ich finde den Ansatz sehr gut und wir haben dieses Prinzip in unserer GameEngine bereits umgesetzt ...
Und habt ihr auch Performancemessungen gemacht?
Normalerweise wird ein Schnappschuss der Spielewelt gerendert. Dabei darf niemand "wackeln", die Spielelogik darf die Welt nicht updaten. Spielelogik und Renderer konkurrieren also um die Spielewelt, nur einer darf exklusiven Zugriff darauf haben. Auch wenn sie in unterschiedlichen Threads laufen, sind sie normalerweise sequentiell, da die Spielewelt das Synchronisationsobjekt ist.
-
@knivil:
Wenn die Spielewelt schnell genug kopierbar ist, sprich das Kopieren deutlich schneller geht als das Rendern, dann kann man den Schnappschuss von dem du sprichst auch wörtlich nehmen, und eben eine Kopie ziehen.Die Kopie kann man dann rendern, ohne dass man das Lock weiter halten muss.
Und natürlich muss man auch nicht die ganze Spielewelt kopieren, es reicht ja wenn man die für's Rendern relevanten Teile kopiert.
-
knivil schrieb:
Und habt ihr auch Performancemessungen gemacht?
Die gemessenen Frames per Second sind auch relativ pro Rechner.
Unser bisheriger Rekord sind 1700FPS im Test-Level.
Andere bei uns im Team mit PentiumIV und Geforce4 MX oder abstrusen Notebook-Grafikkarten sind froh, wenns grade flüssig läuft.
-
OMG ...
-
nurf schrieb:
Unser bisheriger Rekord sind 1700FPS im Test-Level.
Euer Clan heißt "German Elite Fighters", oder?
MfG SideWinder
-
SideWinder schrieb:
Euer Clan heißt "German Elite Fighters", oder?
Den gibts bestimmt, hat aber nichts mit uns zu tun.
Siehe USP
-
Ich werd mich einfach mal dran setzten und dann schauen wie es so läuft. Und dann, wenn es fertig ist, es folgender maßen testen:
1. Welche FPS erreiche ich ohne Mutltithreading und ohne Texturen/Shader sortierung.
2. Welche FPS erreiche ich mit Multithreading aber ohne Texture/Shader sortierung.
3. Welche FPS erreiche ich mit Multithreading und Texture/Shader sortierung.
4. Wie wirkt sich das kopieren von den Entities in den Stage auf die FPS aus.Danach sollte es mir wohl einfacher fallen, mich für ein system zu entscheiden. Sollte aber auch nur im geringen Maße eine bessere Performance zu sehen sein, hat sich der ganze Spaß auf jeden fall gelohnt. Sollte das nutzen eines Threads zum rendern jedoch langsamer als stures rendern sein, habe ich eine Menge Zeit in den Sand gesetzt
Aber eigentlich habe ich damit ja auch eine weunderbare Möglichkeit geschaffen, alles nach Texturen/Shader oder sonst was zu sortieren?