Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

1

18.01.2008, 12:08

Leistung DX

Hallo

Ich schreibe an einer kleineren Engine, die mir mehr als Übung dient, um mich in DX einzuarbeiten.

Nun bin ich von der Framerate noch nicht ganz so überzeugt.
Nehmen wir als Beispiel eine Tilemap.

Vorab noch mein System: Centrino 2GHZ, 2GB RAM, Geforce 6800 Go mit 256 Speicher

Ich habe sagen wir 32x32 Tiles von 60x60 Pixel, die den Bilschirm füllen und ich habe so 1000 FPS im Fenstermodus und im Vollbildschirm sogar nur noch 800 FPS.

Nun, das eigentlich ist ja nicht schlecht, aber was ich hald Probleme habe mir das vorzustellen ist, dass ich ja "nur" ca. 2000 textuierte Dreiecke zeichne.
Und das noch statisch. Und da habe ich noch keine "normalen" Sprites, wie Gegner, oder auch noch keine Partikel, die ja dann auch zu Hauf vorkommen sollen.
Im Vergleich habe ich bei Hurrican ( http://marcus.gurxite.de/wp-content/uploads/2007/07/hurricane4.jpg ), die auch in etwa 30x30 Tiles haben immernoch so 700 - 800 FPS und da findet noch einiges statt.

Und in modernen Spielen werden ja viel grössere Szenen gerendert, wo ich denke 2000 Dreiecke einfach nur ein kleiner Bruchteil sind, aber dennoch recht schnell laufen.

Habe ich da einfach nur eine falsche Vorstellung von modernen Grafikkarten oder muss man ,wenn man auch ne einfache 2D - Engine schreibt extrem viel optimieren? - Ich war der Meinung, dass , für das ich DX brauche ein Klacks für meine Graka ist/sein sollte.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

18.01.2008, 13:47

Hi,

mal rechnen:
32x32 Sprites mit jeweils 60x60 Pixeln, vermutlich 4 Bytes pro Pixel. D.h. es müssen pro Zeichenvorgang mindestens 32x32x60x60x4 Bytes gelesen (aus Texturen) und ebenso viele geschrieben (in den Frame-Buffer) werden. Das sind schon ca. 28 MB insgesamt. Sobald du Alpha-Blending benutzt, wird es gleich nochmal mehr, da für jeden zu schreibenden Pixel auch noch der alte Wert aus dem Frame-Buffer gelesen werden muss.

Die GeForce 6800 Go hat eine Speicherbandbreite von 22,4 GB/s.
Die maximale Framerate, die du rausholen kannst, ist dann allein schon durch die Speicherbandbreite auf 22,4 GB/s / 28 MB begrenzt, was knapp über 800 FPS ergibt.
Es wird wahrscheinlich noch einiges gecached, so dass es etwas mehr wird, aber das weiß ich nicht genau. Aber auf der anderen Seite muss z.B. auch noch der Frame-Buffer geleert werden, was wieder mehr Traffic erzeugt.

Bei solchen 2D-Anwendungen kommt es jedenfalls fast nur auf den Speicher an - es sei denn, du benutzt komplizierte Shader oder so. Was du also tun kannst ist, möglichst wenig Overdraw zu erzeugen, so dass im Optimalfall jeder Pixel nur von einem einzigen Dreieck überdeckt wird (sobald du Alpha-Blending benutzt, ist das natürlich nicht mehr machbar).

Partikel sind eigentlich unbedenklich, da sie im Allgemeinen sehr klein sind. Wenn du sie effizient zeichnest, also viele in einen Vertex-Buffer packst und auf einmal renderst, dann sollten sie die Render-Zeit kaum beeinflussen. Natürlich musst du die Partikel auch noch bewegen.

Anonymous

unregistriert

3

18.01.2008, 13:51

Hi,

ich weis jetzt nicht wie du deine Tile Map aufbaust. Wahrscheinlich löschst du denn Bildschirm nach jedem Durchgang und baust Ihn neu auf was in einer "normalen" 3D Szene nicht der Fall ist ist, hier werden die Objekte nur einmal gesetzt. Bei 2D ist das natürlich zum Teil nötig wegen dem "Prinzip" von 2D, wobei natürlich eine Tilemap die meiste Zeit kostet da bei dir zb 1024 Tiles pro Durchgang gezeichnet werden. Um einiges schneller geht es natürlich wenn du mit Tileblöcken arbeitest. D.h. du erzeugst 512*512 oder 1024*1024er Texturen und zeichnest deine Tiles bevor der Level beginnt auf diese "grossen" Megatiles. So kannst du immer noch alle Ebenen bei jedem Durchgang löschen, da deine Graka aber statt 1024 kleinen nur noch eine Handvoll grosse zeichnen muss sollte deine FPS Rate gewaltig noch oben gehen.

cu

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

18.01.2008, 13:54

Zitat von »"Abrexxes"«

sollte deine FPS Rate gewaltig noch oben gehen.

Dein Tipp ist natürlich gut, aber seine Framerate ist, wie ich eben geschrieben habe, aus speichertechnischen Gründen gar nicht mehr bedeutend höher zu kriegen.

Anonymous

unregistriert

5

18.01.2008, 18:55

Zitat von »"David Scherfgen"«

Zitat von »"Abrexxes"«

sollte deine FPS Rate gewaltig noch oben gehen.

Dein Tipp ist natürlich gut, aber seine Framerate ist, wie ich eben geschrieben habe, aus speichertechnischen Gründen gar nicht mehr bedeutend höher zu kriegen.
Noe, der Tipp is Quatsch, wenn man sich mal ansieht, was die TnL Karten fuer Durchsaetze bei den Vertices haben. Er hat ja schon 900 Pixel per Vertex, was ein sehr hohes Verhaeltnis ist. f'`8k


Gruß, TGGC (making great games since 1992)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

18.01.2008, 19:01

OK, stimmt.
Schaden tut's natürlich trotzdem nicht, auch wenn ich es nicht so machen würde, weil es mir zu viel Arbeit wäre ;)
Fazit also: schneller geht's mit dieser Karte gar nicht.

7

19.01.2008, 16:40

Darf ich also annehmen, dass wenn ich 3D Modelle statt Sprites verwende, dass der Grafikkarte sehr wenig ausmacht, solange die Modelle nicht extrem zu viele Polygone haben? Das die Geschwindigkeit dabei mehr durch die Füllrate an Pixeln und fast gar nicht wegen der Menge der zu berechnenden Vertices gebremst wird?
Denn bei einem isometrischen Spiel z.b. hat man mit 3D Modellen weniger Probleme, alleine schon weil man dann schön den ZBuffer und so benutzen kann.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

8

19.01.2008, 16:45

Zwei Dreiecke mit einer Textur drauf sind doch auch ein (zugegeben recht einfaches) 3D Modell. Ich seh da jetzt keinen prinzipiellen Unterschied. f'`8k

[ ] Autocogito


Gruß, TGGC (making great games since 1992)

9

19.01.2008, 16:48

Jo das ist klar, für die Grafikkarte ist das schon die ganze Zeit echtes 3D.
Aber gibt es da evtl. irgendwo n Wert oder so, woran man sich orientieren kann, was so das Verhältnis von Pixeln, Vertexen angeht? Oder ist das jetzt bei jeder Grafiikarte extrem verschieden?
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

10

19.01.2008, 17:08

So wahnsinnig Unterschiedlich wird das nicht sein. Wer Spass hat brauch sich ja nur Werte von der neusten und eine aelteren ATI und NVDIA raussuchen und es ausrechnen. Ich hab das mal fuer meine Geforce 2 (war es glaub ich) gemacht, und da kam sowas wie 12 Texel/Vertex raus. f'`8k


Gruß, TGGC (making great games since 1992)

Werbeanzeige