Ce billet fait partie de la série « Dirty Hacky ». Le but de cette série est un objet critique sur les astuces de web-développement, et n'a pas pour vocation d'être une recette définitive, mais d'attirer l'audience par la polémique technique.
BANG! BANG! BANG!
- Je parse en HTML .357 S&W
- Commentaires conditionnels
- Magouilles dans les CSS
- Des confettis troués en CSS
- Liens serrés dans la police
- Des Bleus et des Boss
- Exécutions très rapides
- Le script des bas-fonds
- Préfixes frelatés
Le sprite canal historique
Note Importante du service Juridique : Les avocats de la production tiennent à préciser que le terme « sprite » désigne une technique et nullement une boisson gazeuse ou ses produits dérivés. Ce texte ne remet nullement en cause les trademark Sprite®, copyrights, industrials secrets et derivative rights détenus par The Coca-Cola Company, ni ne veut constituer une contrefaçon ou incitation à la contrefaçon.
Techniquement, sur les ordinateurs familiaux historiques de la génération 16/32 bits, un sprite est un objet graphique directement généré par le coprocesseur vidéo et qui ne laisse pas de place dans le raster de l'image affichée. À une époque où les accès RAM étaient couteux tout comme la moindre opération graphique, cette possibilité technique fut bien utile.
Oui, en cette ère de la Trois Dé triomphante jusque sur nos écrans de cinémas, ces considérations de graphisme 2D, utilisant des mémoires en raster ne doivent pas parler aux pitis jeuniots. Et pourtant, le sprite était une révolution qui subsiste encore de nos jours sur les ordinateurs de bureau.
La contrepartie non-directe était le bob sur Amiga (blitter object), et le hardware tiling sur consoles de jeux. Bien souvent, le curseur de votre souris est un sprite hardware, géré par votre carte vidéo, l'Amiga a été pionnier dans cette optimisation comme illustré ci-dessus. La technique des sprites permettait de créer de très nombreux effets, elle était au cœur de la Neo-Geo.
Leur méthode de stockage en mémoire est intéressante pour la suite : chaque dessin était stockée en mémoire dans une tuile d'une image, laquelle était en général de la taille de l'écran affichée. L'offset mémoire du début de la tuile était directement adressée au copro graphique, ou copiées/dupliquées entre les différents espaces mémoires pour les blobs, comme vous pouvez le voir sur cet exemple. Le changement d'aspect du sprite se faisait par un bête décalage d'adresse.
L'ère du sprite web
C'est cette philosophie qui a été adaptée au web, afin d'industrialiser le stockage, mais aussi de limiter au maximum le nombre de requêtes HTTP utilisées uniquement pour le décor. Plutôt qu'avoir 20 images à charger, n'en charger qu'une seule, et montrer 20 petites fenêtres différentes, comme le montre l'exemple à droite avec Google (repris du tutoriel de Nicolas Hoffmann pour Alsacréation). Une technique à la fois de layout html, de programmation css et de calculs de placements, devenus sibyllins par des outils web vous pré-mâchant le travail.
Au départ, je trouvais l’idée géniale. Il faut dire que j’ai toujours été attiré par les arts sacrés et mystiques par les demomakers. J’étais un fou de ce que pouvais faire mon Amiga. Je passais des heures à tenter de comprendre ces astuces en décortiquant la RAM les démos et les jeux (Team17 et Psygnosis).
(spécial big-up à Cyril Lambin, il se reconnaîtra dans ce premier épisode didactique et dans celui-ci qui résume bien le sujet).
Alors imaginez mon émotion quand j'ai entendu à nouveau parler de sprites, mais désormais appliqués aux navigateurs.
Caveat
Désolé, mais quand je parle de la vieille époque, j'ai des relents de latin qui remontent.
Néanmoins, cette méthode peut se montrer lourd, et les sprites se travaillent en pixels, avec des dimensions pré-définies, il rappelle une époque où les pixels étaient gros, et pas carrés, mais ovalescents de part le balayage des tubes cathodiques.
Le principe même du sprite pour les éléments décoratif est amené à disparaitre car la notion de pixel devient très relative avec les écrans à haute-densité. À mon sens, il est évident que nous allons basculer vers du design purement vectoriel, et là, nous avons deux outils qui ont les mêmes avantages (excepté le support) :
- le SVG, puisqu'on peut y mettre plusieurs images qu'on peut ancrer, et y faire référence via CSS
- les polices vectorielles avec support couleur dans un plan à usage interne, et là, revoir ce que je disais sur les emoji. À ce sujet, j'en remets une couche la semaine prochaine.
La technique fut belle, mais elle subira le même sort que les sprites hardwares quand les jeux sont passés à la 3D : un concept intéressant, passionnant pour son chalenge technique, mais qui va se marginaliser.
Origine | GOOD |
Élégance | GOOD |
Modernité | ACTUAL |
Postérité | MIDDLE |
To be continued
Les polices ligaturées, serait-ce la meilleure solution possible aux emoji ? En attendant, mon flingue est libéré, et je suis de la vieille école, je tire d'abord, je pose les questions ↓ ici-bas.
3 réactions
1 De Mitch 74 - 02/05/2013, 22:53
La technique du sprite est toujours utilisable, et bien que je sois aussi ouvert au vectoriel que tout un chacun, il faut lui reconnaître deux énormes qualités:
- une énorme économie de ressources réseau: en effet, l'exemple Google est parlant, on peut utiliser un PNG palettisé pour réunir ces éléments - ce qui réduit non seulement le nombre de requêtes, mais aussi la quantité de données transmises: big ++ à tous les étages! De plus, la ressource ainsi chargée est facilement mise en cache.
- une énorme économie de ressources CPU et RAM: on n'a toujours qu'un seul élément, au poids de rendu quasi-nul, dont on déplace la fenêtre de rendu en fonction des coordonnées logiques visibles - une technique désormais accélérée par tous les navigateurs, qui ont tendance à simplement accorder un (ou 2) polygone à un élément de type bloc et à y affecter l'image raster comme texture, une technique plus vieille que la 3Dfx.
Après, c'est vrai que charger un élément vectoriel permet de s'affranchir de la résolution de l'écran, de zoomer comme un malade sur n'importe quelle forme sans la perdre dans un nuage d'interpolation, et peut, dans le cas de formes complexes ou comportant beaucoup de couleurs (ou les deux) de diminuer la quantité de données de manière incroyable...
Mais, pour faire un simple p'tit fond de bouton à taille fixe qui s'illumine au survol et qui marche même sur un vieux mobile au navigateur dépassé sans pour autant mettre son vieux CPU à genoux, c'est quand même bien pratique.
Après, les consciencieux prévoiront la version vectorielle pour les navigateurs top-de-top avec accélération WebGL, avec un mode fallback en CSS3 pour les navigateurs récents de chez 'Crosoft, et la version old-skool pour les gars coincés sous IE8 ou une vieille version de Safari (comme l'iPhone 3G de ma femme). J'sais pas, mais ce n'est pas parce que les navigateurs actuels sont plein de super gadgets bling-bling qu'il faut fiche à la porte les milliers de gens connectés en Edge à qui une page de texte avec 4 boutons colorés suffit à faire le bonheur.
2 De da scritch net works - 15/05/2013, 08:07
Dirty Hacky IV : Liens serrés dans la Police
Ouep. c'est comme un tour de magie : quand j'assemble toutes ces lettres, le dossier fait un très beau schéma. Comment ça, trop serrées mes menottes ? ol.listserif { list-style-type: upper-roman } ol.listserif li:before { font-family : serif }...
3 De da scritch net works - 28/05/2013, 13:59
Dirty Hacky V : Des Bleus et des Boss
T'as voulu un site vraiment pas cher, t'as mégoté sur les salaires, t'auras un site vraiment de merde. Heureux ?...