Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Iridias

#1
German corner / Re: Frage zur Performance
June 19, 2013, 12:55:56 PM
Danke für die vielen Hinweise.
Ich habe in meinem Code einiges umgebaut und verbessert und liegen beim prüfen der Sichtbarkeit jetzt bei so 8 - 10 ms. Das tatsächliche sichtbar- und unsichtbar schalten hab ich auch noch optimiert, sodass er im Schnitt jetzt 10 - 15 ms braucht... statt vorher 80 - 100 ms. Da ich das wie empfohlen im Render-thread mache, kommt das der FPS spürbar zugute!
Und flackern tut jetzt auch nix mehr.
#2
German corner / Re: Frage zur Performance
June 12, 2013, 03:11:09 PM
Also vom Prinzip her einen hintergrund-thread, der über die Liste aller Items/dummy-beans interiert und deren sichtbarkeit bestimmt und die sichtbaren in einer extra-liste pflegt, die dann wiederum vom Render-thread heran gezogen werden kann um zu bestimmen welche Object3D benötigt werden.

Das wäre zumindest der einzige Ansatz, der mir einfällt um zu vermeiden, im Render-thread jedes mal alle Items durch-iterieren und checken zu müssen (was ja absolut inperformant wäre).

Was wäre denn dann zum handlen der Object3Ds die performanteste Strategie? Für jeden Item-type ein "template-object" haben und diese "on-demand" clonen und positionieren? Oder einen pool an objekten haben deren nicht benutzte Objekte nur neu positioniert und sichtbar gemacht werden müssen?
#3
German corner / Re: Frage zur Performance
June 12, 2013, 02:12:43 PM
Hmmm, ok, aber mit der Farplane geht ja nur "alles oder nichts".

Was ich in dem Beispiel noch nicht erwähnt hatte, war, dass ich da gerne noch zwischen Objekt-typen unterscheiden will.
Also, zB dass der Untergrund nie ausgeblendet wird und immer bis zur Farplane reicht. Und bei anderen Objekten das je nach Wichtigkeit staffeln. Dann würden zB Bäume (als unwichtiger Zierrat, der aber aufgrund der Menge viel Performance frisst) direkt nach Entfernung x ausgeblendet, Straßen oder ähnliches erst nach x+y usw.

So hat man auf der Karte die größtmögliche Übersicht bei akzeptabler Performance.
#4
German corner / Re: Frage zur Performance
June 12, 2013, 09:01:30 AM
Was wäre denn eine gute Möglichkeit die Sichtbarkeit der vielen Objekte die da sind in Abhängigkeit von der Entfernung zur Kamera dynamisch zu ändern?

Ich hab schon versucht einen Thread im Hintergrund laufen zu lassen, der regelmäßig alle bekannten Objekte durchgeht, deren Entfernung feststellt und entsprechend die Sichtbarkeit setzt. Allerdings hab ich dabei entweder irgendetwas falsch gemacht, oder aber diese Mechanik kommt sich mit irgendwas anderem in die Quere, weil ich Objekte habe (in und außerhalb des Sichtbereichs) die aufpoppen und wieder verschwinden. Wenn das nur innerhalb des maximalen Sichtbarkeitsbereichs passieren würde, hätte ich "Config.maxPolysVisible" im Verdacht, aber da das auch außerhalb passiert, halte ich das für eher unwahrscheinlich (weil warum sollte die Engine, Objekte, die explizit auf visible(false) gesetzt sind, abhängig von maxPolysVisible wieder sichtbar machen?)


Die Sichtbarkeit setze ich grob wie folgt (nur halt in ner Schleife):

SimpleVector camPosition = world.getCamera().getPosition();
SimpleVector objectPosition = object.getTransformedCenter();
float distance = objectPosition.distance(camPosition);

if(distance > MAX_VIEW_DISTANCE) {
if(object.getVisibility()) {
object.setVisibility(false);
}
} else if(!object.getVisibility()) {
object.setVisibility(true);
}