1 registered members (AndrewAMD),
1,268
guests, and 2
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Framerate
[Re: Hummel]
#384304
10/01/11 21:23
10/01/11 21:23
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Ein guter Anfang wäre es meine Posts zu lesen... Problem: Ich beschäftige mich erst seit wenigen Monaten mit dem Gamestudio und ich wollte eigentlich nur wissen, wieso bei einer hohen Anzahl von ganz einfachen Körpern (etwa 3000) wie Kugeln oder Würfel ohne Skin die Framerate einbricht und was für Möglichkeiten es gibt sowas zu optimieren. Es wurden ja schon die Voxel angesprochen, aber wie sieht dort die Vorgehensweise aus, wird sowas mit Sprites oder mit eigenen Programmen realisiert?
Antwort: Das Problem in diesem Fall ist dagegen wie Achim schon geschrieben hat, die hohe Anzahl an Objekten plus vermutlich noch die Physik. Von daher ist davon auszugehen, dass einfach nur die CPU nicht schnell genug ist um mehr Objekte zu handlen. Hier müsste man jetzt profilen um herauszubekommen ob das Problem die Drawcalls oder etwas anderes sind und davonabhängig könnte man dann optimieren, wenn man denn den Engine Sourcecode hätte... Bzw je nach ergebniss dann auch ein einzelnes großes Mesh aus den einzelnen Objekten generieren, was dynamisch aber eher zu langsam ist.
Von daher ist die Lösung hier wohl einfach akzeptieren und sich mit den Grenzen zu arrangieren laugh.
Problem: Ahja, aber eine wirklich hilfreiche Antwort hat eigentliche keiner von euch auf lager gehabt. wie z.b. "ja Voxel Modelle sparen oder sparen keine FPS ein" Respekt das ist fachwissen und Hilfsbereitschaft (Wow Prinzip)
Antwort: wenn jedes Modell eine Box gleicher größe ist, das einfach als einen Voxel definieren, der jeweils eine Position und Rotation und Material mit Textur hat und an dieser Stelle mit den entsprechenden Eigenschaften eine Box platzieren. Marching cubes ist in dem Fall wohl eher unpassend. Was aman aber natürlich gut machen könnte, ist die Voxel dann alle zusammen in ein Mesh zu packen. Eine andere alternative die sicher sehr spannend wäre, ist das ganze mit Raymarching und ohne Polygone zu rendern, das lässt sich durch generieren einer Depthmap, was sich im Fall von Cubes mit bisschen Mathe lösen lassen sollte recht effektiv umsetzen, soweit ich weiß.
|
|
|
Re: Framerate
[Re: Microtex]
#384316
10/01/11 22:23
10/01/11 22:23
|
Joined: Dec 2002
Posts: 3,363 Vindobona (Ostarichi)
Harry Potter
Expert
|
Expert
Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
|
ich wollte eigentlich nur wissen, wieso bei einer hohen Anzahl von ganz einfachen Körpern (etwa 3000) wie Kugeln oder Würfel ohne Skin die Framerate einbricht und was für Möglichkeiten es gibt sowas zu optimieren. Es wurden ja schon die Voxel angesprochen ... @Microtex: Vergiss all den Voxel-Unsinn, der hier geschrieben wurde. Die richtige Antwort hatte Dir bereits Pappenheimer am 25.09.2011 um 21:51 Uhr gegeben. Dein Problem liegt nicht beim Rendern der 3000 Objekte (3000 Models gleichzeitig darzustellen sollte normalerweise kein Problem sein), sondern es liegt an den PHYSIK-BERECHNUNGEN für all diese Objekte. Physikberechnungen, für so viele Objekte gleichzeitig, überfordern fast jede heutige Hardware. Du musst also einen Weg finden, die Physik-Berechnungen zu optimieren (z.B. nur für diejenigen Objekte berechnen lassen, für die es wirklich gerade notwendig ist).
|
|
|
Re: Framerate
[Re: Harry Potter]
#384323
10/01/11 23:06
10/01/11 23:06
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Dein Problem liegt nicht beim Rendern der 3000 Objekte (3000 Models gleichzeitig darzustellen sollte normalerweise kein Problem sein)
Kann nicht einmal jemand meine posts lesen? -.- Ich gehe einfach mal davon aus, dass der Verfasser dieses Threads nicht so naiv ist und glaubt dass 3000 einfache Objekte die mit einander einiger maßen physikalisch kollidieren flüssig laufen. Entsprechend gehe ich davon aus, dass diese 3000 Objekte auch ohne Physik der Performance schaden und genau das erscheint mir nicht so falsch. Denn das Problem liegt beim CPU Overhead der beim Aufruf der fürs Rendern nötigen Funktionen existiert. 3000 einzelne Objekte die mehr oder weniger alle gleichzeitig sichtbar sind, sind einfach viel zu viele. Ein besserer Ansatz sind vielleicht 50 - 200 gleichzeitig für die gesamte sichtbare Umgebung mit zusammen meinetwegen 500000 Polygonen plus noch maximal 50 dynamische Objekte, die mehr machen als bisschen im Wind zu wehen, was sich sehr gut mit einfachen Shadern zum Beispiel lösen lässt. Ich hab das in diesem Forum allerdings schon gefühlte 100 mal gepostet und irgendwie hat es noch nie jemand mitbekommen...
|
|
|
Re: Framerate
[Re: Slin]
#384332
10/02/11 00:52
10/02/11 00:52
|
Joined: Dec 2002
Posts: 3,363 Vindobona (Ostarichi)
Harry Potter
Expert
|
Expert
Joined: Dec 2002
Posts: 3,363
Vindobona (Ostarichi)
|
Kann nicht einmal jemand meine posts lesen? -.- Ich habe Deine Posts gelesen. Aber Du hast offensichtlich die Posts von Microtex nicht richtig gelesen? Ich gehe einfach mal davon aus, dass der Verfasser dieses Threads nicht so naiv ist und glaubt dass 3000 einfache Objekte die mit einander einiger maßen physikalisch kollidieren flüssig laufen. Das hat nichts mit Naivität zu tun, sondern mit Praxiserfahrung bei der Spieleprogrammierung. Und da Microtex erst seit ca. einer Woche hier im Forum registriert ist, und bisher nur 3 Beiträge geschrieben hatte, gehe ich mal davon aus, dass er ein Neuling ist, der sich noch nicht so gut auskennt. Außerdem schreibt er ja selbst "ich bin noch Gamestudio Neuling". Und er wäre nicht der erste hier, der glaubt, dass man mit Gamestudio ganze Städte aus tausenden von Ziegelstein-Models bauen kann, die dann auch physikalisch korrekt zerstört werden können. Entsprechend gehe ich davon aus, dass diese 3000 Objekte auch ohne Physik der Performance schaden und genau das erscheint mir nicht so falsch. Denn das Problem liegt beim CPU Overhead der beim Aufruf der fürs Rendern nötigen Funktionen existiert. 3000 einzelne Objekte die mehr oder weniger alle gleichzeitig sichtbar sind, sind einfach viel zu viele. Wie ich schon oben geschrieben habe, liegst Du da aber falsch. 3000 einzelne Objekte sind überhaupt kein Problem. In meinem Testlevel für mein Spiel ( hier ein Screenshot) verwende ich sogar 4580 Objekte! Und mein Testlevel läuft absolut flüssig bei weit mehr als die 60 FPS, die mein Monitor wiedergeben kann. Und selbst wenn ich meinen Level von oben betrachte, sodass sämtliche 4580 Models gleichzeitig zu sehen sind, dann habe ich immer noch eine Framerate von ca. 40 FPS! Und das, obwohl ich einige Models verwende, die mehr als 10.000 Polygone haben. Und Microtex schrieb, dass seine 3000 Models nur 12 Polygone haben (sind daher wahrscheinlich Quader oder Würfel). Deshalb schrieb ich, dass weder die Anzahl der Models, noch die Anzahl der Polygone ein Problem sein kann. Außer vielleicht auf extrem langsamen PCs. Entscheidend sind natürlich auch noch andere Faktoren: zum Beispiel, ob eine Function/Action hinter jedem einzelnen Objekt hinterlegt ist, und wie rechenintensiv das Coding dahinter ist. Oder ob die Kollissionsprüfung für die Objekte aktiviert ist oder nicht, ob Schatten berechnet werden müssen oder nicht, etc. etc.!
|
|
|
Re: Framerate
[Re: Harry Potter]
#384334
10/02/11 01:12
10/02/11 01:12
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Das Entscheidene ist, dass wenn ich 1 mio Polygone in 3000 Modellen rendere oder 100k in 3000 Modellen, wird es mit einer aktuellen Grafikkarte kaum einen Geschwindigkeitsunterschied geben. Wenn ich dagegen die 1 mio Polygone in 100 Modellen rendere wird es vermutlich schneller sein als die 100k Polygone in 3000 Modellen. Und ja, mit einer schnellen CPU sind auch 5000 Objekte noch machbar, wenn ich aber jetzt womöglich noch Schatten und reflektierendes Wasser haben möchte bin ich plötzlich schon bei ca 20k Objekten und das ist nicht mehr wirklich akzeptabel schnell. Wenn ich also den Bottleneck, was im Fall von 3000 Modellen mit wenig Polygonen die CPU ist, selbst ohne aufwändiges drumherum, dann macht es durchaus Sinn die Anzahl der Objekte zu reduzieren, was dann auch wieder Kapazitäten für andere aufwändigere und unverzichtbare Dinge bringt. Und er wäre nicht der erste hier, der glaubt, dass man mit Gamestudio ganze Städte aus tausenden von Ziegelstein-Models bauen kann, die dann auch physikalisch korrekt zerstört werden können.
Ich habe die Posts durchaus gelesen und hatte den Eindruck, dass Microtex eher nicht zu denen gehört .
|
|
|
Re: Framerate
[Re: Microtex]
#384353
10/02/11 10:13
10/02/11 10:13
|
Joined: Sep 2011
Posts: 5
Microtex
OP
Newbie
|
OP
Newbie
Joined: Sep 2011
Posts: 5
|
@Slin Die Lösung kommt wohl wirklich noch am ehesten an das Problem da es sich nur um Würfel immer gleich bleibender Größe handelt die eine Textur besitzen sollen. Übrigens könnte man um zum Ausgangspost zurück zu kommen, wenn jedes Modell eine Box gleicher größe ist, das einfach als einen Voxel definieren, der jeweils eine Position und Rotation und Material mit Textur hat und an dieser Stelle mit den entsprechenden Eigenschaften eine Box platzieren. Marching cubes ist in dem Fall wohl eher unpassend. Was aman aber natürlich gut machen könnte, ist die Voxel dann alle zusammen in ein Mesh zu packen. Eine andere alternative die sicher sehr spannend wäre, ist das ganze mit Raymarching und ohne Polygone zu rendern, das lässt sich durch generieren einer Depthmap, was sich im Fall von Cubes mit bisschen Mathe lösen lassen sollte recht effektiv umsetzen, soweit ich weiß.
allerdings da ich Neuling bin ist das ganze bis jetzt eher unverständlich. Wie definiere ich also ein Voxel was jeweils eine Position eine Rotation und ein Material mit Textur hat. MFG
|
|
|
Re: Framerate
[Re: Microtex]
#384357
10/02/11 10:44
10/02/11 10:44
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Was genau versuchst du denn zu erreichen, was passiert mit den Boxen? Wenn du das erklärst lässt sich dein Problem vielleicht lösen. Beantworte das einfach, das was ich da geschrieben hatte bringt dich nicht weiter, denn wie gesagt, ist das nichts anderes als das was du schon machst in dem du einfach 3000 Boxen erstellst.
|
|
|
|