Quoi de neuf à la GDC 2015 ?

par | 4 Mar 2015

Dernière Maj le 14/03/2015: Bon, y-a eu l’annonce d’Unreal Engine 4 qui devient Gratuit, et la liste des news de la version 4.7. Nous avons aussi assisté à la réplique d’Unity qui propose sa version 5.

Et rebelotte, maintenant c’est au Source Engine 2 de Valve de passer à la gratuité ! Ainsi, que le Corona SDK.

Mais on trouve aussi quelques papiers intéressants pour les développeurs, sur plusieurs sujets.

=== Conférences ===

— Présentation de l’API Vulkan

A priori, rien à voir avec la triste disparition de notre bien aimé Spock.

Le Khronos Group a annoncé aujourd’hui une toute nouvelle API graphique qui va plus loin qu’OpenGL en donnant plus de contrôle aux développeurs. À l’instar de Mantle, Metal et Direct X 12, cette refonte complète de la spécification permet de réduire la dépendance des GPUs avec le CPU. Ceux-ci peuvent notamment gérer la mémoire et le multi-threading de manière efficace.

macgpic-1425378592-4946220520506-sc-opOpenGL et OpenGL ES ne sont pas abandonnés pour autant. Ils vont continuer à évoluer en parallèle et rester des API de plus haut niveau. Le Khronos Group a également dévoilé OpenCL 2.1, une évolution de sa technologie permettant de confier des tâches de calcul à la carte graphique ou à une puce dédiée. Cette version introduit un nouveau langage de kernel basé sur un sous-ensemble de C++. OpenCL 2.1 et Vulkan partagent par ailleurs un nouveau langage intermédiaire, SPIR-V. Les shaders sont précompilés dans un langage intermédiaire (SPIR-V). La compilation en instructions natives peut être parallélisée sur le GPU.

Ce qu’on apprend pendant la conférence, c’est que Vulkan sera supporté par le hardware qui supporte OpenGL 4.1 (à partir de la GeForce 4xx et Radeon HD 5xxx donc). Les premiers fichiers d’entête sont disponibles en « alpha » pour permettre aux développeurs d’expérimenter avec la bibliothèque. La spécification complète devrait arriver courant 2015. La spécification de la représentation intermédiaire des shaders (SPIR) est complète, seules quelques modifications/corrections restent à faire.

Notons au passage que le Source 2 (Valve) est aussi le premier moteur officiellement annoncé à prendre en charge Vulkan.

Voici les diapos et papiers présentées à la GDC: OpenCL, Khronos-Vulkan et  Khronos-GDC-Press-Briefing.

Valve et LunarG ont présenté un outil : GLAVE, permettant de tracer et de déboguer les appels à la bibliothèque Vulkan. L’outil est capable de montrer le temps passé dans chacun des appels, de rejouer une scène, d’avancer image par image…


— The Technology of « The Tomorrow Children » —

Développé par Q-Games, The Tomorrow Children vous place dans le corps d’un clone qui doit oeuvrer à la reconstruction de sa planète et rendre sa gloire à la race humaine.

James McLaren (Q-Games), qui est en charge du moteur de jeu, a présenté ce que le jeu a sous le capot: le lighting (Global Illumination, avec Voxel Cone Tracing), le landscape  et l’async compute.
C’est très complet et il y a pas mal d’illustrations, je vous conseille sa lecture si vous êtes intéressés par les voxels. Paysage et objets sont tranformés en voxels, mais pas les personnages, ni les véhicules.Pas mal de techniques sont passées en revue, comme les Subsurface Scattering (SSS) et les Raymarched Reflections.

Voici le trailer du jeu:
https://www.youtube.com/watch?v=9bnfz3XjUxQ
Voici les slides commentés de la conférence (180 slides, PDF, 11.3Mo), ainsi qu’un un autre papier sur le VCT.
— Interior Design and Games: Mastering space & place —

Dan John Cox (UBI Soft) qui présentait l’an dernier une conférence sur le thème de « What Modern Interior Design Teaches us about Environment Art » revient cette année avec une nouvelle conférence sur l’art et la manière de maitriser l’espace dans le design des scènes intérieures dans les jeux.

Les slides sont ici (154 diapos -PDF 13.4Mo)

— Fast iteration for FarCry4 – Optimizing key parts of the Dunia pipeline —

Le Dunia Engine est un moteur de jeu interne à Ubisoft, utilisé pour la série des Far Cry depuis Far Cry 2. C’est une version profondément modifiée par Ubisoft Montreal du premier CryEngine, développé par Crytek pour le premier Far Cry. La version 2 fait tourner des jeux comme Far Cry 4. Conçu dans l’optique de gérer des mondes ouverts, le Dunia 2 permet aux développeurs de profiter d’un cycle jour/nuit, d’une météo dynamique, d’une intelligence artificielle non scriptée et d’une propagation dynamique du feu dans les décors.

Remi Quenin (UBI Soft) nous présente les optimisations réalisées sur le moteur dans le cadre de son développement, c’est à dire, principalement sur le testing et les temps de compilation. Pour rappel, Dunia 2, c’est 3.7 Million de lignes de Code C++. De façon directe et indirecte, il y a 450 personnes qui bossent sur ce moteur, ne serait-ce qu’à Montréal !

Les slides sont dispos ici.
— Parallelizing the Naughty Dog Engine using fibers —

Christian Gyrling (Naughty Dog) explique les évolutions apportées à leur moteur PS4 utilisé par le jeu The Last of Us Remastered. Leur précédent moteur (PS3) n’était pas multithread.  Depuis, ils ont mis en place une gestion via les fibres.

Comme les threads, les fibres partagent le même espace mémoire. Toutefois, les fibres utilisent impérativement un multitâche  coopératif là où les threads utilisent en général un multitâche préemptif. Les threads dépendent souvent de l’ordonnanceur du noyau pour préempter un thread occupé et reprendre l’exécution d’un autre thread. Les fibres doivent manuellement rendre l’exécution afin de permettre à une autre fibre de continuer sa propre exécution.

Une comparaison entre les deux moteurs est réalisée durant cette conférence, et comment ils ont atteint 60 FPS en centrant le design du moteur sur le Frame (frame-centric). Comment « utiliser des technologies de bas niveau qui permettent un meilleur usage d’un hardware multi-coeur en minimisant les conflits et en maximisant l’occupation du coeur ».

Les slides sont ici.
Voici une vidéo où Naughty Dog présente son moteur pour la PS4:

— OIT to Volumetric Shadow Mapping avec DirectX 12 —

OIT pour « Order Independent Transparency ». Une des nouvelles fonctionnalités de DirectX 12 est le « Raster Ordered Views« . Cela permet le traitement, dans l’ordre, des shaders qui arrivent dans les ROP (Raster Operations Pipeline), ces unités de la puce graphique qui prennent en charge les dernières opérations à appliquer à nos pixels, ce qui est par exemple nécessaire lorsqu’il y a plusieurs niveaux de transparence à respecter. Dans le cadre de cette présentation réalisée par Leigh Davis (Intel), cette fonctionnalité sera étudiée dans le cadre de l’amélioration des performances sur les ombres volumétriques.

07627221-photo-nvidia-maxwell-raster-ordered-viewLes slides sont dispo ici.
— Physics Optimization Strategies —
Sergiy Migdalskiy (Valve) nous présente les défis qui se posent dans les architectures modernes concernant les stratégie d’optimisations pour les problèmes liés à la physique (mais applicable autrement d’ailleurs): Latency, Cache Prefetch, Load Balance, Bandwidth, Branch Prediction SIMD. Étude de cas: la simulation d’un vêtement (soft body).
Le papier est dispo ici.
— Sparse Fluid Simulation in DirectX —
Alex Dunn, Dev. Tech. (NVIDIA) nous présente les méthodes pour simuler les fluides dans les jeux.
Le papier est dispo ici.
— Mobile devices as development platform in Broken Age —
Broken Age est un jeu vidéo d’aventure graphique développé par Double Fine Productions et conçu par Tim Schafer.
La présentation a été réalisée par Oliver Franzeke (Double Fine Productions) s’axe autour des difficultés de développement vers les plateformes mobiles (Android et iOS), notamment la nécessité de passer le file streaming.

Les slides sont dispos ici.
— The play of Stillness —

Brian Upton (Sony Santa Monica), l’auteur du livre « The Aesthetic of Play » nous présente, au travers de cette présentation reprenant de nombreux jeux vidéo, ce qui détermine l’expérience de jeu (incertitude, satisfaction, anticipation, etc.).

Les slides sont dispos ici.

— Unity 5 Graphics Smörgåsbord —

Aras Pranckevičius nous fait une présentation des dernières fonctionnalités du moteur: le Physically Based Shading (BRDF), Global Illumination & Lightmapping, Reflection Probes with box projection, les Screen Space Raytraced Reflections (en prévision – voir ce papier pour plus d’infos), Directional Light Shadows, Deferred Shading, ainsi que des outils comme le Frame Debugger.

Les slides de la conférence, les notes.
— Design in Sunset Overdrive —

Level Design in a Day: Les Mondes de Sunset Overdrive. La conférence de Liz England, Designer (Insomniac Games), commence par une présentation de 25 minutes sur les deux premières villes construites dans le jeu : pourquoi ils ont décidé de tout jeter pour recommencer à nouveau. L’accent mis sur la traversée, le monde ouvert vs espaces linéaires – ce qui a conduit à des changements majeurs dans la géométrie. Voici les slides de la première conf ainsi que les notes.

La transition d’un monde linéaire à un Open World Design: C’est un entretien  d’une heure sur les changements intervenus chez Insomniac games dans le département de design pour s’adapter aux nouveaux besoins d’un jeu en monde ouvert, mais aussi les besoins spécifiques d’un jeu comme Sunset Overdrive. Quelles sont les différences structurelles entre un linéaire et un jeu en monde ouvert, comment les rôles et responsabilités de chacun change, à quoi ressemble le nouveau workflow et les avantages et les inconvénients de ces changements. Voici les slides de la seconde conf ainsi que les notes.

— La destruction procédurale —
Dennis Gustafsson (Mediocre) : procédé de fracturation, méthode des éléments finis, opération booléenne CSG, … la destruction procédurale expliquée en images et avec des algos.
Le papier est dispo ici.
— Les méthodes Numériques en physique pour les jeux —

Présentation d’Erin Catto (Blizzard Entertainment): Traiter la physique d’un jeu nécessite le plus souvent de résoudre un ensemble d’équations différentielles et autres équations (Euler, Lagrange, Laplace, etc.). Plusieurs cas sont étudiés, avec une application: la dynamique des corps rigides en  mouvement gyroscopique.

Le papier est dispo ici. Vidéos et informations complémentaires à télécharger (zip) ici.
Références: Les méthodes semi-implicites d’Euler, les équations d’Euler.
— Robust Contact Creation for Physics Simlation —

Présentation de Dirk Gregorius (Valve Software): Quand deux objets entrent en contact, il y a collision (voire une une zone de superposition ou overlapping) avec des points de contact. Des forces de répulsions doivent être calculées pour gérer la collision. Deux méthodes sont comparées: Incremental Manifold et One-Shot Manifold. Comment résoudre la table de collision (en fonction des collision shapes) ? 2 algos sont étudiés: GJK et SAT. La présentation enchaine ensuite sur les méthodes de résolution des points de contact. Et enfin, 3 codes sont proposés.

Le papier est dispo ici.

— Code clinic: comment écrire un code que le compilateur peut optimiser —

Une présentation de Mike Acton, Engine Director (Insomniac Games): Passage du C++ à l’assembleur pour découvrir que certaines structures de données peuvent quelques fois demander de traiter 10 fois d’informations que nécessaire et que le compilateur n’a pas de baguette magique pour cela. Le tout adapté au développement de jeux.

Le papier est dispo ici.
— Great Management of Technical Leads —
Une présentation de Mike Acton, Engine Director (Insomniac Games) : « Félicitations! Vous êtes un directeur technique. Maintenant quoi? En général, quelle que soit compétences dont vous avez fait preuve pour en arriver à ce point, elles ne sont pas les mêmes que celles dont vous allez avoir besoin à partir de maintenant. »
En gros, qu’attend t-on d’un Technical Lead ? Quelles sont ses responsabilités.
Le papier est dispo ici. Pour allez plus loin, lire article sur gamasutra.
— Inverse Kinematics Revisited —

Une présentation de Gino van den Bergen qui revisite la cinématique inverse, c’est à dire le procédé par lequel on peut déterminer les positions et rotations d’articulations d’un modèle afin d’obtenir une pose, et ce à partir des bones enfants.

Le papier est dispo ici.

— Procedural Level Design in Eldritch —

David Pittman (Minor Key Games): Eldricht, rogue-like sur fond de Minecraft, est un jeu relativement moche, mais très addictif. Il a été développé en SOLO (bravo) en moins de 8 mois – 1500H (on est loin des 35H hebdo). Les niveaux sont générés de façon procédurale, à partir d’un labyrinthe contenant un ensemble de rooms. La présentation explique la génération du labyrinthe, réalisée à partir de contraintes (la position de certaines rooms). Puis elle enchaine sur le design, les thèmes, la cohérence graphique, le spawn des joueurs… c’est un excellent making of !


Les slides en PDF Le site officiel

— Deploying Low-latency Multiplayer Gaming with AWS —

Nate Wiger (Gaming Solutions chez Amazon) et James Gwertzman (PlayFab) nous explique comment réduire les durées de latence dans les jeux multijoueurs en utilisant les Amazon Web Services (AWS) dédiés au Gaming, ainsi qu’en utilisant PlayFab. Il est en effet possible d’utiliser AWS pour créer un serveur de jeu avec l’Unreal Engine.

Les slides de la conférence.

— 10 Killer Player insights  —

Mark Robinson (deltaDNA) nous présente les 10 choses à savoir concernant les joueurs et la façon de les transformer en clients.

Les slides de la conférence.

— JPS+ now with Goal Bounding: Over 1000x Faster than A* —

Steve Rabin (DigiPen Institute of Technology) auteur du livre Game AI Pro 1 et Game AI Pro 2, nous présente 2 nouvelles techniques pour optimiser la recherche des plus courts chemins: JPS+ (ICAPS July 2014), et Goal Bounding (developed in Jan 2015). Pour cela, il teste des cartes issues de 3 jeux vidéo: StarCraft, Dragon Age Origins et Warcraft III.

Les slides de la conférence et les slides de présentation de son livre.

— Game Math Case Studies —

Eric Lengyel, de Terathon Software, nous parle des Occlusion boxes, ces boites qui permettent de masquer une partie des meshs, mais aussi de la physique, dans une scène, assurant ainsi une optimisation.  Il nous parle aussi du brouillard comme méthode d’occlusion. Puis, quelques slides sur les animations à base de courbes de bézier. (plutôt qu’une simple interpolation linéraire) et sur quelques fonctions mathématiques.

Le papier est dispo.

— Jump Point Search pathfinding —

Le pathfinding ou « Recherche de chemin » est un algorithme essentiel à tout jeu de simulation de stratégie en temps réel. C’est l’algorithme sur lequel les différentes entités définies dans le jeu se baseront pour trouver le chemin à suivre sur une carte en évitant de manière intelligente les obstacles.

Un algorithme Jump Point Search a été développé par Daniel Harabor et Alban Grastien, permet d’accélérer le pathfinding.

Pas le papier de la conf, mais une autre doc plus complète sur le sujet.

— Rendering the World of Far Cry —

Stephen McAuley (UBISoft Montréal): Principalement centrée autour de Farcry 4, cette présentation s’articule autour des thèmes suivants: les Matériaux, le Lighting, le rendu de la végétation et l’antialiasing.

Les slides en PDF.

— Mesh Cutting in Farming Simulator 15 —

Une autre présentation rapide de Gino van den Bergen expliquant le fonctionnement du Mesh Cutting, ce procédé qui consiste à découper un mesh en d’autres meshs, et ce en temps-réel, pas comme les procédés des fracturation précalculée que nous avons dans nos moteurs de jeux habituels.

Le papier est dispo:.

— NVIDIA and the VR Experience —

VR Direct est un ensemble de technologies matérielles et logicielles développées par NVIDIA pour accélérer les performances de rendu stéréo dans le cadre des casques de réalité virtuelle. Dans cet exposé, Dean Beeler (Oculus VR) Beeler et Nathan Reed (Nvidia) expliquent des concepts comme le timewarp asynchrone, le rendu Multiview et le VR SLI, ainsi qu’une présentation des nouvelles API VR Direct.

Le papier est dispo.

— SIMD at Insomniac Games —

Andreas Fredriksson, Lead Engine Programmer chez Insomniac Games, nous présente l’utilisation du SIMD (Simple Instruction Multiple Données), un concept du parallélisme. Une seule instruction est exécutée par plusieurs processeurs ou machines, mais sur une données différentes. Par exemple, vous avez 100 processeurs qui font un calcul de rotation sur 100 vertex en un seul cycle de calcul, au lieu de 100 avec un seul processeur. Le conférencier utilise pour cela les instructions SSE des processeurs, et nous présente différents programme C++ et le code assembleur associé. Ceux qui aiment l’assembleur et l’optimisation (ce qui est mon cas 🙂 ) devraient trouver la conf intéressante.

Le papier est dispo.

— Networking for Physics —

Un moteur de jeu doit constamment faire face à des problèmes de synchronisation concernant la physique du jeu. Quand le joueur à tiré un balle, l’ennemi était-il devant la balle au moment de l’impact, ou y-a t-il eu une estimation heuristique du client qui n’était pas conforme avec la réalité ordonnée par le serveur  ? L’auteur, Glenn Fiedler, nous parle des problèmes de bande passante, d’interpolation des trames réseau, de synchronisation avec plusieurs vidéo à l’appui.

L’archive est dispo ici (c’est du lourd: 838Mo – dossier DATA contenant les slides de la conf et les vidéos)

— How to Prioritize When Everything is Pri 1 —

Une conférence animée par Ruth Tomandl (PlayFab):  Le travail d’un producteur est de se assurer que le jeu est fait, ce qui signifie établir les différentes priorités dans l’orchestration des tâches et s’assurer que l’équipe travaille tous au même plan. Les solutions faciles qui ne fonctionnent pas réellement sont ici étudiées, ainsi que ls solutions plus complexes à mettre en place, mais qui fonctionnent.

Les Slides sont dispos.

— Rules of the Game – Five Tricks of Highly Effective Designers —

Richard Rouse, l’auteur de « Game Design: Theory & Practice« , nous présente 5 expériences de très bons designers de jeu: Nels Anderson, Chris Avellone, Kim McAuliffe, Laralyn McWilliams et Dan Teasdale. Chacun va s’exprimer sur sa propre vision des choses à respecter pour faire un bon jeu, règles qu’ils ont eux-mêmes suivies dans leurs propres projets.

Les Slides sont dispos (haut en couleur, mais il aurait manqué la vidéo si quelqu’un la trouve).
Du même auteur, on trouve plein de papiers intéressants (notamment de la GDC 2014) sur le site de paranoid – Des heures et des heures de lecture en perspective !

— Don’t Call Them Whales: F2P Spenders and Virtual Value —

Présenté par Emily Greer de Kongregate, la Conférence est centrée sur les  «baleines»: ces joueurs qui dépensent des milliers de dollars sur les jeux free-to-play. En utilisant le site web de Kongregate et les données mobiles et des études de cas individuels, elle montre qui ils sont et ce qu’ils achètent, et continue ensuite à les examiner dans le contexte plus large de jeux, et comment l’économie, la psychologie et les facteurs sociaux façonnent (et déforment ) la façon dont nous considérons ces acteurs essentiels.

Les Slides sont dispos.

— Designed to Win: How to Monetize Users & Enhance Experience in Your Game —
Présentée par Michal Palowski et Jahed Momand, cette conférence  a donné quelques exemples de jeux qui ont utilisé la publicité pour améliorer l’économie du jeu et la satisfaction générale des joueurs.

— Advanced Visual Effects in 2D Games —

Présentation réalisée par Viktor Lidholt (SpriteBuilder) qui traite des effets que l’on peut ajouter aux jeux 2D actuels, comme les effets de lumière (je pense à 2Dark), la réfraction, la réflexion, le motion blur, le bloom, les ajustements de couleur, etc. On y traite des shaders, des normal maps, etc. C’est très sympa, facile à lire et bien illustré.

Le papier est dispo.

— The need for speed —

Présentation réalisée par Paul Heydon (Silicon Vikings): petite analyse du business du jeu.

Le papier est dispo.

— Creating a Community Plan the Easy Way —

Stephanie Bayer: comment créer un plan de communication qui s’appuie sur les réseaux sociaux pour les éditeurs et développeurs de jeux.

Le papier est dispo: Stephs Dumb Presentation et voici ses notes pour la présentation.

— Community Management in the Culture Wars —

Gordon Walton, Rich Vogel et Ralph Koster nous font une présentation des difficultés liées au métier de community manager: en gros, responsable des réseaux sociaux pour le jeu vidéo.

Les slides sont visibles à cette adresse.

— Advanced VR Rendering —

Alex Vlachos (Valve) nous présente comment la Réalité Virtuelle est perçue chez Valve, les différentes méthodes pour le rendu stéréo, le Timing (Scheduling, Prediction, Vsync, GPU Bubbles), le Specular Aliasing et l’anisotropic lighting, etc.

Les slides sont dispos ici.

— Présentation du Paradox Engine —

Paradox 3D est un moteur de jeu C# permettant de développer des jeux portables (PC, Mac, Linus, Consoles, Android, iOS, WP…). Paradox est totalement gratuit et open source.

La première session est une introduction au moteur de jeu Paradox (ou, pas la base données!): présentation des nouvelles fonctionnalités et de celles à venir.  La seconde session se concentre sur les techniques de rendu avancé: l’API Post Effects et Scene Render Compositor. Enfin, la troisième session présente le Paradox Shading Language.

Les slides : Session1, Session2 et Session3

=== Vidéos ===

Telltale Studios: petite conférence sur la création du jeu Walking Dead :


« Advanced DirectX12 Graphics and Performance »

The Future of Gaming Across the Microsoft Ecosystem

 Making of « Destiny »

« Chez Bungie, nous avons construit des jeux basés sur le moteur Halo pendant dix ans. Cependant, en 2008, il commençait à être trop ancien, et il y avait de nombreux systèmes de base qui ont été mal adaptés à un environnement de développement de jeu moderne. Pour notre nouveau jeu, Destiny, nous avons cherché à développer un moteur qui nous dure tout aussi longtemps que le moteur d’Halo. Cette conférence portera sur développement du moteur qui aura duré 6 ans !

Intervention de J. Carmack sur l’Oculus Rift et la Réalité Virtuelle

John Carmack est le programmeur principal et le cofondateur (avec John Romero) de la société id Software, une entreprise de développement de jeux vidéo (celle qui a créé Wolfenstein 3D et Doom). Fin 2013, il quitte définitivement son poste de chez id Software pour travailler à plein temps chez Oculus VR.


Watch live video from oculus on Twitch
Remaking the Art of Halo 2 for Xbox One

Avec des outils comme ZBrush en conjonction avec DDO, Substance Designer, Substance Painter, Marmoset, Octane et 3DO, on peut aller de l’idée au jeu le même jour, avec un niveau de fidélité suffisamment élevée pour répondre aux questions sur la silhouette, les proportions, la taille, l’éclairage, les propriétés des matériaux, textures, et plus encore. Nous allons analyser l’ensemble du processus au travers Halo 2 Anniversary Spartan armure, parmi d’autres.

=== Stands ===

Sur le stand d’Intel, on pouvait trouver les outils d’Intel dédiés aux créateurs de jeux. D’ailleurs, vous trouverez ici quelques codes sources intéressants.

NVidia a présenté quant à elle le nvidia shield, son nouveau moniteur qui permet d’avoir la première 4K Android TV. En pleine conférence d’UE4, elle a présenté sa nouvelle Titan X, qui possède deux cœurs avec 8 milliards de transistors, ainsi que 12 Go de mémoire vidéo. Enfin, elle a annoncé la sortie de son propre casque de réalité virtuelle (Titan VR). Le produit serait créé par la même équipe responsable de la tablette SHIELD.

 Silicon Studio a présenté son moteur Paradox: moteur de jeux open source. Il est écrit en C# et est compatible Windows, Windows Store, Windows Phone, Android, iOS. Il sera bientôt compatible PlayStation 4. Nous reviendrons un peu plus tard sur ce moteur.

Sony a présenté son nouveau prototype pour son Projet Morpheus (casque de réalité virtuelle conçu pour être essentiellement utilisé avec la PlayStation 4).

Epic a fait une superbe présentation des dessous de la fabrication de sa démo sur les open worlds, c’est sublime. Rise, une nouvelle démo faite avec UE4 et l’Oculus DK2 a aussi été présentée laissant l’assemblée béate.

11051910_10205751697142226_15279364530159271_n

Note: Je vais mettre à jour ce post en fonction de ce que je trouve sur le Net. Si vous trouvez des choses intéressantes, n’hésitez pas à me le dire pour que je puisse l’intégrer à cet article.

Découvrez nos derniers numéros !

0 commentaires

Laisser un commentaire

Ces articles pourraient aussi vous intéresser …