Page 1 sur 2

VRAM et "planar mode"

Publié : mer. 10 janv. 2007 23:55
par peperocket
En me documentant sur la composition des tiles en VRAM voici ce que j'ai lu :
The PC-Engine use a planar mode rather than the well known chunky
mode of PCs, if you already have some experience decoding Atari ST
or Amiga gfx, you should easily understand the following.
- Que veut dire "PLANAR" en français ??

- Quelqu'un peut me donner, sans trop rentrer dans les details, la definition du "planar mode" qui est apparemant utilisé par la pc-engine ??

Publié : jeu. 11 janv. 2007 00:48
par Kaminari
Ben, ça veut dire "planar" :)

https://en.wikipedia.org/wiki/Planar_(c ... _graphics)

Il existe pas mal de docs à propos des modes chunky/planar sur les sites Amiga. En anglais évidemment, quoiqu'en te renseignant auprès des demomakers francophones tu devrais pouvoir obtenir plus d'infos.

Publié : jeu. 11 janv. 2007 10:19
par MooZ
L'image est découpéé par plan, c'est à  dire par bits. Ca n'a rien à  voir avec le vocabulaire du monde de la photo. Par exemple les tiles sont encodés par blocs de 8 pixels par 8 pixels et les pixels ne sont pas représéntés sous forme d'entiers. Sachant qu'on utilise des palettes sur pce, les pixels ne contiennent pas les valeurs RGB des couleurs, mais l'index dans la palette. Comme les palettes contiennent 16 couleurs, les pixels sont encodes sur 4 bits. Or si on utilise le mode "chunky", soit on perd de la place (8-4=4 bits) en faisant :

Code : Tout sélectionner

octet[0]=pixel[x=0][y=0]
octet[1]=pixel[x=1][y=0]
...
Soit on concatene:

Code : Tout sélectionner

octet[0]=(pixel[x=0][y=0] << 4) | pixel[x=1][y=0]
octet[1]=(pixel[x=2][y=0] << 4) | pixel[x=3][y=0]
...
A première vue la concaténation a l'air d'être la solution optimale, mais je pense qu'à  l'époque, traiter ce genre de données aurait complexifier le vdc. Et puis si on augmente la taille des palette, il faut tout refaire. Par exemple, si on passe à  32 couleurs, la concaténation "déborde" sur l'octet suivant.
Il reste donc l'encodage par "plans" (bits). Le premier octet contient le premier bit des pixels de la premiere ligne (qui contient 8 pixels pour les tiles et 16 pour les sprites). La différence entre les tiles et les sprites, est que les plans tiles sont entrelacés (si je ne raconte pas de bétises). C'est à  dire qu'on aura d'abord les 2 premiers bits de chaque lignes, puis les bits 3 et 4. Alors que pour les sprites, les plans se succèdent.
Tiles:

Code : Tout sélectionner

// 2 premiers bits
octet[0] = bit0, y=0, x=[0,7]
octet[1] = bit1, y=0, x=[0,7]
octet[2] = bit0, y=1, x=[0,7]
octet[3] = bit1, y=1, x=[0,7]
...
octet[14] = bit0, y=7, x=[0,7]
octet[15] = bit1, y=7, x=[0,7]
// Les 2 restants
octet[16] = bit2, y=0, x=[0,7]
octet[17] = bit3, y=0, x=[0,7]
octet[18] = bit2, y=1, x=[0,7]
octet[19] = bit3, y=2, x=[0,7]
....
Avec ce type d'encodage, augmenter la taille des palettes ne coutent presque rien. On a juste à  lire des octets en plus.

Pour les sprites, les lignes font 16 pixels donc:

Code : Tout sélectionner

octet[0] = bit0, y=0, x=[0,7]
octet[1] = bit0, y=0, x=[8,15]
octet[2] = bit1, y=0, x=[0,7]
octet[3] = bit1, y=0, x=[8,15]
octet[4] = bit2, y=0, x=[0,7]
octet[5] = bit2, y=0, x=[8,15]
octet[6] = bit3, y=0, x=[0,7]
octet[7] = bit3, y=0, x=[8,15]
// Seconde ligne
octet[8]  = bit0, y=1, x=[0,7]
octet[9]  = bit0, y=1, x=[8,15]
octet[10] = bit1, y=1, x=[0,7]
octet[11] = bit1, y=1, x=[8,15]
octet[12] = bit2, y=1, x=[0,7]
octet[13] = bit2, y=1, x=[8,15]
octet[14] = bit3, y=1, x=[0,7]
octet[15] = bit3, y=1, x=[8,15]
...

Code : Tout sélectionner

bitA, y=B, x=[C,D]
correspond à  :

Code : Tout sélectionner

octet = 0;
for(i=0; i<8; ++i) {
    bit = pixel[C+i][B] >> A;
    octet |= (bit << i);
}
Par contre, là  j'ai un blanc.. je ne me rappelle plus si l'ordre dans l'octet est:
x=0,x=1,...,x=7 ou x=7,x=6,...x=0

Voilà !

Publié : jeu. 11 janv. 2007 10:21
par El magnifico
Excusez ma "crétinitude" mais pourquoi utilisaient-ils un système si complexe ?

Publié : ven. 12 janv. 2007 02:58
par Kaminari
Gain de RAM et vitesse d'affichage plus rapide pour la 2D avec peu de couleurs.

Publié : ven. 12 janv. 2007 21:49
par xav
C'est aussi sensiblement plus difficile a implémenter en éléctronique numérique qu'un mode linéaire.
En contrepartie, quand on travaille avec des bloc graphique (les tiles de 8x8), c'est infiniment plus efficace.
Toute les machines de l'epoque utilisait un format planar.

Il faudras attendre l'advance (ou la SNES, j'ai un doute) pour avoir une machine 2D qui propose un mode linéaire en plus des planars

Publié : mer. 17 janv. 2007 22:35
par peperocket
Merci à  tous pour ces explication ...

Publié : dim. 21 janv. 2007 03:55
par Adoru
Je pencherais plus pour la Saturn que la Snes mais cela serait a vérifier vu l'heure de mon post...

Publié : mer. 27 août 2008 10:23
par peperocket
Il serait bien de conserver l'explication de mooz sur le mode planar car je pense que cette excellente explication pourrait servir à  bien d'autre et ça serait dommage qu'elle finisse a la poubelle, ainsi que d'autres explications d'ailleur que ce soit de mooz ou de xav.

On pourrait créer un topic epinglé programmation avec les differentes explications postés sur le forum technique, donner des liens, ça permettrait de classer et de nettoyer un peu la section technique.

Je dis ça parceque je suis à  fond prog en ce moment et le forum regorge de petites explications quil ne sont pas evidentes à  retrouver et pourtant si utiles.

Qu'en pensez vous mes cher admins, je suis pret à  vous donner un coup de main !

Publié : mer. 27 août 2008 12:10
par shubibiman
Les discussions des sections "Consoles NEC", "Technique" et "Hiscore" ne sont jamais poubellisées. Pas de soucis à  te faire.

Publié : mer. 27 août 2008 13:24
par SirG
D'ailleurs, l'allégement des forums ne se fait qu'après relecture complète pour vérifier que nous ne virions rien d'utile. Tout ça est d'abord stocké sur une zone du forum invisible à  vos yeux (la poubelle) pour que chaque administrateur puisse vérifier ce qui a été supprimé du forum public. Ensuite seulement, le sujet ou les posts divisés du sujet sont définitivement éliminés de la base.

Publié : jeu. 28 août 2008 13:08
par dudule
nan mes le probleme c'est que les trucs de prog, sauf en cas de demo, personne ne post et p'tetre qu'un post-it special prog serait bien.

Publié : jeu. 28 août 2008 13:40
par peperocket
Merci dudule, c'est en effet ce que je suggerais...

Publié : jeu. 28 août 2008 13:43
par Redfield1
Si quelqu'un se sent de faire un synthèse a base de copier/coller dans un nouveau thread, je l'épingle sans soucis.

... Red ...

Publié : jeu. 28 août 2008 13:51
par peperocket
Merci mon choupinet, je vais m'occuper de ça !