Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ?

JaEmiX

Mitglied
Hallo,

mir is aufgefallen das ist allen Tutorials die ich gesehen habe, Tiles genutzt werden die 16x16, 32x32 oder 64x64 pixel groß sind, Minecraft ist da auch ein gutes Beispiel.
Warum ist das so? Gibt es da einen performance technischen Grund oder warum sind die nicht auch z.B 15x15 oder 53x53 groß?

lieber Grüße
 
Weil das alles vielfache eines Bytes sind und damit vom Prozessor viel schneller verarbeitet werden können. Du solltest dich vielleicht einfach mal die Grundlagen der Computertechnik einlesen. Dann wird vieles klarer.
 
Wie ist das denn wen man ein großes Spritesheet 1024x1024 nutzt und dieses in den Grafikarten Puffer schreibt(2d Spiel) und davon dann die Tile Texturen von z.B. 30 x 30 nimmt(bestimmt durch Rechteck auf diesem Bild), gibts da einen Unterschied oder ist es in diesem Fall egal?
 
Der "Prozessor" deiner Grafikkarte besteht im Wesentlichen aus wahnsinnig vielen kleinen Einzelprozessoren, die parallel und jeder für sich rechnen, wobei eine einzelne Recheneinheit nicht sonderlich schnell oder leistungsfähig ist. Erst wenn du Berechnungen in sehr viele unabhängige Teilrechnungen zerlegen kannst (was bei Grafikanwendungen typischerweise der Fall ist), macht der Einsatz einer Grafikkarte überhaupt Sinn.

Jedes Pixel ist im Wesentlichen das Ergebnis einer Kette von Operationen. Wenn du eine "bytekompatible" Länge hast (8, 16, 32, 64, ...), kann man die meisten Rechenoperationen mit recht einfachen Operationen wie UND und ODER erschlagen. Außerdem werden die Recheneinheiten am effizientesten ausgenutzt. Wenn wir mal annehmen, daß die Recheneinheiten (ALUs) intern mit 16 Bit arbeiten, dann kann ein 16 Pixel breites Tile bequem von einer ALU gerechnet werden. Wenn das Tile 32 Pixel breit ist, dann brauchst du zwei ALUs.

Wenn du jetzt aber z.B. ein 35 Pixel breites Tile willst, dann brauchst du drei ALUs, wobei aber eine ALU bloß zwei Pixel rechnet und damit nur zu 2/16 * 100% ausgelastet ist. Meist lebt man mit 32 Pixeln dann besser, ist ja nur geringfügig kleiner, aber dafür ist das Bild schneller/effizienter berechnet. Insbesondere für Handyanwendungen, die auf schwachbrüstiger Sparhardware laufen, ist das gut.


Das ist jedenfalls daß, was mir aufgrund meines Halbwissens über Hardware als mögliche Erklärung einfällt. Ich weiß zwar ein wenig über den Aufbau von Hardware, aber Leute die z.B. OpenGL oder ähnliches geschrieben haben wissen da ganz sicher weitaus besser Bescheid.
 
Der "Prozessor" deiner Grafikkarte besteht im Wesentlichen aus wahnsinnig vielen kleinen Einzelprozessoren, die parallel und jeder für sich rechnen, wobei eine einzelne Recheneinheit nicht sonderlich schnell oder leistungsfähig ist. Erst wenn du Berechnungen in sehr viele unabhängige Teilrechnungen zerlegen kannst (was bei Grafikanwendungen typischerweise der Fall ist), macht der Einsatz einer Grafikkarte überhaupt Sinn.

Jedes Pixel ist im Wesentlichen das Ergebnis einer Kette von Operationen. Wenn du eine "bytekompatible" Länge hast (8, 16, 32, 64, ...), kann man die meisten Rechenoperationen mit recht einfachen Operationen wie UND und ODER erschlagen. Außerdem werden die Recheneinheiten am effizientesten ausgenutzt. Wenn wir mal annehmen, daß die Recheneinheiten (ALUs) intern mit 16 Bit arbeiten, dann kann ein 16 Pixel breites Tile bequem von einer ALU gerechnet werden. Wenn das Tile 32 Pixel breit ist, dann brauchst du zwei ALUs.

Wenn du jetzt aber z.B. ein 35 Pixel breites Tile willst, dann brauchst du drei ALUs, wobei aber eine ALU bloß zwei Pixel rechnet und damit nur zu 2/16 * 100% ausgelastet ist. Meist lebt man mit 32 Pixeln dann besser, ist ja nur geringfügig kleiner, aber dafür ist das Bild schneller/effizienter berechnet. Insbesondere für Handyanwendungen, die auf schwachbrüstiger Sparhardware laufen, ist das gut.


Das ist jedenfalls daß, was mir aufgrund meines Halbwissens über Hardware als mögliche Erklärung einfällt. Ich weiß zwar ein wenig über den Aufbau von Hardware, aber Leute die z.B. OpenGL oder ähnliches geschrieben haben wissen da ganz sicher weitaus besser Bescheid.

super danke dir.

Es war eigentlich so das ich genau das dem
Gaaammmler
gesagt hatte aber es nicht so technisch erklären konnte.

Danke schön für diese mega Antwort 🙂!
 
Noch eine kleine Ergänzung zu @White_Fox sehr kompetenter Antwort:
Soweit ich weiß, besitzen die Grafikkarten auch kleinere "Execution Units", die wohl genau 32x32 Pixel groß sind und den selben Code verwenden --> so viele Pixel verarbeitet quasi eine "Execution Unit" (ich glaube die hießen in Wirklichkeit "Warps") gleichzeitig.

Wenn man jetzt weniger als 32x32 Pixel nutzt oder kein Vielfaches von 32, dann wird die Performance dahingehend etwas einbrechen, dass die Grafikkarte ihre Warps nicht voll nutzen kann.
Beispiel: 33x33 Pixel --> man braucht 4 Warps (also 64x64 Pixel) --> man nutzt aber nur 1.089 von den 4.096 Pixeln, d.h. man hat einen (Performance-) "Verlust" von 73%.
Dazu kommen die vielen Gründe, die @White_Fox schon alle genannt hat.

Noch 2 Links dazu:
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben