VRAM et "planar mode"

Discussions techniques et Pixel Art en 9 bits.

Modérateurs : SirG, Redfield1, shubibiman, Laucops

Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

VRAM et "planar mode"

Message 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 ??
Avatar de l’utilisateur
Kaminari
Modérateur
Messages : 7049
Inscription : ven. 24 sept. 2004 19:36
Contact :

Message 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.
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message 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à !
Avatar de l’utilisateur
El magnifico
NECrophage
Messages : 1481
Inscription : mer. 09 août 2006 14:35
Localisation : Nantes -Bretagne

Message par El magnifico »

Excusez ma "crétinitude" mais pourquoi utilisaient-ils un système si complexe ?
Avatar de l’utilisateur
Kaminari
Modérateur
Messages : 7049
Inscription : ven. 24 sept. 2004 19:36
Contact :

Message par Kaminari »

Gain de RAM et vitesse d'affichage plus rapide pour la 2D avec peu de couleurs.
Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message 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
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

Merci à  tous pour ces explication ...
Avatar de l’utilisateur
Adoru
NECrophile
Messages : 946
Inscription : dim. 01 mai 2005 03:02
Localisation : RP - FRANCE

Message par Adoru »

Je pencherais plus pour la Saturn que la Snes mais cela serait a vérifier vu l'heure de mon post...
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message 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 !
Vive la Supergrafx !!!
Avatar de l’utilisateur
shubibiman
Administrateur
Messages : 16393
Inscription : jeu. 23 sept. 2004 14:26
Localisation : Meet me at Shubibi's

Message par shubibiman »

Les discussions des sections "Consoles NEC", "Technique" et "Hiscore" ne sont jamais poubellisées. Pas de soucis à  te faire.
"You are truly the PCE game clearing master"

*****Membre du FLPCE Canal Historique*****
Avatar de l’utilisateur
SirG
Administrateur
Messages : 5089
Inscription : lun. 20 sept. 2004 20:39
Localisation : Dans un labyrinthe

Message 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.
Justin Batable
Avatar de l’utilisateur
dudule
NECromancer
Messages : 3111
Inscription : sam. 25 déc. 2004 21:06

Message 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.
<a><img></a><br>
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

Merci dudule, c'est en effet ce que je suggerais...
Vive la Supergrafx !!!
Avatar de l’utilisateur
Redfield1
Administrateur
Messages : 6218
Inscription : mar. 21 sept. 2004 05:08
Localisation : Aero-City

Message 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 ...
Avatar de l’utilisateur
peperocket
NECrophage
Messages : 1555
Inscription : lun. 23 mai 2005 00:17
Localisation : Dans mes charentaises

Message par peperocket »

Merci mon choupinet, je vais m'occuper de ça !
Vive la Supergrafx !!!
Répondre