Framerate bricht ein bei PC A - bei PC B nicht ?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

BlitzBirne

Betreff: Framerate bricht ein bei PC A - bei PC B nicht ?

BeitragFr, Aug 25, 2006 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen!

Ich habe einen Ansatz eines 2D - Spaceshooters geschrieben, mit Sound, ein paar einfachen Gegnern (die einfach nur herumbouncen), 3 Waffen und Partikelffekte. (Blut, Metallsplitter, Sterne - alles Pixel oder Rects)

Soweit, so gut.

Programmiert habe ich das Ganze auf folgender Config:

- Pentium 4 3000 HT
- 2048 MB Corsair
- Asus MB mit Intel Chips
- ATI Radeon 9800 Pro 128 MB

Und nun das eigentliche, was ich nicht ganz verstehe.
Auf dem Rechner bricht die Framerate fast bis zum Stillstand ein, sobald ich mit 2 Waffen auf 2-3 Gegner feuer ( Blut -> Partikellastig !)

Tja, man könnt jetzt meinen, ich habe Murks gecoded, das es zu langsam ist, oder hab 50000 Partikel zu rendern. Das ist aber NICHT der Fall.
Ich habe letzen Di. ein gebrauchtes Laptop eingesackt, und - man staune - ich kann ballern was as Zeug hält, auch bei 40 Gegnern ruckelt oder bremst da absolut garnichts. Shocked Question

Daten des Laptop:

- Pentium 4 2,6 non-HT
- 512 MB KA-was-für-Ram
- KA -was-fürn-Mainboard
- ATI Mobility Radeon 9000 mit glaub 64 MB


Jeweils aktueller Stand (Treiber etc) - und - beide Win 2k4 Prof - SP 4.


Da ich nicht die leiseste Ahnung habe, was der Grund dafür sein soll...
habt Ihr vielleicht nützliche Tips / Ideen / Lösungen für das Problem, das der o.g. Rechner auch ohne FPS Einbrüche läuft ?

Achja - bei beiden habe ich an den Treibersettings nichts geändert (Graka)





MfG


EDIT: Beides DX 9c installiert
 

Dreamora

BeitragSa, Aug 26, 2006 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja das klingt wirklich ein wenig absurd, da müsste man schon den Code haben.
Das einzige was sonst möglich wäre, ist das die Mobile einige dinge by default ausschaltet (die treiber werden tendentiell um einiges älter sein sofern man nicht weiss wo man die aktuellen mobile runterladen kann), speziell da die Radeon 9000 eine Karte ist die bestenfalls gegen eine GeForce 3 ankommt oder eine GeForce 4 MX (-> GeForce 2)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BlitzBirne

BeitragSa, Aug 26, 2006 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu Drea Smile

Ich könnte dir den Code Mailen, für nen Post hier ist der zu gross *find* und er ist auf 9 Dateien aufgeteilt.



EDIT:

Habe mal einen FPS Counter eingebaut, und das Ganze auf beiden System rennen lassen.

Beim PC läuft das game mit ~72 FPS. Baller ich aber auf 2-3 Gegner, brichts auf ca 34 FPS zusammen.

Beim Laptop rennt es mit ~60 FPS, bricht aber nicht zusammen - egal wie wild ich da rumballer - auch mit 40, 50 etc gegnern nicht... ( btw, es sind alles die selben gegner)
 

Gray Fox

BeitragSa, Aug 26, 2006 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage hat dein "Hauptrechner" noch einen Röhrenmonitor?
 

BlitzBirne

BeitragSa, Aug 26, 2006 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Gray Fox : Ja hat er.
 

Gray Fox

BeitragSa, Aug 26, 2006 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBirne hat Folgendes geschrieben:
@ Gray Fox : Ja hat er.


Ich denke, da könnte das Problem liegen, jeder Röhrenmonitor hat eine "variable" Bildwiederholungsfrequenz und beim LCD ist diese fest auf 60 eingestellt, dass kommt davon, dass ein LCD eigentlich gar keine "echte" Bilderwiederholfrequenz hat.

Versuch doch einfach mal die Bildwiederholungsfrequenz des Monitors zu ändern und dann nach ob das Einfluss auf die FPS im Spiel hat.

StepTiger

BeitragSa, Aug 26, 2006 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
daran liegt es definitiv nicht!

die frequenz des monitors hat nichts mit der frequenz des programmes zu tun.

ein Monitor kann kein Programm ausbremsen. Ich würde eher sagen, es liegt an der Grafikkarte. Setz mal die Details niedriger. (anti aliasing, shader, mipmapping und sowas)

Der Monitor hat NICHTS mit dem Programm oder Computer zu tun. Du könntest statt des Monitors auch 8 Millionen Leds nehmen und die passend ansteuern. Der Monitor ist nur ein Signalumwandler. Von Strom zu Licht.

Wie das funktioniert kannst du dir auf Wikipedia durchlesen. Bin zu faul es zu erklären.

Ich hatte immer meine Probleme wenn ich die anistropische Filterung hoch gestellt habe
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Gray Fox

BeitragSa, Aug 26, 2006 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir is schon klar wie ein Montor funktionert, als ITSE sollte das man schon ansatzweise wissen Very Happy

Ich denke es könnte trotzdem indirekt etwas mit der Bildwiederholungsfrequenz zu tun haben Wink

Versuch es einfach mal mit dem Ändern der Bwf (Hz).

oder schalt mal VSync ab. Lest euch mal den Artikel durch, dann wisst ihr was ich meine ^^

http://www.3dcenter.de/artikel/2004/03-12_a.php

StepTiger

BeitragSa, Aug 26, 2006 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
link funktioniert irgendwie nicht

*edit* komisch, jetzt gehts ^^
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Dreamora

BeitragSa, Aug 26, 2006 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
StepTiger hat Folgendes geschrieben:
Der Monitor hat NICHTS mit dem Programm oder Computer zu tun.


Das ist leider Gottes Blödsinn.

Denn wenn Flip ohne Flip 0/false aufgerufen wird, dann muss das Programm auf den Sync des Bildschirmes warten und dieser hat eine elementare Einschränkung: Er kann nur Vielfache der Grund Hz sein!
Wenn also der Schirm 72 Hz hätte, man nicht Flip false macht und er kommt auf 70 ... naja -> 36 FPS bleiben übrig.

aber ich werds dann sehen wenn er mir den code geschickt hat und wohl genaueres sagen können.

Ein weiterer häufiger fehler (so scheint mir zumindest) ist das viele Timer verwenden UND Flip true (oder einfach nur Flip). Damit garantiert man sich schon fast einen FPS zusammenbruch auf einem Röhrenmonitor, da der Timer so gut wie nie genau den Moment des Syncs erwischt. (waittimer sollte man eh nicht nutzen, wenn dann Delay. Meine persönliche Meinung zumindest)

Ansonsten jo, die Chance das auf dem High End System so Dinge wie Mipmapdetail und Texturequalität hochgedreht sind und VSync eingestellt ist beträchtlich höher als beim Notebook (anisotropher filter etc sind egal, darauf reagiert DX7 nicht. Genau so wenig wie optimierter trilinearer Filter, da B3D nur bilinear nutzt), wo die Treiber der Notebookhersteller normalerweise Default auf Performance gehen statt Qualität
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

StepTiger

BeitragSa, Aug 26, 2006 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
und schon wieder was dazu gelernt ^^

darum haben meine Programme immer nur so 60 FPS ^^

danke für den tip mit flip 0
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Hubsi

BeitragSa, Aug 26, 2006 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Link funktioniert und die Bildwiederholrate hat sehr wohl Einfluss auf die Ausgaben des Programms (im Vollbild, im Fenster hat Windows seine Finger im Spiel). Setz hier einfach mal bei vsync eine 0 ein und das Oval rast nur so rum. Mit Vsync (1) ist die Ausgabe besser, aber eben an die Wiederholrate des Bildschirms angepasst:

Code: [AUSKLAPPEN]
Const vsync=1
Graphics 640,480,0,1
SetBuffer BackBuffer()

While Not KeyHit(1)
   Cls
   Oval x,225,30,30,1
   x=x+speed
   If x=0 speed=1
   If x=610 speed=-1
   Flip vsync
Wend
End


Zu langsam Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Rone

BeitragSa, Aug 26, 2006 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:

Denn wenn Flip ohne Flip 0/false aufgerufen wird, dann muss das Programm auf den Sync des Bildschirmes warten und dieser hat eine elementare Einschränkung: Er kann nur Vielfache der Grund Hz sein!
Wenn also der Schirm 72 Hz hätte, man nicht Flip false macht und er kommt auf 70 ... naja -> 36 FPS bleiben übrig.

Das ist ja krass, ist das bei BMax auch so?
Wenn ich das z.B. so mache.....
Code: [AUSKLAPPEN]
Graphics 800 , 600 , 32 , 60
Repeat
   Cls
   Flip
Until KeyHit(KEY_ESCAPE)
End

...bin ich immer davon ausgegangen, dass das Bild unabhängig vom monitor 60 mal pro Sekunde neu gezeichnet wird??

Habe leider keinen Röhrenmonitor mehr um zu testen, aber heisst das jetzt, dass man praktisch dazu gezwungen ist frameunabhängig zu programmieren damit die performance unabhänig vom Monitor ist?
 

BlitzBirne

BeitragSa, Aug 26, 2006 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ui, interessant Smile

Nun, ich sag mal zu dem bis jetzt geposteten meine Meinung:

Der Monitor selbst beeinflusst garnichts, AUSSER das er das VBL (oder anders, und nicht ganz korrekt, VSync) Signal zur Graka sendet. Ob die Graka dann auf VSync wartet, ist halt einstellungsache des Treibers.
Natürlich sendet er auch (sofern er es auch eingebaut hat) ID SIgnale zur Graka, für Plug 'n'Play- Max Hertz Vertikal/Horizontal / Auflösung...
egal. Das ist jedoch nicht der Faktor der mein Problem ist.

Vsync ist bei beiden an. Das begrenzt nur die Höchste FPS auf die Eingestellte Frequenz. Das ein rechner zb 500 FPS Darstellen könnte, fällt dabei dann nicht auf. Was aber auffällt ist, wenn ein Frame länger dauert als erwartet (eben in dem mass länger das es eben zu weniger als zb 60 FPS kommt) und genau das ist mein Problem bei meinem PC.

Und am Rande, mit Vsync aus läuft UT99 bei mir mit bis zu 160 FPS wenn ich direkt vor die wand starre oder je nach aufwand 50- 100 FPS wenn man "in die welt schaut".

Im allgemeinen find ichs nicht wirklich ratsam ein game auf 200 FPS zu programmieren denn viele haben VSync an und maximal zb 100 FPS dadurch (Wenn der monitor diese Frequenz gebacken kriegt, vorausgesetzt)

Aber das problem ist ja, der FPS Einbruch bei meinem PC dürfte garnicht vorkommen - er sollte stabil mit von mir aus ~75 FPS laufen (VSync bei graka an - was er auch tut, solange ich nicht auf gegner baller(!))

bei meinem Laptop - genau 1:1 das gleiche Prog - passiert das nicht. es bleibt bei ~60 FPS, auch wenn ich wie wild rumballer.

Das selbe Problem ist auch wenn ich(um es zu beobachten) langsam immer mehr partikel rendern lasse, dann brechen auf einmal schlagartig die FPS ein. das kanns nicht sein.

Und zu Timern oder Delay, davon benutze ich keines.

Naja und zum detail ein bissel: Ich benutze 1024 Partikel für den Sternenhintergrund auf 255 Layern verteilt (alles pixel), plus die partikel die Blut darstellen (16 pro treffer, alles Rects(!) verschiedener Grösse) und natürlich Sprites für die Explosionen und den rest.. Wink


EDIT:

Ganz vergessen... Embarassed

Ob Röhre oder nicht, das ist egal. beide arbeiten Syncmässig auf gleiche Weise. MultiSync Monitore können zwar höhere Frequenzen und TFTs nicht, aber das ist auch bei TFT egal, weil diese das Bild nicht mit einem elektronenstrahl darstellen wodurch ja das geflimmer bei ner röhrenkiste kommt.
Der TFT läuft ETWA wie ein 100 HZ Fernseher - er bekommt 50 Hz Bildinfo, stellt aber mit 100 Hz dar. - Weil das Bild Digital gepuffert wird.





MfG
 

BlitzBirne

BeitragSo, Aug 27, 2006 9:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal eine kleine Neuigkeit...

Ich habe beim PC in den Graka Settings alles auf Leistung eingestellt.
Alles auf minimum oder aus ( VSync auch aus!)

Das Game rennt jetzt mit ~100 FPS ohne Ballern (ich habe die FPS im Game auf 100 begrenzt)

Baller ich mal wieder - bleiben ~40 FPS übrig....

Im mom fällt mir nichts mehr ein... Rolling Eyes

Spikespine

BeitragSo, Aug 27, 2006 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin nicht sicher ob ich deinen Beitrag richtig verstanden habe... Du musst VSync in deinem Programm abschalten, indem du eine 0 hinter das Flip setzt. Die Grafikkarteneinstellungen bringen da wohl nicht so viel.
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax
 

Dreamora

BeitragSo, Aug 27, 2006 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch die bringt schon was, wenn du force off hast, also VSync unabhängig von der Anwendung abgeschalten ist.
Aber das ist normalerweise nicht wünschenswert, am besten lässt man "Anwendungsgesteuert" und nutzt Flip 0 bzw. Flip false.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BlitzBirne

BeitragSo, Aug 27, 2006 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm...

Das Problem ist das die FPS zu wenig WERDEN, wenn ich auf gegner baller.

Mit VSync aus bekomm ich zwar eine höhere Framerate, aber der Einbruch der FPS ist immernoch da.

Wenn das Programm läuft, ohne VSync, habe ich 100 FPS. Wenn ich dann aber auch noch auf die Gegner baller, bricht es auf ~40 FPS ein.

Wie gesagt, beim Laptop habe ich Stabile ~60 FPS und geht nicht auf ~40 FPS runter....

Kurz gesagt, das VSync hat mit meinem Prob GARNICHTS zu tun.



MfG

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group