Du bist nicht angemeldet.

Werbeanzeige

1

29.05.2018, 17:17

OpenGL Performance: viele kleine Texture (Regions) vs. wenige große Texturen

Hallo liebe Community,

Aktuell stellt sich mir die Frage, was denn für die Grafikkarte, oder besser gesagt OpenGL, schneller ist.
Ist es (bei 2D Anwendungen) schneller viele kleine Texture Regions zu rendern (je 32x32 Pixel) oder "Paging" zu betreiben und große Texturen zu zeichnen, dafür wesentlich weniger (vllt. 10 Stück)?
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

David Scherfgen

Administrator

Beiträge: 10 167

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.05.2018, 17:25

Generell kann man sagen: Jede Änderung des "States", wozu auch die aktive Textur zählt (neben Shader und Shaderparametern), ist teuer und sollte, wenn möglich, eingespart werden. Wenige große Texturen sollten also besser sein als viele kleine, zwischen denen du oft hin und her schalten musst.

3

29.05.2018, 17:31

Das ist aber eine schnelle Antwort! Vielen Dank! :D
Aber wie sieht das denn bei Texture Regions aus, die auf z.B. 5 Texturen zeigen?
Kommt es dann auf die Render-Reihenfolge drauf an?
Und kosten Vertices quasi nichts oder macht die Masse auch etwas aus?
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

4

30.05.2018, 17:22

Es kommt (wie immer) ganz darauf an was dein Ziel ist und wie du OpenGl verwendest.
Hast du zB viele kleine Tiles mit der selben Größe (unter bestimmten Umständen muss es nicht mal die selbe Textur sein!) kannst du sehr gut Instancing verwenden und alles innerhalb eines draw-calls zeichnen.

Die Renderreihenfolge ist wichtig, allerdings erst merkbar ab einer bestimmten Anzahl an gerenderten Objekten. Für zB 200(je nach GPU weit mehr!) Objekte kann man problemlos depth-sorting verwenden, ohne sich groß Gedanken darüber zu machen.

Vertices kosten etwas, das teuerste sind allerdings fragments (im fragment-shader), da hier die Texturen tatsächlich geladen werden und das natürlich bei weitem mehr Ressourcen verbraucht.

Zu Texture-Regions habe ich leider keine Antwort, da mir nicht klar ist was genau du damit meinst? Ein Objekt das 5 Texturen enthält?

5

30.05.2018, 17:51

Danke für die Tipps!

Ein Texture Region ist ein Ausschnitt einer Texture, also eine "Region" der Textur.
Was genau verstehst du unter "Instancing"?
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

6

30.05.2018, 18:07

Instancing:
Viele Texturen die die selben Renderdaten verwenden, hier ein gutes Tutorial samt besserer Erklärung

Verwendest du zB eine Textur mit der selben größe die pro Frame öfter gezeichnet werden soll (was bei Tile-Grafiken oft der Fall ist) benötigst du nicht 100 draw-calls um die Textur 100 mal zu zeichnen, sondern stattdessen nur einen. Du fasst sie somit zusammen und ersparst dir unnötige Aufrufe

Wo genau besteht der Vorteil einer Texure-Region?

Lares

1x Contest-Sieger

  • Private Nachricht senden

7

03.06.2018, 04:31

Wo genau besteht der Vorteil einer Texure-Region?

Eigentlich für genau das von dir gegebene Beispiel. Innerhalb einer einzelnen Textur hast du mehrere verschiedene Tile-Grafiken. Wenn du die Spielwelt erstellst, kannst du dann sagen, dass die verschiedenen Instanzen des zu zeichnenden Objekts
a) an unterschiedlichen Positionen gezeichnet werden sollen
b) unterschiedliche Abschnitte der Textur anzeigen sollen
Dadurch kann die gesamte Spielwelt in einem einzigen Draw-Call gezeichnet werden (ohne dynamische Objekte wie Spielfiguren etc.)

Ein anderer Anwendungsfall ist für die Darstellung von Text. Sämtliche Buchstaben sind innerhalb einer Textur gespeichert und je nachdem welcher Buchstabe angezeigt werden soll, wird eine andere Region der Textur der entsprechenden Instanz zugewiesen.

8

03.06.2018, 11:52

also ein Spritesheet bzw Texture-Atlas?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Wheee321« (03.06.2018, 19:13)


Lares

1x Contest-Sieger

  • Private Nachricht senden

9

03.06.2018, 23:31

Genau, ein Spritesheet besteht aus mehreren texture regions.

10

12.06.2018, 20:32

Vielen Dank für eure Antworten! :)

Ja, genau das in etwa (wenn ich mich nicht irre) macht eine Texture Region. :D
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Werbeanzeige