Image de couverture du post

2018-07-21 22:16 - Flashback

Flashback #3 : 2016-2017, une nouvelle dimension

Dans une tentative de documentation de mon évolution dans le milieu de l’informatique, j’ai décidé de proposer une série de flashbacks, où je replonge dans les traces de mon passé. Malheureusement une bonne partie de mes programmes et jeux à été perdue, parce que je n’en étais pas fier ou parce que je n’ai pas fait de sauvegarde de tous mes fichiers en changeant d’ordinateur.

Notre dernier flashback s’était arrêté à l’époque où je publiais des applis sur smartphones. Après un bref aparté sur la période de prépa, je vais vous raconter comment je me suis intéressé à la 3D, autant sur le plan technique qu’artistique.

La prépa, hauts et bas

Ceux qui me connaissent savent que je ne parle généralement de la prépa qu’en mal. Ça mériterait bien un article d’opinion mais je ne veux pas faire ça à la va-vite pour éviter d’en faire une décharge de mes sentiments personnels vis-à-vis de la prépa, une réflexion constructive sur l’élitisme dans l’éducation serait plus pertinente.

Pourtant, cette fois, je vais parler de la prépa pour autre chose : la prépa a marqué un premier tournant dans ma manière de programmer, et d’aborder mes projets informatiques en général. Le cours d’informatique théorique a été mon premier vrai contact avec l’algorithmique, la théorie de la complexité, et de nombreuses notions (paradigmes, théorie des graphes, langages et automates, etc). Je me dois aussi de faire une petite mention à Peio qui m’a appris beaucoup à travers nos divagations algorithmiques pendant les longues heures de cours, et aussi pour m’avoir introduit à git dans un projet commun.

De plus ma formation intensive en mathématiques m’a donné des bases nécessaires pour aborder des domaines comme la programmation graphique, où chaque publication ou bouquin de référence requiert un bon socle mathématique. Non pas que je me rappelle de ne serait-ce que la moitié des maths qu’on a faites, mais j’ai acquis une relative capacité de lire ce genre de charabia.

En revanche, la prépa m’a privé du temps libre que je consacrais à mes projets personnels. À défaut de pouvoir faire des projets d’envergure, j’ai fait essentiellement des petits projets directement ou indirectement liés à mes études. J’ai aussi fait des exercices et préparations pour progresser en algorithmique, et ai commencé vers cette période mes participations (et réussites) à des concours d’algorithmique. Mais je n’ai fait quasiment aucun travail créatif de toute l’année scolaire 2015-2016

Approche technique de l’infographie 3D temps réel

Petit moteur maison

Durant ma classe préparatoire, au prétexte du TIPE (Travail Personnel d’Initiative Encadré) pour lequel des heures de cours étaient allouées avec des professeurs à notre disposition, j’ai décidé de me documenter sur l’infographie 3D temps réel, et réaliser un petit moteur 3D capable de faire le rendu d’une scène.

L’idée du projet était de reproduire le comportement d’une pipeline graphique telle qu’effectuée sur GPU, dans un script Python et sans librairies graphiques. Ça peut paraître absurde parce que le matériel de rendu graphique est conçu et optimisé spécialement pour ça et est extrêmement parallèle, mais c’était le projet : comprendre.

Pour réaliser ce moteur, j’ai lu en diagonale (je n’avais pas tout mon temps quand-même) Mathematics for 3D game programming and computer graphics de Eric Lengyel. J’ai pris beaucoup de raccourcis que je regrette avec du recul, comme ne pas utiliser de quaternions pour les rotations 3D, une gestion très peu optimisée de la lumière, pas de structures de données intelligentes pour gérer les meshes, etc.

Mais le moteur est tout de même capable de faire le rendu d’une scène, qui inclut des objets, des lumières, une caméra, en supportant la transparence et une couleur par triangle.

Voici un exemple de scène simple rendue par le moteur :

Moteur 3D maison

Et, à titre d’archive (ne lancez pas de tomates svp), voilà aussi les diapos de la présentation de 15 minutes que j’ai donnée pour montrer le projet à un jury. Je précise que le jury n’était pas constitué d’informaticiens, donc j’étais un peu perdu entre le risque de prendre le jury pour des cons et celui de les semer en route.

N’essayez même pas de demander le code, j’ai trop de fierté pour mettre en ligne une bouse que j’ai écrite il y a 2 ans.

Approfondissement et stage à Dontnod

Dans les mois qui ont suivi le travail sur le moteur 3D mentionné précédemment, j’ai acquis quelques bases sur l’achitecture des GPU, j’ai relu plus de contenus sur la pipeline graphique, les shaders, le rendu expressif, etc. J’ai notamment lu des morceaux de Real-Time Rendering.

Dans le cadre de mon stage en R&D à Dontnod Entertainment à l’été 2017, j’ai pu également approfondir des sujets comme les méthodes d’interpolation d’angles, les applications de différents types de bruit (comme brouillard volumétrique, dithering, génération procédurale), etc.

Approche artistique de la 3D

Dans l’idée de compléter ma compréhension du rendu temps réel et de la programmation de jeux 3D, je me suis lancé le défi d’apprendre à me servir des techniques de PBR (Physically Based Rendering) (rendu basé sur la physique), et de faire une scène plutôt réaliste avec ça.

Je me suis donc fait les armes sur Blender pour la modélisation, et ai aussi appris comment faire les textures requises pour le PBR (normales, occlusion ambiante, ruguosité, métallicité, couleur, etc).

En travaillant principalement avec le logiciel libre de modélisation Blender et le moteur de jeu Unreal Engine 4, j’ai choisi de faire une reproduction numérique explorable de ma chambre à Tampere (au moins j’avais les références à portée de main). Ce travail était très long parce que chaque objet demandait une demi-journée de travail pour faire la modélisation et les différentes textures. Voilà à quoi ressemble le résultat, en rendu temps réel :

Scène chambre Tampere

Si vous avez Windows et une carte graphique adaptée pour faire tourner des jeux 3D, la scène est téléchargeable ici. Pour la faire tourner, vous aurez besoin d’installer, si ce n’est déjà fait, DirectX End-User Runtime et Microsoft Visual C++ 2015 Redistributable. Ensuite, il suffit d’extraire l’archive et d’exécuter Bedroom.exe.

J’ai aussi réalisé, en moins de 48h dans le cadre d’un game jam (Ludum Dare), un petit jeu 3D pas foufou, vous pouvez aller voir la page de téléchargement.


Voilà, c’était tout pour aujourd’hui, merci de m’avoir lu jusqu’au bout !

Log in to post a comment.