JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=1a29ce95784b05ff41558c56104cc2a0Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Frage zur Performance

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 16:46    Titel: Frage zur Performance Antworten mit Zitat

Hallo ich hab mal eine Frage zur Performance (einige wissen vielleicht, dass ich darüber ne Studienarbeit schreibe!!)

Ich hab nun mehrere Beispiele und hab die im Fenstermodus laufen. Nun ist mir dabei aufgefallen, dass bei Objekten ohne Textur der Performanceunterschied zwischen 16bit und 32bit Farbtiefe nur sehr gering ist.
Nun hab ich aber ein Beispiel mit Texturen und Mipmapping. Da ist der Unterschied ca 1:3.
Kann mir jemand erläutern, woran das liegen kann? Also kostet das Rendern von Texturen soviel Zeit je nach Farbtiefe oder das Mipmapping selbst?

Thx!

P.S: Wenn jemand Sites dazu kennt, bitte hier posten Wink
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 01.05.2005, 16:54    Titel: Antworten mit Zitat

Texturen auszulesen und je nach Texturkoordinate zu mappen kostet Zeit, je feiner das Mapping (z.B.: Textur wiederholt sich sehr oft) kann die Performance stark sinken.

Auch bedeutet ein zusatz an Texturkoordinaten bei den Vertexen ein höherer Overhead der an die Grafikkarte geht.

Beim Mipmapping muss ebenfalls ausgewählt werden welche Mipmapstufe angezeigt werden soll und evtl. eine Vermischung aus der vorherigen Stufe und der aktuellen Stufe (ansonsten hat man einen schrecklichen Übergang bei zu wenig Mipmapstufen).
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 17:36    Titel: Antworten mit Zitat

Hilfe,

habe grade dieselbe Szene mit Mipmapping und Texturen in MDX und DX gerendert.

Das schreckliche ist, dass meine Managed DirectX Anwendung in C# glatt schneller ist.

680fps zu 650fps mit C++.

Kann mir jemand helfen und den Performancebottleneck in meinem C++ Dingens zu finden?`

Ich schick das Projekt gerne per Mail!!!!!!!!!!!!!!!!!!!!!!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 18:06    Titel: Antworten mit Zitat

send dein c++ projekt mal per mail an: patrick_ullmann@web.de

evtl. kann ich noch was rausholen Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 18:15    Titel: Antworten mit Zitat

Hi Patrick,

habs Dir geschickt. Ich bin mir sicher, dass du das hinkriegst.
So wie es ja aussieht, hab ichs voll verhunzt!

Naja, ich mach das auch noch net so lang Wink
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 18:37    Titel: Antworten mit Zitat

Paar Dinge die mir direkt ins Auge gekommen sind:

main.cpp
1.
CPP:
Direct3D = new CDirect3D();
Gute heimliche Bremse. Ein zugriff auf dynamisch initialisieten Speicher dauert idR. 25% länger als Speicher der Direkt angelegt wurde.

2.
CPP:
        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);

         if(msg.message == WM_QUIT)
            break;
        }
        else
        {                     
         Render();
        }
Du willst mehr FPS? dann mach mal das else weg. Auch wenn es Nachrichten gibt, heißt das noch lange nicht, das er nicht rendern darf.

3. SetupScene jeden Frame? Bissel viel overhead nicht wahr wenn sich die Kamera nie ändert und die Projektion sowieso nie? 1. in die initialisierung rein und fertig und nicht jeden Frame bei Render aufrufen!!!

4. Direct3D->GetDevice() wunderbar. mal ehrlich: mach doch besser alles in der Klasse Public oder wenigstens diese funktion inline. Funktionsaufrufe kosten auch zeit

5. Deinen ganzen FPS counter raus da! Wenn du willst geb ich dir mal einen etwas "besseren", das mit den Dateien ist eine Zumutung für jede FPS.

6. Vorberechnungen sparen sehr viel Zeit! 2*D3DX_PI/10*temp/1000 sowas kann man größtenteils selber errechnen, so muss es die Laufzeit nicht mehr tun für dich.

7. Dein Bus wirds dir nun danken:
CPP:
void DrawBox(D3DXMATRIX WorldMatrix, int i)
{
           lpD3DDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);
         lpD3DDevice->SetMaterial(&mat);
         lpD3DDevice->SetTexture(0,cube->GetTexture(i));
         cube->GetMesh()->DrawSubset(0);
}

Wie oft musst Du ein einmaliges Material setzen? hmnn... 1x und nicht 64x! Also: SetMaterial in die init-funktion.

Texturen, wieviele Texturen unterscheiden sich? Musst du für jeden Cube eine Textur setzen? Sortier die Cubes nach Texturen und rendere diese, so kannst Du ca. 20% sinnlose Texturswitches ersparen und es gibt weniger Traffic auf deinem Bus.

8. ID3DXMesh gillt nicht grade als Blockbuster unter der Performance! Ein IndexBuffer und 1 VertexBuffer reicht komplett für das ganze Programm, das einzige was sich unterscheidet sind die Texutren und die haben damit ja herzlichst wenig zu tun. Deshalb 1x pro Frame die indices setzen, textur setzen cubes rendern und nächste textur setzen usw.

9. ein static wirkt oft auch etwas Wink

Damit solltest Du eigentlich locker 150 FPS mehr drauf bekommen.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 18:55    Titel: Antworten mit Zitat

Danke für die Tipps,

das mit den Texturen ist gewollt. Da sieht man zwar mehrmals die gleichen, aber das liegt daran, dass wir eigentlich alle verschieden haben wollten, aber irgendwann keine Lust mehr hatten. Stell dir einfach vor, es gibt keine doppelt Wink

Zu den Vorberechnungen. Das Beispiel ist aus OpenGL portiert. Da sind die Berechnungen genauso. Ich schlag mal vor, dass wir das überall anpassen, damit die Dinger auch vergleichbar bleiben.
Der Frameszähler speichert Gott sei Dank erst nach 60sek und beendet das ganze. Außerdem hab ich den so bekommen, damit alles vergleichbar bleibt!

Das mit den Materials, Licht änder ich. Ich werde auch den Mesh rausschmeißen. Die Funktionen änder ich auf public Attribute (hab den inline Kram noch net ganz gecheckt!)

Dank dir!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 01.05.2005, 20:48    Titel: Antworten mit Zitat

Ich könnte echt kotzen.
Jetzt weiß ich, warum Managed DirectX schneller war.

Vertraue niemals dem Windows Designer von Visual Studio .NET.
Der macht aus einer Auflösung von 800*600 eine von 792*566.
Dadurch kriegt MD ca 30fps mehr.

Jetzt hab ichs geändert und schwupps 30fps langsamer!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 02.05.2005, 08:06    Titel: Antworten mit Zitat

Ich würde dir empfehlen nicht in so hohen FPS bereichen zu testen. Packe deine Scene lieber so voll, dass du um die 60 fps hast. erst in dem bereich werden die werte anständig. Bei den hohen bereichen hast du zu viele schwankungen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 02.05.2005, 12:36    Titel: Antworten mit Zitat

Japp hab ich gemerkt.
Die Tests stehen schon lange fest.

Da das komplett als Projekt aufgezogen wurde, musste alles vorher festgelegt werden.

Die Ergebnisse müssen jetzt nur gescheit erläutert werden.
Die Schwankungen sind schon recht stark, das ist wahr, aber wir ermitteln nur Mittelwerte und die sind ausreichend genau!!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum