Leistungseinbruch beim neuen Level

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

BadDeath

Betreff: Leistungseinbruch beim neuen Level

BeitragMo, Mai 26, 2008 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Eigentlich läuft mein FPS mit 60 Bildern pro Sekunde recht flüssig. Wenn ich nun aus dem Spiel aber ein anderes Level wähle, kommt es bei 2 der bisher vorhandenen 4 Leveln zu starken Rucklern und das Spiel schafft nur noch bis zu 30 Bilder/s. Dann dachte ich mir: Mensch, da müssen wohl noch irgendwelche Überreste im RAM sein, also löschst du gleich alles mit Clearworld. Doch das Problem besteht weiterhin!

Natürlich lösche ich auch alle Sounds und Types, und lasse eigentlich alles neuladen. Hier meine Lösch-Funktion:

Code: [AUSKLAPPEN]
Function ResetWorld()
   For O.Objekte = Each Objekte
      FreeEntity O\Mesh
      Delete O
   Next
   
   For DO.DesObjekte = Each DesObjekte
      FreeEntity DO\Mesh
      Delete DO
   Next
   
   For d.door = Each door
      FreeEntity d\mesh
      Delete d
   Next
   
   For waffen.weapon = Each weapon
      FreeEntity waffen\mesh
      Delete waffen
   Next
         
   For h.holetype = Each holetype
      ;HideEntity h\sprite
      Delete h
   Next
         
   For mob.Gegner = Each Gegner
      FreeEntity mob\mesh
      Delete mob
   Next
   
   For m.MediPacks = Each MediPacks
      FreeEntity m\mesh
      Delete m
   Next
   
   For Graf.GrafType = Each GrafType
      FreeEntity Graf\Sprite
      Delete Graf
   Next
   
   For Port.Ports = Each Ports
      FreeEntity Port\mesh
      Delete Port
   Next
   
   For Blut.Bluttropfen = Each Bluttropfen
      FreeEntity Blut\mesh
      Delete Blut
   Next
   
   For bloom.Bloom = Each bloom
      FreeEntity Bloom\spr
      Delete Bloom
   Next         
   
   Delete Each Button
   
   FreeEntity Boden
   FreeEntity Water   
End Function


Es wäre nett, wenn ihr mir helfen könntet. Wenn ihr noch mehr von dem Code benötigt, zb die Level-Ladenfunktion, meldet euch.

EDIT: Ich habe bemerkt, dass nach jedem Ladevorgang der VRAM immermehr belegt wird, obwohl ich keine textur oder so mit dem Parameter 256 lade"

DANKE! Very Happy
 

Dreamora

BeitragMo, Mai 26, 2008 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Texturen landen alle im VRAM, nicht nur die mit 256.
Der einzige unterschied ist das die mit 256 NUR im VRAM sein können und sonst nirgends, während die restlichen im System RAM zwischengespeichert werden können wenn sie nicht gebraucht werden zum rendern.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BadDeath

BeitragMo, Mai 26, 2008 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, wieder was gelernt. Es wäre tortzdem sehr nett von dir, wenn du mir evtl. bei meinem Problem helfen könntest. Danke!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 26, 2008 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Richte es doch so ein, dass schon beim ersten starten des Programmes der zweite Level geladen wird. Denn vielleicht ist nicht deine Löschroutine fehlerhaft, sondern der zweite Level einfach zu voll mit Objekten etc...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

BadDeath

BeitragMo, Mai 26, 2008 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wird ein Problem ^^

Das Spiel soll ja ein Ego-shooter werden, sowie Quake, UT usw. Das heißt es gibt keine Story und man kann sehr viele Maps spielen. Und wenn ich nun 50 Maps laden müsste, die auch mal etwas größer sind, kommt das dann nicht zu noch mehr Leistungseinbußen? Zusätzlich würde der dann eine Weile laden....

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 26, 2008 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du's nun ausprobiert ob der Level 2 so langsam ist, oder doch die Löschroutine fehlerhaft ist? Sollte es tatsächlich so sein, dass die Levels zu ''aufwändig'' sind, dann müssen diese eben optimiert werden. Das hiesse: Weniger Surfaces, Polygone pro Objekt reduzieren etc... Ausserdem sehe ich bei deinem ersten Beitrag, dass du ein Bloom verwendest. Vergiss nicht, dass gerade Bildschirmeinnehmende Effekte wie Blur, Blom etc... sehr langsam sind unter Blitz3D, da Blitz3D kein RenderToTexture hat. Schalte also zuerst solche Sachen (Blur, Bloom, Mirror, Plane mit transparenz und andere unkonventionelle Sachen) erstmal aus.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

BadDeath

BeitragMo, Mai 26, 2008 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
bin dabei, muss dafür einiges umschreiben... und den bloom- und blur-effekt habe ich auch ausgestellt.
das level hat rund 10.000 polys und 16 surfaces. sind zu viel, oder?

EDIT: gut, das problem besteht weiterhin... es wird sogar noch verschlimmert, die fps sinken auf bis zu 8 und mein vram ist ausgelastet: 108MB von "128" mb ^^

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 26, 2008 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
10'000 Polygone sind kein Problem, so lange sie im Durchschnitt nicht eine gewisse Größe erreichen (Filrate). Allerdings sollte jedes Mittelmässiges System auch dieses soweit gut und schnell anzeigen können. Es könnte also gut sein, dass das Problem ganz wo anders liegt. Eventuell kann auch die nahe gekommene Grenze des Grafikspeichers das Problem sein. Hier muß ich aber gestehen, dass ich dazu nicht viel sagen kann.

Eventuell würde es dir nutzen, wenn du in jedem Teilbereich deines Codes die MilliSecs misst, um Gewissheit zu erlangen, wo genau das Problem liegt. Vielleicht hast du aufgrund des ersten Levels fröhlich weiter programmiert, ohne zu merken, dass alles den Bach runter geht und jetzt das Problem an der falschen Stelle siehst. Daher das messen einzelner Teilbereiche wie zwischen: UpdateWorld, RenderWorld, KI, Steuerung, Speicherverwaltung etc...
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

BadDeath

BeitragMo, Mai 26, 2008 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Normal

Steuerung: 0-1
Berechnung: 0-1
Rendern: 7-9
Hud: 9

nach dem 2. mal Laden

Steuerung: 0-1
Berechnung: 0-1
Rendern: 13-31 <- schwankt sehr stark, jenach Spielerposition, obwohl es ein Meshterrain ist
Hud: 8


alle Werte in Millisekunden bei eingeschaltetem Debugger
 

BadDeath

BeitragMi, Mai 28, 2008 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat denn Keiner mehr eine Idee? Rolling Eyes
 

Dreamora

BeitragMi, Mai 28, 2008 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Du löscht das gesamte alte Level oder?
Also freeentity, freesound, delete etc
Wenn du dynamische texturen hast, auch freetexture
Würde mich obigem anschliessen, am wahrscheinlichsten ist deine UnloadLevel Funktion futsch.

Weil ausser Geometrie Menge sind vor allem 4 Dinge kritisch:
1) Wie oben erwähnt Fillrate. Nicht riesengrosse Flächen nahe an der kamera machen, vor allem net partikel systeme
2) Overdraw. Betrifft primär partikel wenn man hunderte nutzt für etwas was mit 20 auch machbar ist
3) Texturgrössen. Wenn man viel zu grosse texturen hat (2048x2048) die häufig auch noch da und nicht da sind kann das erheblich an der performance ziehen da sie immer wieder an die grafikkarte gesandt werden. -> DDS Format nutzen
4) Bone Animation. Bone animierte Objekte sollten nicht mehr als 2000-3000 Polygone und 20 Bones haben

Ich nehm ma an dein Mesh terrain wird einmal erzeugt oder? Nicht jedes frame neu aufgebaut oder so weil dann nimmst du lieber das Blitz eigene Terrain, da du niemals auf ner gescheiten Performance enden wirst so.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BadDeath

BeitragMi, Mai 28, 2008 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke schonmal für die Antwort.

Ich habe nur eine dynamische Textur, die Cubemap für das Wasser, doch auch die sollte durch ClearWorld verschwinden, oder? Partikel sind bis jetzt nur im Blut der Gegner, welche wegen "bauarbeiten" ausgeschaltet wurden und eh nach 10 sec verschwinden. Für das HUD benutze ich 3 Sprites, die jedoch auch wieder gelöscht werden, während der Rest mit Text und DrawImage erstellt wird, und die Texturen für die eine Map sind 15 Stück mit einer Gesamtgröße von 1,48 MB, wobei die Größe 756x512 Pixel besitzt. Und bei den Animationen bin ich noch nicht soweit, es gibt bis jetzt nur eine Animation: in dem Level CPM 18R zerfällt eine Kiste beim Schuss auf diese und das ist eine B3D-Animation.

Ich würde ja gerne eine Heightmap benutzen, jedoch lassen sich aus denen ganz schlecht Häuser formen.

Ihr könnt euch ja mal den Stand der Dinge angucken, vllt fällt euch dann etwas auf: Download Um im Spiel die Karte zu wechseln einfach Escape drücken, damit ihr im Zwischenmenü seid und dann die rechte Mustaste, um zur Levelauswahl zu gelangen, weil ich dafür noch keinen Button gemacht habe.

Danke! MfG, BadDeath

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group