Bienvenue ! Dans cette série de tutoriels, nous allons créer une expérience cinématographique VR complète avec Unreal Engine, en partant de zéro. Tout au long de chaque article de la série, nous passerons en revue tous les aspects d’une production haute fidélité en temps réel, des meilleures pratiques pour ce type de contenu aux différents conseils, astuces et solutions de contournement pour les moteurs en temps réel.

Notre produit final place le spectateur dans un paysage celtique et rêveur, dans le court moment de silence entre la nuit et l’aube. Sont-ils seuls, ou les fantômes se lèvent-ils un instant pour goûter la rosée et retomber dans leur sommeil ?

Ce tutoriel est destiné aux utilisateurs expérimentés des moteurs de jeu et aux nouveaux venus du rendu en temps réel. Nous n’aborderons pas beaucoup la création réelle de ressources 3D, mais plutôt la façon dont nous pouvons pousser le rendu en temps réel à ses limites et toutes les façons nouvelles et variées d’utiliser les moteurs de jeu pour fournir des pixels de haute qualité en temps réel. Les moteurs arrivent, et quand ils arriveront, vous serez prêts !

Partie 1: Terrain – Photogrammétrie à l’échelle micro et macro

Utilisation de l’imagerie satellitaire avec le système d’aménagement paysager d’Unreal

Dans plus de projets qu’il n’est possible de compter, les paysages naturels sont l’une des composantes clés de la géométrie du monde. Qu’il s’agisse de productions en temps réel haute fidélité ou de jeux d’arcade low-poly, la quasi-totalité des utilisateurs de moteurs en temps réel utilisent des outils paysagers en temps réel… et se conforment à leurs règles.

La plupart des systèmes d’aménagement paysager de moteurs en temps réel suivent une ligne de production similaire :

  • Une heightmap (peint ou importée par l’utilisateur) déforme un plan.
  • Le plan est découpé en plusieurs parties gérables dont les résolutions sont ajustées dynamiquement pour de meilleures performances.
  • Dans ces plans découpés, diverses textures (fournies par l’utilisateur) sont mélangées à la géométrie du monde selon un splat map, essentiellement un masque couleur déterminant où les textures sont appliquées.

Bien que cette approche permette une qualité et des performances sans précédent dans le contexte du rendu en temps réel, elle est conditionnelle (comme tous les éléments puissants de l’ingénierie) :

  • Vous devrez fournir au moteur des textures.
  • Vous devrez fournir au moteur une texture de hauteur (height map).
  • Vous devrez fournir au moteur une texture de splat (splat map).

Ces trois conditions ne sont pas vraiment surprenantes. Nous n’avons pas encore tout à fait atteint la génération de terrain à liaison neuronale, nous devrons donc nous en tenir à un processus de travail plus manuel. Heureusement pour nous, il y a quelques moyens de faciliter l’obtention de ces choses. Bien que l’option de peindre vos propres textures de hauteur et de splats vous soit toujours offerte, il n’est pas surprenant qu’à part quelques ajustements mineurs, faire l’une ou l’autre de ces choses à la main soit incroyablement inefficace et prend beaucoup de temps. Dans cette partie de la série, nous allons faire deux choses pour atténuer les malheurs de nos paysages :

  • Nous trouverons un moyen de générer notre texture de splats en fonction de la géométrie du terrain afin d’avoir automatiquement des textures de falaise sur nos falaises et des textures d’herbe sur nos collines en pente.

Mais tout d’abord ! Dans le projet Unreal, nous naviguons vers l’onglet Paysage où nous pouvons créer et éditer des paysages dans notre scène. Là, vous avez la possibilité de créer à partir de zéro ou d’importer une texture de hauteur existante.

Nous en sommes maintenant au stade où nous avons besoin d’une texture de hauteur pour notre scène. Bien que nous utilisions des données satellites pour notre projet, il est important de savoir que si vous avez besoin d’une méthode plus granulaire pour créer une carte de hauteur, il existe un certain nombre d’outils de qualité industrielle que vous pouvez utiliser pour générer un terrain comme World Machine ou Houdini’s heightfield tools. Nous ne sommes cependant pas accablés par une configuration de terrain spécifique pour notre projet, nous pouvons donc utiliser des données satellitaires.

Il y a quelques façons d’obtenir des données satellitaires en ligne, mais la plus rapide que j’ai trouvée est certainement Terrain.Party. Cela a commencé comme un moyen d’obtenir une carte de hauteur du monde réel pour Villes : Skylines, mais même la plus petite recherche en ligne révélera que c’est devenu essentiellement omniprésent pour nos besoins actuels. Nous sélectionnons une zone (nous sommes restés fidèles à notre thème et avons choisi le nord de l’Ecosse), exportons et obtenons un fichier zip contenant plusieurs fichiers de texture HDR. Nous allons avec le plus pointu ; c’est notre texture de hauteur!

Nous pouvons maintenant charger notre fichier de texture de hauteur dans Unreal. Avant de terminer l’importation, il nous sera proposé d’ajuster différents paramètres d’importation ; pour nos besoins, nous pouvons simplement utiliser les paramètres par défaut. Après l’importation, nous redimensionnons le terrain pour mieux répondre à nos besoins. Nous (et vous, si vous suivez votre propre projet) devrions nous retrouver avec quelque chose qui ressemble à ceci:

Matériaux PBR haute fidélité et comment les utiliser efficacement

Si vous êtes même modérément intéressé par le rendu 3DCG en 2018, vous avez sûrement entendu parler de Megascans ou Substances. Ces deux produits ne fonctionnent pas de la même manière, mais ils adhèrent aux mêmes règles sous-jacentes de Physically Based Rendering.

Vous serez probablement mieux servi ailleurs si vous êtes à la recherche d’une plongée approfondie dans les complexités du modèle de shader PBR, mais nous pouvons certainement tirer une conclusion en comparant les deux produits : alors que les différents calculs effectués par PBR assurent un rendu physiquement précis, la proximité des différents paramètres entrés avec le monde réel dépend entièrement de l’artiste. Les mégascan en photogrammétrie ont leurs valeurs basées sur la photogrammétrie et les substances sont fabriquées à la main et elles ont toutes les deux une belle apparence, c’est simplement une question de choix entre photoréalisme et maniabilité des procédures.

Un bon point de départ entre les deux options serait peut-être d’aller chercher des textures non-PBR sur des sites comme Textures.com et de les transformer en PBR compatible avec des utilitaires comme Substance B2M ou Unity Technologies De-Lighting Tool. Pour les besoins de ce projet, nous utiliserons Substance B2M ; Puisque nous pouvons choisir nos propres texture, c’est un peu plus granulaire que de choisir dans la bibliothèque Megascan, et en suivant le thème d’être aussi efficace que possible dans notre travail, nous pouvons générer un tableau complet de texture PBR (Albedo, Roughness, Metalness, Ambient Occlusion, Displacement, etc) sur une texture de base.

Nous aurons besoin de trois textures pour notre terrain ; une texture d’herbe, une texture de falaise sableuse et une texture de sol herbeuse pour servir d’intermédiaire pour les deux textures principales. Voici celles que nous avons choisies sur Textures.com

Après avoir fait nos choix, nous les exécutons dans Substance B2M. Vous pouvez ajuster les différents paramètres à votre guise. Il existe divers tableaux de référence en ligne des valeurs de POV que vous pouvez utiliser pour être aussi précis que possible dans le monde réel, mais pour les besoins de ce projet, nous avons décidé d’opter simplement pour ce qui semble le mieux visuellement. Ne sommes-nous pas, après tout, les maîtres de notre propre art ?

Une fois le processus B2M terminé, nous aurions dû générer un bon nombre de textures pour nos trois matériaux. En suivant les conventions de nom des éléments et des projets d’Epic, nous pouvons maintenant les placer dans notre projet et les regrouper !

Utilisation de matériaux paysagers procéduraux pour gagner du temps

Maintenant que nous avons créé notre texture de hauteur de terrain et nos textures, nous pouvons commencer à travailler sur la création du matériel paysager pour ce terrain. À l’instar des maillages courants, les paysages moteurs en temps réel se voient appliquer des matériaux qui régissent la façon dont ils saisissent une texture splat et la façon dont ils produisent un produit fini.

Alors que certains moteurs comme Unity et Amazon Lumberyard offrent un matériel de terrain standard prêt à l’emploi, Unreal landscapes nécessite un peu plus de travail. Pour nos besoins, ce n’est pas vraiment un problème, car nous allons profiter de ce contrôle granulaire pour générer la texture splat complète via un code de shader. Notre graphique final des matériaux ressemblera à ceci :

Cela peut sembler un peu intimidant à première vue, mais ne vous inquiétez pas, c’est en fait beaucoup moins douloureux à comprendre qu’à  regarder. Si nous nous rapprochons des composants, nous pouvons décomposer tout le matériel en une petite recette qui sera répétée pour diverses cartes :

Nous commençons par le nœud LandscapeCoords, qui fournit essentiellement les coordonnées UV du terrain à l’éditeur de matériaux. Pour un contrôle plus granulaire du carrelage UV de nos trois textures, nous divisons simplement ce nœud pour obtenir la taille de texel que nous souhaitons pour nos différentes cartes.

Nous utilisons alors simplement le nœud WorldAlignedBlend, qui produit un alpha basé sur les directions normales de notre maillage. Il faut un certain écart d’ajustement et des niveaux de netteté, mais à la fin, nous pouvons produire deux masques satisfaisants : un pour l’herbe à la falaise et l’autre qui ajoute le sol herbeux en plus de cela afin d’améliorer le réalisme général de notre mélange. Pour l’ensemble de notre matériel, chaque paramètre de sortie de matériel que nous utilisons ( Albedo, Normal, Roughness et Ambient Occlusion) suit cette simple boucle.

Notre configuration des paramètres complètée, notre produit fini pour ce billet devrait ressembler à ceci. Une visualisation rapide de la rugosité de la scène permet de visualiser l’étendue du mélange effectué.

Si vous le souhaitez, vous pouvez vous rendre sur BlueprintUE et prendre le graphe des matériaux pour votre usage ! Pour nos besoins, ce paysage est encore très épuré, mais nous avons maintenant établi assez rapidement une base sur laquelle nous pouvons maintenant bâtir.

Dans le prochain billet, nous examinerons des conseils sur le feuillage en temps réel, l’instanciation des matériaux et les meilleures pratiques en matière d’actifs environnementaux. A très bientôt !

Close Menu