16 Couleurs

16 Couleurs – graphisme & jeu vidéo


5 Commentaires

Making of de Red Eyes sur Sega Mega Drive

Crédit photo : @marexpo

En janvier 2019, Remute, musicien électro basé à Hambourg, annonçait la sortie au mois de mars de Technoptimistic, un album pour la Mega Drive exclusivement disponible en édition physique, une bonne vieille cartouche donc. Outre les pistes de musique elles-mêmes, on y trouverait une interface de type music-disk et un clip vidéo pour le morceau Red Eyes qui tournerait en temps réel sur la console. Pour cela, un an auparavant il avait fait appel à Kabuto (le programmeur derrière la majorité du code de la très impressionnante démo de Titan pour la Mega Drive, Overdrive 2) et à moi-même pour la partie graphique. Difficile de refuser ce genre d’opportunité !

Graphismes 2D

Je commence par la partie la plus classique où il s’est surtout agit de garder en tête les capacités graphiques de la 16 bit de Sega, qui fête ses 30 ans cette année d’ailleurs : une résolution de 320×224 et jusqu’à 64 couleurs par plan (16 couleurs par tile) à choisir parmi une palette de seulement 512 couleurs (8 niveaux par composante RGB, comme ce bon vieil Atari STF). Pour produire les images j’ai utilisé Grafx2 qui est souvent la meilleure solution pour les plateformes old school grâce à ses fonctionnalités spécifiques.

Grafx2

Pour obtenir la trame assez originale du halo derrière le logo et d’autres éléments, j’ai eu recours à mon couteau suisse habituel, Imagemagick, ce dernier permettant en effet de générer des types de tramages sur mesure de bonne facture (voir à la fin du billet pour les instructions détaillées). À l’inverse, les résultats obtenus avec les algorithmes de Photoshop (diffusion, noise…) sont souvent décevants à cause du petit nombre de teintes disponible dans la palette de la Mega Drive.

Graphismes 3D

Le secret de cette partie c’est que la Mega Drive n’affiche pas réellement des scènes 3D comme on pourrait le croire à première vue, mais uniquement des polygones en 2D. Une technique similaire avait été utilisée par Oxygene pour leur démo STNICCC 2000 sur Atari ST. Tous les calculs de perspective, d’occlusion ou autres sont donc effectués auparavant. Pour autant, ça ne permet pas de s’affranchir des contraintes en matière de palette et surtout de complexité des scènes, puisque afficher des centaines de polygones, même 2D, à 25 images par seconde sur une machine qui n’a absolument pas été conçue pour afficher autre chose que des sprites et des tiles nécessite beaucoup de calculs et d’optimisation.

Nous avons discuté la possibilité d’utiliser un éclairage dynamique mais avons préféré y renoncer de peur que le résultat soit décevant au vu de la palette de couleurs limitée. Pour maintenir des performances correctes, je me suis efforcé de me limiter à quelques centaines de polygones généralement, qui est suffisamment léger mais permet néanmoins d’obtenir des scènes intéressantes. Au final le framerate des différentes séquences est bien meilleur qu’espéré initialement grâce aux talents d’optimisation de Kabuto. Pour plus de détails sur le fonctionnement du moteur de rendu des polygones, je ne peux que vous conseiller de vous référer aux explications très détaillés qu’il a écrites.

Blender

L’animation 3D a été entièrement modélisée et animée avec Blender avec l’objectif de générer une séquence d’images directement compatible avec les capacités de la Mega Drive : résolution et palette exactes, pas d’antialiasing, 16 couleurs par image maximum. Les valeurs RGB des matériaux ont été copié de Grafx2 pour s’assurer qu’elles étaient toutes compatibles avec la palette de 512 couleurs. Après avoir validé le workflow grâce à un petit test avec un vaisseau spatial relativement complexe, le temps était venu de se retrousser les manches et de commencer le travail sur les scènes 3D. J’avais une bonne idée du thème général, mais beaucoup d’idées sont apparues après avoir commencé à travailler sur les premières séquences, celles de la poursuite dans le désert. Remute m’a laissé carte blanche, ce qui est toujours un énorme avantage, avec comme seule requête la présence dans l’animation du robot qu’on aperçoit sur un des extraits vidéo au début du clip. Les sources d’inspiration ont été très variées, de WipeOut pour les vaisseaux évidemment, à Blade Runner et Total Recall pour l’ambiance générale, jusqu’au hangar à dirigeables d’Écausseville.

Le gros avantage quand on utilise une caméra fixe, à l’opposé d’une caméra repositionnable comme généralement dans les jeux 3D, c’est qu’on peut énormément tricher pour parvenir au résultat souhaité, avec à la clé des grosses économies en matière de polygones ou encore mieux, de temps. L’astuce la plus fréquente est l’utilisation de billboards, des formes 2D qui sont alignées avec la caméra, en lieu et place d’objets modélisés en 3D : la silhouette du personnage dans le hangar, les montagnes à l’extérieur, etc. Autre exemple, lors de la plupart des scènes où les véhicules semblent se déplacer, c’est généralement juste le décor qui défile en dessous, comme un tapis roulant, ce qui simplifie énormément la structure de ces séquences.

Storyboarder

À mesure que l’animation gagnait en complexité, il m’est rapidement apparu que j’allais avoir besoin d’un système pour maintenir une vue d’ensemble de toutes les scènes (21 initialement, chacune un fichier Blender différent – pas forcément l’organisation la plus efficace…) et de la durée totale de l’animation. J’ai pour cela utilisé Storyboarder, un logiciel gratuit de storyboard qui a parfaitement joué son rôle.

L’animation 3D devait durer exactement 85 secondes pour être en phase avec la musique. J’avais à peu près 10 secondes de rab après avoir animé toutes les scènes et il fallait donc en supprimer ou raccourcir certaines. J’ai pu économiser beaucoup de temps pour cette dernière étape en découvrant qu’on pouvait importer et exporter des séquences de PNG dans Adobe Premiere Pro, où réorganiser des séquences se fait de manière très visuelle.

Premiere Pro

Même si la masse de travail a été plus importante que prévue initialement, j’ai beaucoup apprécié travailler sur ce projet et suis fier du résultat obtenu. Nous avons réalisé quelque chose d’inédit sur Mega Drive tout en développant en 1 minute 30 une petite histoire que j’espère divertissante dans un univers cohérent.

La sortie d’une production sur support physique est rare aujourd’hui et le fait de voir la cartouche apparaître aux 4 coins du globe est un motif de satisfaction supplémentaire. Espérons que ces collectionneurs continueront d’apprécier l’album pour de nombreuses années.

crédit image : Remute

D’un point de vue plus personnel j’ai évidemment apprécié cet équilibre presque parfait entre contraintes techniques et liberté artistique. La mise en scène et le cadrage de séquences animées sont des domaines assez nouveaux pour moi et m’y frotter a été très intéressant. Enfin cela m’aura permis d’approfondir mes connaissances de Blender et de travailler dans des conditions inédites, comme pour la dernière scène avec le robot, réalisée sur une petite Surface Go lors d’un vol transcontinental.

Enfin si vous êtes à Londres le 22 juin, je ferai une petite présentation sur mon travail sur Red Eyes au London Blender Day.


Voici la ligne de commande Imagemagick que j’ai utilisé pour le tramage avec colorisation avec la palette Megadrive :

convert input.png -ordered-dither hlines2x2a,6 +remap md_pal.gif output.png

Il faut aussi éditer le fichier thresholds.xml dans le répertoire d’Imagemagick pour y ajouter les nouveaux effets de trame. Plus d’information ici.

<threshold map="hlines2x2a">
<description>Horizontal Lines 2x2 (bounds adjusted)</description>
<levels width="2" height="2" divisor="10">
3 3
9 9
</levels>
</threshold>


5 Commentaires

Low Poly Memories, GIF animé pour la Revision 2017

Ce petit billet est consacré à ma deuxième release lors de la Revision 2017. La party organise traditionnellement une compétition de GIF animés, dont les règles sont les suivantes : résolution imposée de 640×360 et taille maximale de 2 Mo.

M’étant occupé en priorité de mon image en pixel art, j’ai commencé à préparer cette animation un peu à la dernière minute – l’avant veille du début de la Revision pour être exact­­­ ! Heureusement la réalisation a été à peu près aussi rapide qu’espérée puisque les objets 3D sont très basiques et sans textures à proprement parler. C’est d’ailleurs ce style graphique et l’absence d’antialiasing qui a permis de caser le maximum d’étapes d’animation dans la limite des 2 Mo.

Un des éléments pour lequel j’ai tâtonné fut en fait la génération de l’animation du tunnel qui devait durer exactement 30 frames pour qu’elle boucle de manière synchronisée avec le reste. Vu mes maigres connaissances en programmation, j’ai dû me résoudre à simuler cet effet 2D avec de la 3D, en déplaçant une texture sur un cylindre aplati.

Puis survint une mauvaise surprise dans la dernière ligne droite : la réalisation à minuit passé que Blender ne supporte pas les textures animés quand on utilise OpenGL Render Animation (qui capture juste les frames rendues en OpenGL, donc très rapide). La mort dans l’âme, j’ai été contraint de faire manuellement un rendu OpenGL pour chacune des 120 images, opération qui s’est terminée dans la douleur vers 2h du matin le jour où commençait la Revision. Tout ça n’aura pas été en vain puisque l’animation a terminé 3e dans la catégorie 🙂

Exocet - Low Poly Memories (Revision 2017 Animated GIF competition)

Low Poly Memories sur Demozoo


4 Commentaires

Le Cobaye (1992) : la réalité virtuelle version 0.1

J’ai profité des fêtes de fin d’année pour découvrir Le Cobaye (The Lawnmower Man en VO), film américain de science-fiction sorti en 1992 avec Pierce Brosnan et Jeff Fahey dans les rôles principaux. Le film connut aussi quelques adaptations en jeu vidéo, dont l’un de ces premiers titres pensés pour le support CD, ceux qui étaient censés préfigurer l’avenir à coup de séquences en 3D précalculée en 320×200 au gameplay limité.

Même lors de sa sortie, Le Cobaye n’avait pas du être très convaincant. Aujourd’hui l’intrigue reste tout autant télégraphiée mais en plus le film a (mal) vieilli et se rapproche doucement de la catégorie « nanar ». En ce qui me concerne, l’intérêt réside surtout dans les séquences de réalité virtuelle en images de synthèse qui furent réalisées par Angel Studios (qui deviendra Rockstar San Diego, créateur entre autres de Red Dead Redemption et Midnight Club) et Xaos Inc. Je ne sais pas qui fut responsable de quoi, mais les animations dans un style onirique sont plus réussies que celles du jeu de course ( voir ci-dessous), peu inspirées et plutôt insipides.

La réalité virtuelle était déjà un domaine à la mode au début des années 1990, au point qu’on peut même parler de première vague d’intérêt du grand public pour la technologie. Le gouffre béant qui existe parfois entre la théorie et la pratique fut néanmoins confirmé à cette période, les solutions proposées n’offrant au final que des performances décevantes. On se rappelle du VFX1 de Forte, du Virtual Boy de Nintendo, de Virtuality et ses premières bornes à base d’Amiga, et même du projet de casque VR pour l’Atari Jaguar !

 

Les scènes en 3D du Cobaye dépeignent un certain idéal d’alors en matière de réalité virtuelle – quelque peu primitif maintenant – et se situent quelque part entre une extrapolation à partir des jeux d’arcade du début des années 1990 et une tentative discutable de modernisation de Tron, et sont de ce point de vue intéressantes d’un point de vue historique et artistique. On reste loin de Tron en matière d’élégance et de cohérence en tout cas.


5 Commentaires

Thunderdome – The Demo (Atari ST)

Checkpoint a sorti une nouvelle démo pour Atari ST à la SillyVenture : Thunderdome – the demo avec aux commandes Defjam et Modmate pour le code, Modmate, STS et moi-même pour les graphismes, et Bero/Farbrausch (première partie) et Ultrasyd (deuxième partie) pour les musiques.

La musique de la première partie crachouille beaucoup car c’est un morceau numérique streamé plutôt qu’une musique chiptune ou un module, une première sur ST mais pas vraiment un régal pour les oreilles 🙂 Comme souvent avec Defjam, beaucoup d’effets repoussent les limites du ST comme le cube rouge avec du bump mapping qui se tord, la 3D texturée ou les metaballs 3D (malheureusement trop lentes pour être réellement appréciées). C’est d’autant plus impressionnant que le tout tient sur deux disquettes et tourne sur un STF avec 1 Mo de RAM, alors que la norme pour ce genre de démos est souvent un STE (plus puissant sur beaucoup de points) avec 4 Mo de RAM et un disque dur.

Ma contribution a été modeste puisque que je n’ai fourni que les objets 3D texturés utilisés dans la deuxième partie, également inspirés par l’univers de Thunderdome. Le nombre de polygones est évidemment très réduit (130 triangles pour le mage, 92 pour la platine) et encore certains vertex sont uniquement là pour limiter la distorsion des textures sur les polygones de grande taille, le ST n’étant évidemment pas capable de gérer la correction de perspective sur les textures. Les textures en 256×256 c’est plutôt l’opulence en comparaison, malgré la palette STF (16 couleurs à choisir parmi 512). Le tout a été réalisé avec Blender et Grafx 2, comme d’habitude. Créer des objets 3D pour une plateforme aussi limitée a été une bonne expérience, et je pense que j’aurai l’occasion de remettre ça avant peu.

Defjam a eu l’excellente idée de réaliser un petit coffret avec des disquettes personnalisées pour la démo. Ça fait bien longtemps que je n’avais plus vu ça 🙂

Disquettes de la démo Thunderdome (Atari ST)

 


2 Commentaires

Bus londonien en 3D low poly

Voici une conversion 3D de mon bus londonien en pixel art, un petit projet rapide mais très satisfaisant.

Le bus fait tout juste 100 triangles, plus une autre centaine pour le contour type cel-shading, et utilise une texture réalisée avec Grafx2 de 64×64 pixels en 25 couleurs + transparence.

Bus londonien 3D low poly

Pour les contours autour de l’objet, j’ai eu recours à la technique utilisée par la plupart des premiers jeux en cel-shading comme Jet Set Radio : on duplique l’objet, on le gonfle un peu (Push modifier dans 3ds Max, Push/Pull dans Tools>Transform dans Blender), on lui donne une couleur sombre, on  inverse les normales et on active le backface culling, et c’est tout ! La méthode manque de finesse mais ça marche à peu près correctement 🙂

LondonBus3DAnimL’animation a été capturée directement dans le viewport de Blender avec Render > OpenGL Render Animation. Pour éviter que les textures en pixel art soient floues, il faut désactiver le texture filtering dans le viewport, ce qui se fait dans les Préférences (System > OpenGL > décocher Mipmaps).  Il est aussi préférable d’activer l’antialiasing dans le viewport pour un résultat plus propre, ça se règle directement dans le panneau de contrôle de la carte vidéo.

Je trouve le résultat final très sympa, particulièrement pour un projet aussi court, et à côté la version 2D du bus semble un peu plan-plan. La texture en basse résolution avec ses gros pixels bien nets donne vraiment un style à part (si tant est que ce ne soit pas que de la nostalgie !). En comparaison, ma Lada 3D avec sa texture en 256×256 fait un peu fouillis.

Voir le bus en 3D sur Sketchfab.

 


3 Commentaires

Interlude architectural : le brutalisme dans SimCity Social

En tant qu’ incarnation éphémère de la série de Maxis sur Facebook, SimCity Social avait nécessité la réalisation de bâtiments par palettes entières, en bon city-builder qu’il était. C’est d’autant plus le cas qu’il était free to play, catégorie de jeux pour laquelle un flux régulier de contenu inédit est souvent le nerf de la guerre. Lorsque j’ai quitté le studio de Playfish à Pékin pour cause de retour en Europe, l’équipe en avait réalisé plus de 400, mais le total a bien dû monter à 500 ou 600 jusqu’à ce qu’EA ne décide de débrancher le jeu définitivement en juin 2013.

Si la plupart des bâtiments étaient relativement classiques, une fonction du jeu nous avait permis de créer une petite série de constructions beaucoup plus mémorables. En effet, la visite de la ville d’un ami Facebook, grand classique des social games de l’époque, offrait la possibilité d’y réaliser des actions soit positives (comme arroser les fleurs), soit négatives (comme uriner dans les fleurs). Chaque action rapportait des points qui permettaient de débloquer des bâtiments « gentils », volontairement gnangnans, et « méchants » dans un style plus affirmé. Pour ces derniers l’inspiration principale avait été le style architectural appelé brutalisme, dont les deux mamelles sont le béton brut et les formes géométriques angulaires. À cela, on avait ajouté un habillage dans le style totalitaire des pires dictatures actuelles et passées.

simcity-social-brutalisme

Le temps qu’on avait pu y consacrer avait été limité, mais ces bâtiments furent parmi mes préférés et auraient mérité d’être plus développés. Ou même pourquoi pas un jeu entier avec une ambiance oppressive à la Papers Please et en 3D temps réel (Flash ne permettant pas d’utiliser autre chose que du précalculé à l’époque).


5 Commentaires

Lada low poly avec Blender

En tant qu’amateur de belles mécaniques et de muscle cars, modéliser une Lada 2101 « Jigouli » en low poly me titillait depuis quelques temps. Voici le résultat avec 716 triangles, une texture de 256×256 et une once de tuning.

lada-low-poly

Cela aura aussi été l’occasion de travailler sur un projet complet avec Blender et de familiariser avec l’usage du logiciel dans des conditions « réelles », en lieu et place de 3DS Max auquel je suis habitué. Les débuts ont été fastidieux, l’interface de Blender étant originale et souvent déroutante. Avec la pratique, on s’y habitue très bien puisque tout est assez logique en définitive. Côté modélisation je dois même avouer que j’ai été agréablement surpris : une fois quelques astuces assimilées, beaucoup d’outils sont plus efficaces que leurs équivalents sur Max. Pour le texturage (du moins pour l’usage que j’en ai fait : du low-poly où chaque point UV doit être placé précisément), les choses sont plus rudimentaires mais rien de rédhibitoire. L’absence de support des fichiers PSD (Photoshop) devrait elle être corrigée lors de la sortie très prochaine de Blender 2.70.

Lada_2101_low_poly_3D_Blender

Pour mon prochain projet 3D, je pense que je m’orienterai plutôt vers du super low poly avec de petites textures en pixel art, comme mon tank MGT, ou alors quelque chose avec un peu plus de polygones et de résolution de texture qui me permettra de m’amuser un peu avec des shaders.

Voir la Lada low poly sur Sketchfab