16 Couleurs

16 Couleurs – graphisme & jeu vidéo


4 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>
Publicités


2 Commentaires

Revision 2019 : lutins musiciens et auto-mitrailleuses

J’ai cette année fait le déplacement pour la Revision, la grand-messe de la demoscene qui attire 700 ou 800 personnes à Sarrebruck chaque année pendant le week-end de Pâques.

Ne voulant pas venir les mains vides, j’avais  prévu de présenter un graph oldschool, un graph « moderne », et un GIF animé. Objectif un peu trop ambitieux puisque du fait du manque de temps le GIF animé a dû passer à la trappe.

Life and Death of a Gnome, 320×256 32 couleurs

Ma contribution à la compétition Oldskool Graphics fut Life and Death of a Gnome, petite scène bucolico-fantastico-aigre-douce, une sorte de The Den version mais plus sombre pour annoncer l’approche de l’été. Côté technique, c’est exactement les caractéristiques de l’Amiga 500 avec une résolution de 320×256 pixels en 32 couleurs choisies parmi une palette de 4096, le tout entièrement réalisé sous Grafx2 si on exclut le croquis de départ sous Photoshop. Le tout représente une quinzaine d’heure de travail dont le dernier tiers dans des conditions un peu chaotiques à la Revision. L’image a terminé 4ème dans la compétition Oldskool Graphics.

Can’t Stop, Won’t Stop

Toujours à la pointe du progrès, j’ai aussi présenté une image dans la compétition Modern Graphics (une catégorie un peu fourre-tout qui regroupe images 2D, 3D et dessins et peintures sur papier) : Can’t Stop, Won’t Stop. Le travail a ici été effectué avec Blender, Photoshop et Leonardo. L’image a souffert d’un manque de temps assez évident mais je pense que ce concept de la Chine des années 20 ou 30 (période à laquelle le pays a sombré dans la guerre civile entre de nombreuses factions aux alliances changeantes) et des blindés de cette période a du potentiel. Je compte bien persévérer dans cette direction.

Qui dit Revision, dit une tripotée de releases d’excellentes qualité, ainsi je ne peux que vous recommander de regarder en particulier les contributions aux compétitions Amiga Démo, excellente cette année, Amiga Intro et PC 64k, 8k et 4k. Il y a beaucoup d’autres releases dans d’autres compétitions qui valent aussi le coup d’œil. Il y en a trop de bonnes pour les lister, mais vous pouvez découvrir le tout sur Demozoo.

 


Quelques notes techniques sur la réalisation du timelapse : comme pour la vidéo pour The Den, j’ai utilisé Autoscreen, FFMPEG et Shotcut pour la réaliser, mais entre les deux premières étapes, j’ai aussi passé les images à la moulinette ImageMagick pour éviter des problèmes de proportions lors du redimensionnement des images par FFMPEG. Pour plus de détails, voir les notes à la fin de mes explications de la dernière fois.


9 Commentaires

The Den, pixel art pour Atari STE

Une fois la décision prise d’assister à la demoparty Silly Venture qui s’est tenue à Gdansk en Pologne du 8 au 10 décembre, je ne voulais pas arriver les mains vides (même si j’avais déjà une démo Atari 2600 sur le feu), en particulier pour la compétition de graphs Atari ST dans laquelle j’ai eu l’occasion de participer en 2014 et 2016. Cette année ma contribution a terminé deuxième derrière une image de Carrion que je trouve très réussie.

The Den, Atari STE pixel art

The Den, image Atari STE pour la Silly Venture 2017 (taille doublée)

En plus d’être de saison, le thème me trottait dans la tête depuis longtemps, au point où j’avais envisagé de préparer une image un peu similaire, même si plus champêtre et plus estivale, pour la précédente édition de la Silly Venture.

Comme d’habitude pour la machine, l’image est en 320×200 pixels en 16 couleurs grace à la palette étendue de l’Atari STE (16 niveaux par composante rouge, verte et bleue pour un total de 4096 couleurs, à comparer aux maigres 512 couleurs des ST et STF). Le travail a pris à peu près 20 heures des premières ébauches sur papier jusqu’à l’image finale.

Pour la première fois pour moi, j’ai enregistré la totalité du processus de création en faisant une capture d’écran de Grafx2 toutes les deux secondes. Après la conversion des quelques 29000 images en une petite vidéo de 17 minutes, vous pouvez maintenant avoir un aperçu ma façon de travailler en 50 fois plus rapide. La bande son provient elle des diskmags Imphobia que je lisais il y a une vingtaine d’années et dont les musiques m’ont marqué durablement (pas trop de séquelles à part ça, merci).

Pour compenser mes lacunes en perspective et m’assurer que l’agencement de la pièce était physiquement possible en trois dimensions, j’ai utilisé comme référence un rendu 3D des formes de base, d’où la présence de la grille en début de vidéo quand j’esquisse les meubles.

L’avantage de ce genre de vidéo je pense est de se rappeler que les premières étapes d’un processus créatif ressemblent rarement à grand chose et que ce n’est qu’avec de l’huile de coude et de la patience qu’on arrive petit à petit à obtenir un résultat correct. L’important est donc de persévérer, comme l’écrivait si bien Boileau :

Hâtez-vous lentement, et sans perdre courage,
Vingt fois sur le métier remettez votre ouvrage,
Polissez-le sans cesse, et le repolissez,
Ajoutez quelquefois, et souvent effacez.

J’en profite pour vous souhaiter une bonne année 2018 à tous ! Si j’avais un vœu à formuler pour cette nouvelle année, ce serait de pouvoir dessiner aussi vite que sur la vidéo ci-dessus 🙂


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


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.

 


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