Abfrage ob Objekt Sichtbar ist...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

onkelz89

Betreff: Abfrage ob Objekt Sichtbar ist...

BeitragDo, Jan 03, 2008 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

hab mal wieder ein Problem Wink

Ich bin zur Zeit an einem größeren Projekt dran.
Das ganze läuft auch soweit, nur merke ich jetzt schon, da noch vieles dazu kommt - wird es anfangen zu Ruckeln, da extrem viele Objekte angezeigt werden müssen (gleichzeitig).

Die Frage wäre nun welcher Befehl am wenigsten Performance verschwendet...
Ein Befehl zum testen ob man das Objekte momentan sieht - wenn nein würde ich es per Hide Entity "verschwinden" lassen...

Nur welchen Befehl soll man nehmen?
EntityInView oder macht das Blitz mit EntityPickMode selbst?

Danke im Vorraus
 

Dreamora

BeitragDo, Jan 03, 2008 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Weder noch. Solange du das testen willst wird es nur noch mehr Performance kosten, da der Test auch LinePicks etc mit diesen Unmengen an Objekten durchführen müsste!


Da musst du effektiv auf effizientere Handlingstrukturen zurück greifen.

Wenn es Indoor ist, nimm BSP Level
Wenn es Outdoor ist, wirst du dir wohl einen OctTree (oder QuadTree falls bodengebunden) implementieren müssen.

Darüber hinaus lohnt es sich zu schauen wo statische Objekte auf weniger Surfaces reduziert werden können via AddMesh zb
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

onkelz89

BeitragDo, Jan 03, 2008 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

danke erstmal für die schnelle Antwort!

Ich kenne mich bisher Null mit diesen beiden Dingen aus - werde heute Abend oder so mal im Web stöbern...

Aber soweit ein erster Überflug mir zeigte bedeutet das Einbinden dieser "Technologien" auch das mehrere Objekte zusammengefügt werden...

Mein Problem ist, dass ich wirklick viele einzelne Objekte habe und das muss leider so sein, weil ich extrem vieles in der Spielwelt vom User beeinflussen lassen will. Also ich kenne halt keine möglichkeit wie ich es sonst machen soll Sad

Zur Not müsste ich die Levels an sich kleiner machen ... aber allein dann wäre es vom Grundgedanken verfuscht - da 2 Häuser mit voller Bestückung reichen zur Ruckelparty... und naja ich dachte an Dörfer...

Hoffe es gibt noch nen anderen Weg - oder das ich die beiden "Technologien" voll falsch interpretiere
 

Dreamora

BeitragDo, Jan 03, 2008 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn sie einzeln bleiben sollen bleiben dir neben der Implementation eines OctTrees nicht soviele Möglichkeiten (ein OctTree ist keine Technologie sondern ein relativ simpler Algorithmus). Einige simple Dinge möchte ich dennoch nennen:

1. EntityAutoFade damit die objekte selbst rausfaden
2. Mit der Kamerasichtweite spielen. Wozu soviel sehen wenn man viel interagieren kann?
3. CopyEntity ist ein sehr wichtiger befehl und sollte benutzt werden sofern du das objekt nahezu unverändert überall wieder nutzt (nahezu unverändert heisst vor allem position, rotation und skalierung ändern sich)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

onkelz89

BeitragDo, Jan 03, 2008 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
3. mache ich mit so ziemlich allen das passt auch soweit.
2. habe ich in den Spieloptionen zum einstellen von 100-1000 max.
allerdings habe ich eben was eingebaut - wenn man in Häuser geht dann wird der Wert ganz klein (10) naja bringt 3-4 FPS...
1. Wie viel bringt das oder überhaupt was wenn der 2te Punkt die Objekte eh schon ausblendet?

Ich hatte gerade mit ca. 8000 Objekten getestet hatte so rund 40 FPS und wenn ich auf eine Häuserreihe zu gehe, dann nurnoch 30 so rum und wenn ich den 2 Punkt benutze und im Haus bin - kamen 3-4 FPS wieder drauf...
aber ich habe dann nichmal das eine Haus ganz gesehen - dachte das würde mehr bringen.
Glaube auch wenn Objekte "unsichtbar" sind und rein gar nichts machen in sachen Abfragen - benötigen sie Trotzdem Performance ... warum? Speicher OK klar... aber sonst - sie werden ja nicht gerendert
 

Dreamora

BeitragDo, Jan 03, 2008 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
was heisst rein garnichts machen?
Alles was im View frustrum ist wird gerendert auch wenn man es nicht sieht.
Was nicht im View frustrum ist, wird zwar nicht geändert, aber aktualisiert in UpdateWorlds. Das betrifft vor allem 2 sehr kostspielige Punkte: Kollision/Linepick und Animation. Die laufen nämlich ungehindert weiter

Und EntityAutoFade setzt man normalerweise so ein dass es an dem punkt wo es removed wird auf 0 ist. Es dient einfach dazu dass das objekt schön gleichmässig raus geht, net einfach "puff"

alternativ kann man auch für dinge die man nur ganz in der nähe sehen muss (grass, büsche) das ganze so einstellen das es lange vor cam range ausfaded
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

onkelz89

BeitragDo, Jan 03, 2008 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs auch ohne UpdateWorld getestet - das gleiche Ergebnis...

EntityAutoFade werde ich wohl noch einbinden aber mal sehen. Erstmal darf es ruhig "abgehakt" wirken Hauptsache ich finde ne Lösung für das Performance Problem...

Weil wie oben schon beschrieben - ich verstehe nicht ganz was der noch macht im Hintergrund?

Zitat:
Alles was im View frustrum ist wird gerendert auch wenn man es nicht sieht.


Kann man das verhindern?
 

Dreamora

BeitragDo, Jan 03, 2008 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein ausser das Objekt ist gehided.

Aus dem Grund wurde ja das BSP Level Format erst entwickelt. Es ist mit die einzig performance mässig brauchbare algorithmische Lösung um schnell entscheiden zu können ob man etwas sieht oder net.


Vor allem ist es nicht möglich gescheite optimierungen zu geben ohne das genauer bekannt ist was du machst. Wenns in räumen drin ist dann ja. Wenns primär draussen ist würd ich mal sagen: kamera sichtweite runterdrehen, mit Camera zoom spielen um sie doch wieder fiktiv raufzudrehen.

Alles was drüber hinaus geht braucht schon einen besseren algorithmischen Hintergrund als "garkeinen" weil dann müsstest du etwas zwecks PVS (potential visibility set) implementieren, was es dir erlaubt zu entscheiden was du sicher nicht sehen kannst.

etwas ähnliches tut octtree aber der bringt dir nix denn auch bei dem wird gerendert was im view frustrum ist.

da müsstest du dir also vermutlich einen eigenen algorithmus überlegen oder dir überlegen wie du dein massives AntiDX7 Design Problem (alles mit surfaces zupumpen) lösen kannst ...

denn DX7 mag das net sooo sehr, das wurde bei DX9 verbessert
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group