Les nouveautés d'Unreal Engine 4.15

par | 17 Fév 2017

Vous l’attendiez tous, et moi le premier pour pouvoir apporter une dernière touche au tome 5 des cahiers d’UE, voici la nouvelle mouture de notre moteur de jeu préféré. La cerise sur le gâteau, c’est l’annonce du support « expérimental » de la toute dernière de Nintendo, la Switch.

Sinon, en plus d’un tas de nouveautés et d’améliorations (dont 79 par la communauté – d’où l’intérêt de l’Open Source), il faut retenir qu’Unreal Engine 4.15 permet une amélioration de la stabilité globale,  des flux de travail de développement et de la durée d’exécution, le temps de compilation est ainsi réduit de 50%.

Vous trouverez l’historique des autres mises à jour sur cette page, mais surtout, n’hésitez pas à demander le « Guide 2015-2017 des nouveautés d’Unreal Engine » qui est gratuit – enfin, je ne vous demande que votre email pour pouvoir vous envoyer des trucs de temps en temps – et vous pouvez vous désabonner à tout moment – dans tous les cas, cela ne remplace pas le RSS. Il sera mis à jour avec 4.15 dans les jours qui viennent, les inscrits recevront un email.

Éditeur et cœur du moteur 3D

  • Le Blendspace Editor a un nouveau look et optimise le workflow

  • De multiples façons de modifier les propriétés de l’échantillon:  glisser-déposer, menu contextuel et spin-boxes pour modifier la valeur de l’échantillon ou d’une séquence d’animation.

  • Aperçu du blendspace en maintenant Maj (Shift) enfoncée

  • Glisser et déposer des opérations – Validation et aperçu des glisser-déposer depuis le Animation Tools Asset Browser.

  • Étirer pour ajuster  la grille du plus petit au plus grand axe, etc.

Rendu, matériaux, post-process

  • Le tonemapper par défaut fournit des couleurs et des tons plus semblables à un ceux film

Le tonemapper a maintenant l’Academy Color Encoding System (ACES) par défaut. Ce tonemapper permet également au moteur de cibler des types d’affichage multiples, y compris l’affichage HDR.

Vous pouvez revenir à l’ancienne version en ajoutant TonemapperFilm=0 dans votre fichier DefaultEngine.ini. Tout du moins, pour l’instant.

  • Amélioration de la gestion du streaming des textures: permet de réduire l’utilisation du CPU, de la mémoire (réduction de 40%) et les temps de chargements (2 à 3 fois) tout en éliminant les artefacts de basse résolution (calculés par matériau et non plus par maille et prenant en compte les LOD). C’est pour moi l’une des améliorations les plus importantes car elle touche fondamentalement nos développements.

  • Déplacement de nœuds dans le material editor : Réacheminer les nœuds est maintenant possible dans l’éditeur de matériaux pour permettre une meilleure organisation des graphiques matériaux. On pouvait le faire dans les Blueprint, vous savez ces petits noeuds de reroutage – c’ets juste pour le visuel, mais ça permet d’être plus propre au final.

Pour ajouter des nœuds dans Material Editor: Dans la Palette, Faites glisser « Add Reroute Node » au graphique, ou, double-cliquez sur une spline de connexion pour insérer une nouvelle reroute au nœud.

  • Sortie HDR (High Dynamic Range)  pour Windows Direct3D 11 (NVIDIA uniquement), et Mac en profitant de fonctionnalités comme le contraste plus élevé et une plus large gamme de couleurs

Ce sont des images simulées et sont uniquement à des fins de démonstration – Je suppose que la news s’applique sur la photo de gauche qui est, en effet, plus contrastée. Pour ma part, je ne vais pas pouvoir, car je suis sur une Radeon – je sais, moi aussi je préfère Nvidia, que cela soit pour les outils de gaming ou pour CUDA – mais j’ai fait un compromis qualité/Prix pour la VR.

D’autres dispositifs sont à venir dans les prochaines versions (hé ben oui, Ars Longa Vita Brevis – ne vous attendez pas à vous reposer sur vos lauriers). L’implémentation actuelle gère le traitement complet de la scène rendue par la norme ACES. Le support de sortie HDR est détecté au lancement et signalé seulement si un périphérique le prenant en charge est connecté. La sortie HDR peut être modifiée par les nouvelles variables de la console ou par GameUserSettings.

  • Color Grading controls: nouveaux contrôles pour les propriétés Color Grading dans Post process settings pour une expérience plus intuitive et un contrôle plus précis.
  • Outils de visualisation de texture streaming debugging:  3 nouveaux view modes sont disponibles pour s’assurer que le système streaming de texture fonctionne de manière optimale pour le jeu.

  1. Primitive Distance Accuracy:  montre la précision de la distance calculée par le streamer par rapport à la distance calculée par le GPU.
  2. Mesh UV Densities Accuracy: montre l’effet des densités UV utilisées par le streamer pour chaque mesh. Si les densités UV sont fausses, les textures sur les meshes risquent d’être floues ou sur-streamées.
  3. Material Texture Scales Accuracy : Certaines textures utilisées dans un matériau sont échantillonnés en utilisant une valeur à l’échelle de l’un des canaux mesh UV. Cela tente de calculer les coordonnées de la texture à utiliser et l’échelle à appliquer à chaque texture échantillonnée.
  • Mathematics material nodes: ajout de quelques nœuds de matériaux couramment demandés pour éviter l’utilisation de fonctions ou de noeuds personnalisés pour les opérations courantes. Les nœuds marqués du tag « Fast » exécutent des approximations au lieu des instructions réelles. C’est top d’y avoir pensé, ne trouvez-vous pas ? Ils améliorent la performance de matériaux plus complexes, mais ont des restrictions d’entrée et les compromis de précision. A nous de voir si visuellement ça change vraiment la donne… et au pire, les utiliser sur mobiles par exemple ! J’aime bien qu’on nous laisse un peu de boulot aussi à nous développeurs ! Ça rappelle le calcul de la racine carrée inverse dans Quake 3 arena (et plus vieux que ça d’ailleurs). Ca me rappelle aussi les tables de précalcul (sinus et autres fonctions) qu’on utilisait en assembleur pour faire des démos et éviter des calculs ! Bon, ça manquait cruellement de précision toutefois 😉

  • Previous Frame Switch node: Si vous voulez faire des animations de type « motion blur », vous savez le fait de voir encore en partie la forme précédente pour simuler un effet de vitesse, et ceci en exploitant la persistance rétinienne… hé bien, il serait fort utile d’accéder aux informations de la trame précédente, non ? Ceci est rendu possible par ce nouveau noeud. Je ne sais pas encore quelles informations il fournit, mais je ne vais pas tarder à le savoir. Ce n’est pas l’image à proprement parler, mais un ensemble de paramètres. A tester…

  • Pre-Skinned Local Normals material Node: Vous pouvez maintenant utiliser cette fonction pour obtenir des effets comme la création automatique des maps des UV sur les skeletal meshes en utilisant des matériaux tri-planaire alignés.

Cela fonctionne d’une manière similaire à Pre-Skinned Local Position, mais renvoie la normale à la surface locale pour Skeletal Meshes et statiques Meshes.  Cela ouvre la porte à plus d’effets possibles dans les matériaux.

Animations, Matinee, Sequencer

  • Sequencer animations blending: Sequencer prend désormais en charge le mélange pondéré entre plusieurs animations permettant des séquences d’animation complexes construites à partir d’animations existantes. Toute animation peut être ajoutée à un moment donné. Bon la vidéo parle d’elle-même (c’est chiant quelques fois de mettre des mots sur des concepts):

Vous pouvez contrôler le poids d’une animation en élargissant la piste et en saisissant la valeur dans le montage. Pour permettre à votre Skeletal Mesh d’utiliser plusieurs poses, un nouveau mélange multi par le nœud Alpha est disponible. Vous pouvez ajouter de nouvelles poses dans le menu contextuel.

  • Sequencer events: peut désormais contenir des payloads de données (traduire par lot de données supplémentaires – ou surcharge) pour déclencher des événements suivant le contexte. Pour déclencher un événement avec un payload, créer une structure qui définit les paramètres pour l’événement et l’appliquer à la propriété parameter struct:

  • Animer des objets dynamiques avec Sequencer:  en utilisant des Blueprints pour appliquer des Sequences aux objets lors de l’exécution.  Cela signifie qu’on peut animer un autre objet que celui pour lequel la séquence a été écrite. Pour extraire les identificateurs d’une séquence, utiliser le nouveau nœud GetSequenceBindings.
  • Amélioration de l’interface graphique de Sequencer: un nouvel outil de transformation Touches / sections permet de repositionner et redimensionner la sélection actuelle. Il est possible de copier et coller des pistes sur des objets compatibles. La totalité de la séquence est à l’heure relative, un plan peut être isolé en réglant “Evaluate Sub Sequences in Isolation”. Les composants clés peuvent être sélectionnés individuellement.

  • Pose snapshotting: Possibilité de capturer une pose au runtime du Skeletal Mesh, et ce, en Blueprints pour une utilisation dans le Plan Anim!

  • Relier des courbes aux bones: les courbes d’animation peuvent désormais être reliées à un os du Squelette afin d’être éliminées avec l’os lors du changement de LOD, particulièrement utile pour les animations faciales.
  • Modifier les nœuds des courbes d’animation: les courbes d’animation peuvent désormais être modifiées en utilisant la logique arbitraire dans l’animation graphique pour permettre des animations plus dynamiques. Après avoir ajouté le nouveau noeud Modify Curve , vous pouvez faire un clic droit dessus et choisir les courbes à modifier. Grâce à cela, on peut ajouter un peu de hasard dans la courbe d’animation et obtenir des séquences encore plus réalistes visuellement.

  • Un nouveau système pour les animations faciales a été ajouté, mais reste au stade expérimental. Nous n’avons que peu d’infos pour le moment, mais cela suggère l’arrivée d’un outil pour cela dans les versions ultérieures !

Physique et particules

  • Mass properties debugging: possibilité de visualiser le centre de la masse et de l’inertie associée à des objets physique. A ben, en voilà une bonne idée !

Pour visualiser les propriétés de masse, autoriser showflag (Show > Advanced > Mass Properties). L’épaisseur de chaque axe indique le moment d’inertie le long de l’axe.

  • Le support de véhicules est déplacé sous forme de plugin: le support PhysX véhicule est maintenant en option pour économiser de l’espace disque et de mémoire aux utilisateurs qui n’emploient pas ce support. Il y a également  ajout de plusieurs points d’extension physique utiles au moteur (par exemple OnPhysSceneInit/Term, OnPhysSceneStep) afin de rendre plus facile pour les autres développeurs l’écriture de leurs propres systèmes similaires. Une étape manuelle est nécessaire si vous souhaitez migrer des assets anciens ‘TireType’ (déconseillé dans le moteur) pour les nouveaux assets ‘TireConfig’ (définis dans le nouveau plug-in PhysXVehicles). Une nouvelle commande de console disponible dans l’éditeur UE4 le fait pour vous: il suffit de convoquer la console et entrez ‘ConvertTireTypes’. Cela va créer de nouveaux assetsTireConfig, copier les propriétés et les affecter à des Blueprints VehicleWheel. Les anciens assets de TireType peuvent alors être enlevés.

Je ne sais pas quoi penser du fait qu’ils retirent les véhicules et les placent en plugin… probablement ont-ils jugé trop léger cette fonctionnalité et préfèrent-ils laisser la possibilité à d’autres plugins de se greffer à la place de ce dernier. Ce n’est pas toujours évident de comprendre les choix architecturaux réalisés derrière un moteur de cette importance !

Programmation blueprints et C++

  • nouveau: cooking blueprints en C++: les blueprints sont packagés en code source natif. Fonction jadis expérimentale dont nous avions parlé mais qui est aujourd’hui passé en mode production. De fait, programmer en Blueprint ou C++ ne devrait pas avoir d’impact… Reste que quelques fois, il est plus facile de programmer directement en C++, mais cela n’enlève rien au fait que les Blueprints sont plus faciles à comprendre et à maintenir dans le temps. Voir la notice.

  • Nouveau: compilateur C++ plus rapide – Unreal Engine 4 codebase compile désormais jusqu’à 50% plus rapidement. Euh oui, mais pourquoi ??? C’est sorti du chapeau avec le lapin qui court plus vite ? Non, c’est ce qui a été permis grâce à de nouvelles conventions.

Les conventions pour le nouveau modèle sont les suivantes:

  1. Chaque tête comprend maintenant tout ce qu’il faut pour compiler – un en-tête de CoreMinimal.h contient un ensemble de types ubiquitaires de base (par exemple fstring, FName, tarray, FVector, etc ….)

  2. Chaque fichier .cpp comprend son fichier .h  pour valider que chaque tête contient tout ce qu’il faut. UnrealBuildTool vérifiera que les fichiers source adhèrent à cette convention.

  3. Aucun code de moteur ne comprend un en-tête monolithique, comme Engine.h ou UnrealEd.h plus –  Ils existent encore pour la compatibilité avec les projets de jeu et ne produisent pas des avertissements quand ils sont déjà inclus.

  4. Aucun code de moteur inclut un en-tête pré-compilé.

Voilà, rien de magique, juste du savoir-faire et un peu de logique. C’est vrai que le code source du moteur n’est pas évident à maîtriser pour le profane – y-a pas mal de macros et cela ne respecte pas toujours les conventions C/C++.  Mais cela progresse aussi de ce coté, même le code source progresse en maturité et les résultats sont là: une compilation beaucoup plus rapide !

  • Des collections d’objets peuvent maintenant être stockés dans les Blueprints, et sans forcément passer par des tableaux ou des datatables. Il s’agit des Maps et de Sets. On en avait déjà parlé il me semble, alors c’est peut-être que c’est passé en mode production maintenant, je ne sais plus. Ces structures de données garantissent qu’ils ne contiennent que des articles uniques, sans doublon; Ils sont optimisés en ce sens.

La différence entre map et set ? Dans un set, il n’y a pas vraiment de notion d’ordre. En contre-partie, c’est plus léger et plus rapide d’accès qu’une map . La Map non plus remarquez, mais il y a une clé d’accès qui garanti un accès très rapide également !

La nouveauté, c’est surtout le contrôle de type au niveau de la variable qui est maintenant dans un menu déroulant, vous permettant de sélectionner ‘Single Variable’, ‘Array’, ‘Set’, ou ‘Map’. Lorsque «carte» est sélectionnée, un deuxième menu déroulant pour le type «valeur» apparaît.

De même, les variables de type Map et Set peuvent maintenant être exposés du C++ vers les Blueprints.

Menus, widets, umg

  • nouveau Interface Blur rects pour brouiller l’arrière plan dans l’interface utilisateur ou dans la scène 3D.

Une valeur de résistance définissant le flou d’arrière-plan  va de 0 (off) à 100 (pleine puissance) et peut être réglée pour  modifier le pourcentage de flou au fil du temps.

Ce n’est pas si gadget que ça: en fait, j’avais développé ma propre fonction pour ça en utilisant les filtres 2D, mais si c’est tout prêt, c’est encore mieux 🙂

  • Mise en place d’un asset store pour les fontes qui réduit la consommation de mémoire et l’améliore la stabilité de l’application.

Sons, musiques

  • Contrôle du volume et de la hauteur des sections audio directement dans Sequencer ce qui permet aux concepteurs de mettre en place fade in, fade out, et d’autres effets. Ben oui, certaines fonctions évidentes ne sont pas toujours en place – ça comble un manque ici… N’oublions pas que le sequencer est relativement récent et qu’il est amené à remplacer totalement matinee à terme (c’est déjà le cas en vérité).

Réalité virtuelle

  • Menu VR editor amélioré: Les menu rapide et menu radial dans l’éditeur de VR ont été mis à jour avec un nouveau look et pour améliorer la convivialité et la fonctionnalité.

Cliquez sur le touchpad pour appeler / fermer le menu radial, sélectionnez les options avec une direction sur le touchpad, puis sélectionnez avec la gâchette. Vous pouvez également sélectionner des éléments avec le laser, mais le pavé tactile remplace le laser.

  • VR Editor Numpad: entrer rapidement des chiffres (0-9), ainsi que des valeurs négatives et décimales dans les champs de texte dans l’éditeur de VR en utilisant la nouvelle interface. Utiliser le bouton de déclenchement pour sélectionner les numéros, la touche de modification pour revenir en arrière. Pour retirer le pavé numérique, cliquer ailleurs dans la scène, ou sur le pavé tactile, tout comme pour le menu radial standard.

  • Champ éloigné en vision monoscopique pour mobile VR: peut fournir un gain important de performances que de rendre les objets éloignés une fois. La divergence stéréo diminue à mesure que les objets sont plus éloignés de la caméra. A une certaine distance, le rendu stéréo des objets éloignés est indiscernable d’un rendu de monoscopique. D’où cette optimisation qu’on aurait aimé réalisée plus tôt tant cela parait évident, mais bon !

    C’est prise en charge uniquement sur les plates-formes mobiles pour l’instant. Pour l’activer, sélectionnez la case à cocher dans Project Settings -> Rendering -> VR. Les multi-vues mobile et le champ lointain monoscopique  ne sont pas supportés simultanément et mobile HDR doit être désactivé.

Mobiles, consoles, HTML5

La version est encore expérimentale mais sera définitive lors de la prochaine mise à jour. Bon, ça c’est la nouvelle qui a fait le tour du web ! C’est aussi ce sur quoi l’équipe avec laquelle j’ai travaillé il y a plus d’un an maintenant attendait (nous en avions eu vent, mais pas de façon officielle).

Personnellement, je ne sais pas trop quoi penser de cette console. L’idée est assez bonne, mais je ne me sens pas trop concerné en tant que joueur… j’ai une vieille Wii parce que c’est une console familiale et qu’il y avait des accessoires sympas… après je suis plus console NexGen type Xbox one/PS4 même si j’en suis encore à jouer avec ma vieille xbox 360.  En tous cas, je ne sais pas encore comment on va exporter vers la console, si cela va être simple ou une grosse usine à gaz (car l’export vers console d’UE4, c’est quand même pas très pratique). Si c’est simple et direct, je me prendrai probablement une Switch. A suivre…

  • Aperçu de rendu (opengl es 3.1, metal, vulkan) – Vous pouvez obtenir un aperçu des fonctionnalités pour mobiles haut de gamme dans la fenêtre de l’éditeur en utilisant Mobile Preview. Ce mode émule l’ensemble des fonctionnalités disponibles pour iOS Metal, les appareils Android OpenGL ES 3.1 et Android Vulkan.

  • Support du contrôleur Playsation VR

Pour l’activer, il suffit de changer la valeur « Hand » à « Gun » sur votre Component Motion Controller. Les boutons de la PlayStationⓇVR Aim Controller carte les mêmes boutons sur la manette Dual Shock.

  • Prise en charge améliorée de Metal sur macOs et IOs:  le support permet d’utiliser un grand nombre de nouvelles API et les fonctionnalités de langage shader  ajoutées par Apple sur mac OS 10.12 Sierra et iOS 10.

Mac et iOS prennent désormais en charge la version standard Metal Shader comme paramètre de projet, permettant aux développeurs de choisir si ils souhaitent adopter de nouvelles fonctionnalités ou maintenir une compatibilité ascendante. Il y a aussi un support expérimental pour le rendu HDR sur Mac avec un affichage approprié intégré, tel que le Retina iMac, ou attaché via Thunderbolt.

  • Support Linux ARM64: support pour les périphériques (ARM64 AArch64) sous Linux, ces dispositifs doivent avoir OpenGL 3.2 ou version ultérieure pour faire tourner le moteur. Je me demande ce que ça donne avec le Raspberry Pi 3… c’est un ARM64 bits sous Linux, mais je crois savoir que l’implémentation de l’Api 3D n’est pas encore au top. Si vous avez des infos là dessus, je suis preneur.
  • Support pour Nvidia SLI Alernate Frame Rendering (AFR): pour fournir des performances supérieures lorsque plusieurs cartes graphiques sont détectées. Les développeurs devront travailler avec NVIDIA pour tester leur jeu. Quid du Radeon Crossfire ? Je crois qu’il ne faut pas compter dessus car Epic et Nvidia, c’est la grande histoire d’amour.
  • ‘Custom Stencil’ sur mobiles: Les appareils mobiles peuvent désormais utiliser ‘Custom Stencil’ dans les matériaux de post-traitement permettant la description d’objet, la visualisation des objets occlus, ou d’autres effets. Cette fonction nécessite MobileHDR activée. Pour activer cette fonctionnalité dans votre projet aller à Project Settings -> Rendering -> Postprocessing et réglez ‘Custom Depth-Stencil Pass’ sur ‘Enabled with Stencil’.

Pour cela: Désactivation Allow Static Lighting, de Support Combined Static et CSM Shadowing, de Support Distance Field Shadows, de Support Movable Directional Lights, et Réglage Max Movable Point Lights à 0. Puis activation de Use Shared Movable Point Light Shaders.

  • Andoid graphics debuggeur : les applications Android peuvent être débuggées avec le Mali Graphics Debugger ou Adreno Profiler selon le GPU de l’appareil.  Les options de débogueur Graphics peuvent être trouvées dans Project Settings -> Android. Vous devez d’abord télécharger et installer ces débogueurs sur le site Web du fournisseur de GPU.

  • Options mobile shader de réduction de la mémoire: réduire de manière significative l’utilisation de la mémoire en désactivant les configurations d’éclairage non utilisées. Les paramètres suivants disponibles sous Project Settings -> Rendering peuvent être modifiés pour réduire l’utilisation de la mémoire et diminuer la taille du paquet app.
  • Service de localisation pour les données GPS sur Android et Ios: L’accès aux données GPS est maintenant disponible et les Blueprint nodes sont fournis sous Services-> Mobile-> Location. Ah ben ça c’est chouette pour faire de la réalité augmentée ou toute autre application basée sur la géolocalisation.
  • Streaming audio sous Ios: le Streaming audio peut réduire à la fois l’utilisation de la mémoire et les temps de chargement de niveau. Les assets déjà marqués pour le streaming seront automatiquement diffusées sur d’autres plates-formes.
  • Notifications à distance pour Ios: Le jeu peut enregistrer des callbacks pour gérer la notification. L’éditeur fournit des outils pour mettre en place des notifications pour l’application.

Plugins

  • Sequencer animations en Blueprints (expérimental): Le nouveau plugin Actor Sequence permet d’intégrer des séquences dans les Actor Blueprints .  Cela permet la réutilisation des séquences en liant les animations à l’instance de Blueprint et de les déclencher à l’aide du graphique de l’événement. Vous pouvez également ajouter un composant Actor Sequence à tout acteur pour ajouter des animations à une seule instance d’un acteur. Voir les vidéos ci-après:


  • Support sous Windows des volants, sticks et autres dispositifs non-XInput à l’aide de la nouvelle entrée Raw plug-in.

L’ajout de nouveaux appareils est aussi facile que la mise en place d’une configuration dans les paramètres du projet ou que la modification DefaultInput.ini.

  • Composant force feedback: Le nouveau composant retour de force (Force Feedback) peut être ajouté aux acteurs dans le monde pour créer des effets haptiques localisées. Ces composants ont des propriétés d’atténuation afin de déterminer l’intensité du retour de force sur la base de la distance entre le joueur et l’effet. Les propriétés d’atténuation peuvent soit être spécifiées directement sur le composant ou en créant un asset Force Feedback Atténuation dans le navigateur de contenu et en le réutilisant pour plusieurs composants. Les composants retour de force peuvent également être engendrés dans le monde à partir de blueprints comme l’audio, les decals et des émetteurs de particules.

Conclusion

Bon, encore pas mal de nouveautés, et aussi de corrections de bogues. Je ne vous les liste pas, tout est dans le post original. Pour ma part, je me demande encore comment il est possible de maîtriser un outil si complexe qui évolue si vite… C’est quand même bête d’avoir un outil si intéressant et d’être frustré à l’idée de ne jamais pouvoir le maîtriser complètement...  Je suppose que c’est une idée qui en frustre plus d’un. Mais aujourd’hui, il faut prendre conscience que c’est ainsi… L’important, c’est de connaître l’étendue de la couverture fonctionnelle d’un produit (ce qu’on peut faire avec) et d’étudier le cœur du système, les bases de ce dernier. Après, il suffit d’apprendre en expérimentant pour les fonctionnalités un peu plus spécifiques – mais en fonction des besoins. C’est l’histoire de l’anglais et du four dans l’alchimiste de Coelho. C’est peu la voie que j’ai empruntée avec les cahiers d’Unreal Engine: guider le lecteur le long de l’apprentissage du moteur et de temps en temps, zoomer sur une fonctionnalité précise, mais sans chercher à tout décrire… ce serait mission impossible – et ce serait probablement imbuvable et très effrayant pour le débutant.

Edit 22/02/2017: Une petite vidéo réalisée par Meletou pour présenter quelques nouveautés de la 4.15, un grand merci à lui:

https://www.youtube.com/watch?v=qPvLa15A89w

Découvrez nos derniers numéros !

1 Commentaire

  1. Rossi

    Bravo pour votre site que j’ai connu grâce à Meletou qui publie des tutos sur Youtube.
    Je tiens à vous dire aussi que j’ai acheté Les cahiers d’Unreal Engine et j’ai beaucoup apprécié…
    MERCI pour tout votre travail et surtout pour votre partage.
    Cordialement Marc

    Réponse

Laisser un commentaire

Ces articles pourraient aussi vous intéresser …